|
STR91x I2C - как послать NASK |
|
|
|
May 7 2007, 17:28
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Подключаю к STR912 DS1631 (термодатчик). В соответсвии с даташитом, при получении байтов, после получения последнего байта надо передавать NASK вместо ASK. Как бы это провернуть? А то DS1631 не получив NASK подвисает  . И его приходится сбрасывать (вручную) для продолжения работы.
Сообщение отредактировал vromanov - May 7 2007, 17:29
|
|
|
|
|
May 7 2007, 18:00
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(vromanov @ May 7 2007, 20:28)  Подключаю к STR912 DS1631 (термодатчик). В соответсвии с даташитом, при получении байтов, после получения последнего байта надо передавать NASK вместо ASK. Как бы это провернуть? Вы хоть поняли, что спросили? P.S. ACK и NAK, имеются ввиду, полагаю?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 7 2007, 18:05
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Что сказал - понял. Просто именно такая терминология используется в даташите к DS1631 и в других местах. Цитата Acknowledge (ACK): When a device is acting as a receiver, it must generate an acknowledge (ACK) on the SDA line after receiving every byte of data. The receiving device performs an ACK by pulling the SDA line low for an entire SCL period (see Figure 8). During the ACK clock cycle, the transmitting device must release SDA. A variation on the ACK signal is the “not acknowledge” (NACK). When the master device is acting as a receiver, it uses a NACK instead of an ACK after the last data byte to indicate that it is finished receiving data. The master indicates a NACK by leaving the SDA line high during the ACK clock cycle. За указание другого термина спасибо. Сейчас попробую погуглить по нему
|
|
|
|
|
May 7 2007, 18:18
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Не понимаю, при чем тут байт 06? STR912 автоматически посылает (ну или выставляет) ASK после каждого принятого байта. Если настроено. АSK это вообще то не байт. И сравнивать выставление ASK или NASK с передачей байтов странно.
|
|
|
|
|
May 7 2007, 20:03
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Насколько я понял из ироничного ответа zltigo, байт 0x06 как раз служит для отправки ASK, а для отправки NASK нужно что-то другое. К сожалению, я не могу проверить что-же все таки отправляется на самом деле, т.к. не имею осцилографа
|
|
|
|
|
May 7 2007, 20:33
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
ЭЭЭЭээээ Вы там буковок в теме "I2C" не заметили? И то, что сокращение ASK может обозначать не только символ из таблицы но и удержание линии в нулевом состоянии в течении периода клока, а NASK удержание линии данных в "1" состоянии. К символам это отношения не имеет. ASK это всего лишь сокращение для Acknowledge, а NASK для Not Acknowledge. И если вам это не ведомо, это говорит, что вам не ведом протокол I2C
|
|
|
|
|
May 7 2007, 20:52
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(IgorKossak @ May 7 2007, 22:14)  Очевидно байт 06 это та величина, которую надо записать в командный регистр контроллера I2C STR912, чтобы тот выдал NACK вместо очередного ACK. Нет, к контроллеру это не имеет отношения. Это информационные байты. По крайней мере я так понял. Если же речь идет о I2C протоколе, там STOP все кончается после ответа на последний ACK. NAK, как такового в протоколе нет, разве только выдачу ACK автоматом можно отключить. Цитата(vromanov @ May 7 2007, 23:33)  ASK это всего лишь сокращение для Acknowledge, а NASK для Not Acknowledge. И если вам это не ведомо, это говорит, что вам не ведом протокол I2C Мне неведомы БЕЗГРАМОТНЫЕ A SK и NA SK вместо ACK и NAK. Понятно?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 7 2007, 21:02
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Ах вот вы к чему придрались!  ) К сожалению, страдаю дизграфией. Совершенно спокойно могу написать "влот" вместо "флот". Кто-то не может нормально говорить, у меня проблемы с письмом. NACK и ACK в I2C протколе имеется. Но это совсем не БАЙТ. Ну как ACK может быть байтом если передается течении одного такта, а байт передается в течении 8 тактов? В общем, проблема решена. Все работает. Темература успешно отображатеся на LCD
|
|
|
|
|
May 7 2007, 21:15
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(vromanov @ May 8 2007, 00:02)  NACK и ACK в I2C протколе имеется. В терминологии Philips - владельцев патента на I2C сокращения ACK и NACK не используются. Есть четкое понятие "Acknowledge Flag". Он может присутствовать/передаваться или просто отсутствовать. Отсутствие флага не значит, что было передано неподтверждение, поскольку устройство может просто отсутствовать. Посему "Передавать NACK" термин по отношению к I2C некорректный. Правильно - "Ну устанавливать ACK Flag"("Не передавать ACK").
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 7 2007, 21:41
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Что вы говорите..... Берем первый попавшийся пример с сайта филипса и читаем ;* acknowledge bit. If NACK is received, the NO_ACK bit is * ;* set. If arbitration is lost or an error occurs during * ;* I2C_TRX_BYTE the function is exit with the I2C_ERR bit * ;* set. * .... MOV I2DAT,#80H ;send NACK Т.е. и филипс использует сокрашение NACK и его (NAСK) можно "передать" или "принять". Что еще придумаем?
|
|
|
|
|
May 7 2007, 22:09
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(vromanov @ May 8 2007, 00:41)  Берем первый попавшийся пример с сайта филипса и читаем А зачем "первый попавшийся"? Есть вполне официальные документы, а не какие-то комментарии из двух слов к неким исходникам в АN писанные какими-то программистами. В спецификации I2C и в базирующихся на ней документах на контроллеры Philips понятия Negative ACK (NAK/NACK) отсутствует. В документации на STR912, естественно, отсутствуют тоже. Есть Acknowledge и Non-Acknowledge. Собственно Ваши проблемы и начались с того, что Вы захотели "Послать неподтверждение", вместо того, что бы "Не посылать подтверждение". Что совсем не одно и тоже и поскольку "Послать неподтверждение" принципиально не возможно на I2C, то этого действия Вы в документации на контроллер и не нашли. А я соответственно совсем не понял вопрос, о чем и написал в первом-же своем посте. Цитата Что еще придумаем?  Это Вы сами c собой разговариваете?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 8 2007, 07:05
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Он нашел, потому так и спросил. В STR91x это приблизительно так и выглядит. Надо явно установить бит посылки подтверждений и явно этот бит сбросить перед приемом последнего байта. Но только фокус в том, что сбросить его надо еще когда начинаем принимать предпоследний байт. Доку на STR91x пишут какие-то чурки из Туниса, так что удивляться не приходится. Цитата(zltigo @ May 8 2007, 01:39)  "Послать неподтверждение" принципиально не возможно на I2C, то этого действия Вы в документации на контроллер и не нашли.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|