реклама на сайте
подробности

 
 
> Помогите разобраться как сформировать NACK в I2C
ftpd
сообщение Oct 13 2007, 18:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 3-02-06
Пользователь №: 13 965



Помогите. У меня MSP430F169 у него есть модуль I2C. Но пока не могу понять... Написано, что I2C генерирует АСК после каждого полученного байта, а у меня устройство(DS1337), которое перестаёт передавать мне, когда получит NACK.
Причем, иногда работает и так, но очень часто вешает всё напрочь;( Опускает SDA и всё... Приходится снимать питание с часиков!
Вот... Может у кого-нить есть какие-нибудь идеи?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Oct 14 2007, 16:06
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ftpd @ Oct 13 2007, 21:21) *
а у меня устройство(DS1337), которое перестаёт передавать мне, когда получит NACK.
Это нормальное поведение любого устройства - по NACK прекращать передачу. Более того, это единственный способ для мастера закончить прием. Поэтому принимая последний байт вы должны сформировать NACK. Может невыполнение этого условия и вводит всю вашу систему в ступор?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 15 2007, 09:15
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Сергей Борщ @ Oct 14 2007, 22:06) *
Более того, это единственный способ для мастера закончить прием. Поэтому принимая последний байт вы должны сформировать NACK.

А генерации STOP-условия разве недостаточно для завершения приема? Условия формирования его в Table 15−1.Master Operation из User's Manual указаны.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 15 2007, 10:26
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(rezident @ Oct 15 2007, 12:15) *
А генерации STOP-условия разве недостаточно для завершения приема?
Для генерации STOP линия данных должна быть в 1. Точнее, слейв не должен ее тянуть в ноль. Если не сформировать NACK, то к моменту формирования STOP слейв выставляет на шину первый бит следующего байта, который вполне может быть и нулем. И сформировать STOP будет невозможно.

P.S. С аппаратным I2C в MSP не работал.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 18:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016