|
AT91SAM9263 и I2C, Не запускается. |
|
|
|
Oct 26 2011, 14:54
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 6-07-05
Пользователь №: 6 587

|
Не идут синхроимпульсы через TWCK. Сконфигурировал аппаратный TWI по даташит, пытаюсь записать байт, если выполнить пошагово в отладчике, то после AT91C_BASE_TWI->TWI_THR = data; обмен идет нормально. Если выполнять код без остановки, то проходят 2 - 3 синхроимпульса, потом на порту устанавливается единица, причем процесс носит случайный характер, может застрять в 0 или 1, также варьируется количество синхроимпульсов.
Даже не знаю в какую сторону копать , ПулАП установлен 2,5кОм.
Если поставить останов на while, обмен также идет нормально, если после while, опять начинается ерунда, как будто процессор мешает работе модуля TWI, если ядро остановить отладчиком, то все нормально.
AT91C_BASE_TWI->TWI_THR = data; while(!(AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP)); return;
Сообщение отредактировал sashad - Oct 26 2011, 14:56
|
|
|
|
|
Nov 3 2011, 18:38
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 6-07-05
Пользователь №: 6 587

|
Пришлось сделать програмный I2C
|
|
|
|
|
Nov 4 2011, 09:07
|
Группа: Новичок
Сообщений: 8
Регистрация: 3-12-08
Пользователь №: 42 191

|
Попробуйте сразу после Цитата(sashad @ Oct 26 2011, 15:54)  AT91C_BASE_TWI->TWI_THR = data; и перед циклом ожидания сделать Код AT91C_BASE_TWI->TWI_CR = AT91C_TWI_STOP;
|
|
|
|
|
Nov 4 2011, 23:01
|
Группа: Новичок
Сообщений: 8
Регистрация: 3-12-08
Пользователь №: 42 191

|
Цитата(aaarrr @ Nov 4 2011, 20:23)  Работает непредсказуемо на всей линейке AT91. Может ссылку на errata можно привести? А то у меня по неопытности на двух из всей линейки AT91 I2C работает.
|
|
|
|
|
Nov 5 2011, 07:47
|
Местный
  
Группа: Участник
Сообщений: 273
Регистрация: 3-11-05
Пользователь №: 10 442

|
Если посылаете 1 байт то сразу засылайте STOP, а потом ждите TXCOMP. Посмотрите код драйвера под Linux. Мы писали драйвер с использованием прерываний, только так добились стабильной работы и высоких скоростей.
|
|
|
|
|
Nov 5 2011, 08:46
|

Гуру
     
Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515

|
Цитата Работает непредсказуемо на всей линейке AT91. Если умолчать об AVR (там я использовал только мегу8), то на 9261 и G45 управлял (управляю) TWI аудиокодеками, памятью, видеокамерой. Проблем не отмечено. Без прерываний (как бэ не нужны - все равно переключатель задач работает). Код получен "копипастой"+"удалить ненужное"+"слишком умное упростить" из примеров. Работало сразу. Осциллографом ни разу не тыкал в TWI. --- Вот тов. Алеф отметил явную ошибку гр. топикастера. А если бы не отметил, то вот в копилку мнений о TWI добавилось бы еще одно, причем совершенно напрасное.
Сообщение отредактировал DpInRock - Nov 5 2011, 08:59
--------------------
On the road again (Canned Heat)
|
|
|
|
|
Nov 5 2011, 12:32
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(DpInRock @ Nov 5 2011, 14:57)  Логично предположить, что если TWI работает с сотней микросхем, а с двумя - не работает, то эти две чем-то отличаются от этой сотни... Откуда вдруг сотня? Вот так легко наблюдаемые 12% превратились в 2%  Я, конечно, не претендую на репрезентативность своей выборки, но, думаю, грабли будут встречаться как минимум в 10% случаев. Что касается самого TWI_AT91, то достаточно лишь почитать его описание, чтобы убедиться, что он построен просто идеологически неправильно. Что помешало атмелам поставить на AT91 TWI по образцу и подобию AT90 (а он почти что замечательный, за вычетом некоторых не смертельных недостатков) - не понятно  Цитата(DpInRock @ Nov 5 2011, 14:57)  Я даже могу предположить - чем. ( В бытность программирования телефонных кодеков от силиконлаб - у них при исчезновении внешнего фреймового сигнала с вероятностью 50% гробилась связь по SPI Т.е. тактирование интерфейсного блока связано с неким набором внутренних генераторов.) Нет, мимо. Из видеокодеков так себя ведет, например, SAA7121. Но она как раз вполне себе нормально живет с атмеловским TWI на SAM3U (когда внешний клок есть, разумеется). Две упомянутые микросхемы отлично себя чувствуют на других хостах или программном I2C.
|
|
|
|
|
Nov 6 2011, 10:25
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(DpInRock @ Nov 4 2011, 16:27)  Неча на TWI пенять. Работает безукоризненно. Да вообще-то это известный факт что TWI на всей линейке at91 не работает как надо http://lxr.free-electrons.com/source/drive...es/Kconfig#L287Цитата config I2C_AT91 tristate "Atmel AT91 I2C Two-Wire interface (TWI)" depends on ARCH_AT91 && EXPERIMENTAL && BROKEN help This supports the use of the I2C interface on Atmel AT91 processors. This driver is BROKEN because the controller which it uses will easily trigger RX overrun and TX underrun errors. Using low I2C clock rates may partially work around those issues on some systems. Another serious problem is that there is no documented way to issue repeated START conditions, as needed to support combined I2C messages. Use the i2c-gpio driver unless your system can cope with those limitations.
Сообщение отредактировал sasamy - Nov 6 2011, 10:26
|
|
|
|
|
Nov 6 2011, 10:48
|

Гуру
     
Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515

|
Цитата Да вообще-то это известный факт Вот эта ветка тоже бы могла стать "общеизвестным фактом". К слову, я действительно никогда не использую флаги ошибок периферии (любой). За бессмысленностью. -- Ошибки не существует, пока не выяснены точно условия ее возникновения. Ибо случайные сбои могут быть вызваны некачественным изготовлением микросхемы. А вот регулярные - чаще всего ошибкой разработчиков. И вот регулярные сбои достаточно легко определить. И задокументировать. Пока вот такой задокументированности я не встречал. (Правда и не искал, ибо проблемы не стояло).
Сообщение отредактировал DpInRock - Nov 6 2011, 10:55
--------------------
On the road again (Canned Heat)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|