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

 
 
> ATiny88 - проблема с TWI in slave mode
Student2
сообщение Dec 14 2009, 06:26
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 4-08-09
Из: Болгария / София
Пользователь №: 51 737



Здраствуйте,

Я нашел что Tiny88 держится непослушно в TWI slave mode и тянет линия SDA к GND на неопределенное время после просыпание. Сценарий возникновение проблемы такой:

1. Tiny88 в TWI slave моде, имеет адрес SLA и прерывание только на TWI. Чип работает на внутренним осцилляторе 8MHz.

2. Host посылает SLA+R и чип успешно принимает SLA+R в прерывание. Host начинает читать следующий байт.

3. В то время когда чтения байта происходить (после выполнения прерывании для SLA+R) Tiny88 разрешает прерывание из WDT и уходит в deep sleep mode - все модули с исключение TWI отключенный из питания из PRR. Просыпание возможно только из TWI или WDT.

4. Когда последний бит уже послан Tiny88 находиться в deep sleep моде.

5. Здесь происходить что то неладное (я в процесс уточнения что конкретно происходить )- чип просыпается но держит линия SDA к GND. Только установка и сброс TWSTO или забрана/разрешения TWEN может восстановить SDA.

Вопрос - кто то встречал уже такое поведение Tiny88? Как можно обманут процессора и избежать задержка SDA?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Student2
сообщение Dec 14 2009, 13:43
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 4-08-09
Из: Болгария / София
Пользователь №: 51 737



Осциллограммы показывают что TWI Tiny88 при введение в sleep моде просто перестает действовать (если SLA уже принять). Так если Tiny88 посылает данные и SDA находится в 0 в момент введения в sleep моде то SDA застрянет в 0 и не будет меняться из за SCL. После окончания sleep SDA линия будет навсегда в 0 и только reset TWI может восстанавить коммуникации.

Решение (если можно называть это решение) - если SLA уже принять не идти в sleep.

Я ну буду удивлен если проблема находится не только в Tiny88 но и в другие контроллеры is Tiny или AtMega.

Сообщение отредактировал Student2 - Dec 14 2009, 13:47
Go to the top of the page
 
+Quote Post
niXto
сообщение Dec 14 2009, 15:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 24-06-09
Из: Беларусь
Пользователь №: 50 607



Как только "Host посылает SLA+R и чип успешно принимает SLA+R в прерывание" - сразу - прямо в прерывании - настраивай SMCR на Idle. Как только на I2C будет STOP - снова настраивай SMCR на PowerDown, так как просыпание в PowerDown возможно только если для TWI передается адрес (и он правильный), по остальным байтам чип не просыпается.
Go to the top of the page
 
+Quote Post



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

 


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


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