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

 
 
> зависание TWI
Штефан Виталий
сообщение Mar 25 2008, 07:11
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 13-02-08
Пользователь №: 35 002



Прошу помощи в освоении шины TWI.
Связываю 2 атмеги 8535, подтяжка резисторы 3к3, длина мене 10см скрость 120 000 кварц 6мег, есть пауза 0.1с перед запуском интерфейса при включении.
Реализованно чтение (мастер читает данные на слейве). Контролирую состояния TWSR через терминалку на слейве и 7ми сегментом индикаторе на мастере.
В какой-то момент связь между мастером и слейвом прекращается, момент этот может прийти через 5с работы, а может всю ночь простоять (не устойчиво). Выражается это в пропадании прерываний, очень редко перед повисом слейв генерит состояние 0, чаще все зависает с нормальными последними состояниями TWSR на мастете 0x50, на слейве 0xB8. На шине SCL наблюдается 1 а на SDA 0 (чаще всего). Пытался оживить интерфейс вписывая TWCR=0x94 или TWCR=0x84 потом пробывал TWCR=0x00 пауза 1с TWCR=0x84. После этого условия старта (кажется 0xE5), потом пробывал перезагружать сторожевиком (при исчезновении прерываний) безтолку. Помогает восстановить связь только аппаратный резет. Тк самопроизвольное зависание контроллера можно ждать очень долго, то я его вешал коротя отверткой сигнальные линии.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Diz
сообщение Mar 25 2008, 21:26
Сообщение #2


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

Группа: Участник
Сообщений: 84
Регистрация: 1-08-06
Пользователь №: 19 250



Посмотрите следующее:

Выдерживается ли пауза после посылки стопа и следующего старта ? В AVR стоп не привязан к
периоду шины - просто дерганье ног и все.

Если TWI построен на прерываниях, нет ли в основной программе установки или сброса
бита прерывания TWIE в TWCR ? Команды вроде TWCR |= (1<< TWIE) будут сделаны
как read-modify-write, если при этом бит TWINT был установлен, то он будет сброшен (записью
в него обратно единицы).

У меня было похожее поведение слейва: держит SDA в нуле и говорит, что bus idle.
Правда, слейв был только приемником. Если правильно помню, он не успевал отработать
стоп и продолжал держать SDA в нуле (от последнего ACK-а). Поведение сильно
зависело от загрузки процессора. Для проверки можно загрузить камешек таймерным
прерыванием на 90% - сбои должны быть чаще :-) Вылечилось отказом от получения Stop
вообще - последний пакет по-умолчанию NACK-ался.
Go to the top of the page
 
+Quote Post
IGK
сообщение Mar 31 2008, 16:04
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 7-01-07
Из: Севастополь
Пользователь №: 24 170



Цитата(Diz @ Mar 26 2008, 00:26) *
Выдерживается ли пауза после посылки стопа и следующего старта ? В AVR стоп не привязан к
периоду шины - просто дерганье ног и все.


Спасибо за подсказку. Я что-то в дш просмотрел это... Надо перечитать внимательно.
Завтра же отрихтую прогу на предмет выдержки после стопа.
У меня зависания чрезвычайно редкие, одно на несколько дней работы, поэтому выловить трудно. Иногда их вообще не бывает. То есть один индикатор редко-редко, но зависает. Другие, а их большинство, работают всегда нормально. Попытки подобрать параметры обмена ни к чему не привели. Но до паузы я не додумался.
До теста отверткой, впрочем, тоже java script:emoticon(':biggrin:', 'smid_11').
Go to the top of the page
 
+Quote Post



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

 


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


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