Полная версия этой страницы:
TWI at91rm9200
sergeeff
Jan 30 2007, 22:36
Коллеги!
Удалось ли кому реально использовать TWI для работы с EEPROM? Перепробовал все доступные примеры. Все работают абы как. На форуме www.at91.com народ рекомендует плюнуть на аппаратную реализацию и сделать все программно.
Какие есть мнения на сей счет?
beer_warrior
Jan 31 2007, 00:58
Если не ошибаюсь блок единый для всех AT91. По сравнению с AT90 конечно отдыхает. Но тем не менее, с EEPROM работает нормально. (После некоторого секса). Исходники брал на Сахаре.
sergeeff
Jan 31 2007, 19:31
Проблема, как часто бывает, лежала в области hardware. На шине i2c pull-up резисторы на 3.3 В стояли по 4к7. Поставили 1к5 - все железно заработало.
beer_warrior
Feb 1 2007, 16:17
Кстати, а никто не делал TWI на прерываниях? А то либо система получается склонная к зависанию, либо таймауты ручками прикручивать.
sergeeff
Feb 1 2007, 18:08
Цитата(beer_warrior @ Feb 1 2007, 17:17)

Кстати, а никто не делал TWI на прерываниях? А то либо система получается склонная к зависанию, либо таймауты ручками прикручивать.
А про какие timeout'ы вопрос. Дождаться конца передачи? Или ack?
beer_warrior
Feb 1 2007, 18:48
Я имею в виду оборванную транзакцию. Неважно ожидание ACK/NACK или TX_RDY/RX_RDY. Там запросто можно зависнуть в вечном ожидании. Впрочем часа два уже пишу.
DmitryM
Dec 14 2010, 17:15
Озадачился загрузкой с TWI в связи с проблемами с AT45. Благо на плате разведены часы DS1337 и доп.флешка серии 25. Вместо часов еепромину и поставил.
Написал прошивалку еепром (использую прерывания).
В процессе отладки обнаружил следующий феффект:
при первом чтении блока данных контроллер выставляет NACK и транзакция прекращается, понятное дело. И статусные регистры, само собой, о nack не слова. Сначала читал по байту, но долговато, неинтересно. Решил тем что, если сначала прочитать один байт, а потом повторить уже чтение всего блока данных, то считывается весь блок со всеми ACK, NACK и прочими соответствиями. Заинтересовало то, что RomBoot делает по такому же алгоритму. Идут две попытки чтения. Есть энтузиасты проверить?? На двух экземплярах, на которых пробовал, эффект воспроизводится.
sergeeff
Dec 14 2010, 18:10
Я с прерываниями сделал согласно последним примерам Atmel'a. Все там работает, единственное надо TWI задать максимальный приоритет прерывания.
DmitryM
Dec 15 2010, 02:08
Цитата(sergeeff @ Dec 15 2010, 00:10)

Я с прерываниями сделал согласно последним примерам Atmel'a. Все там работает, единственное надо TWI задать максимальный приоритет прерывания.
А не дадите ссылку на пример с прерываниями, то все что видел - это polling
sergeeff
Dec 15 2010, 04:48
Цитата(DmitryM @ Dec 15 2010, 08:08)

А не дадите ссылку на пример с прерываниями, то все что видел - это polling
kovigor
Dec 15 2010, 06:02
Цитата(beer_warrior @ Jan 31 2007, 06:58)

Если не ошибаюсь блок единый для всех AT91. По сравнению с AT90 конечно отдыхает. Но тем не менее, с EEPROM работает нормально. (После некоторого секса). Исходники брал на Сахаре.
С EEPROM работает без особых проблем. Хотя сам этот блок в AT91 - редкое барахло ...
DmitryM
Dec 15 2010, 06:09
Речь про AT91RM9200, а не про современные. В текущих, по крайней мере семерках, этого эффекта нет.
freeman_
Dec 17 2010, 05:18
Общаюсь через TWI на AT91RM9200 c RTC. В отладке через JTAG все отлично работает. А при запуске вне отладчика перестают выставляться флаги RXRDY и TXRDY. С чем это может быть связано?
DmitryM
Dec 17 2010, 16:07
Цитата(freeman_ @ Dec 17 2010, 11:18)

Общаюсь через TWI на AT91RM9200 c RTC. В отладке через JTAG все отлично работает. А при запуске вне отладчика перестают выставляться флаги RXRDY и TXRDY. С чем это может быть связано?
Если работаете через прерывания и они у вас не одни, нужно использовать __ARMLIB_isrEnableIRQ, иначе прерывания пропадают ( это CW1.5). Или как здесь уже говорили, высший приоритет.
freeman_
Dec 20 2010, 04:40
нет для TWI прерывания не использую
DmitryM
Dec 20 2010, 15:50
Цитата(freeman_ @ Dec 20 2010, 10:40)

нет для TWI прерывания не использую
Тогда обратите еще раз внимание на errata, нет ли там Ваших условий.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.