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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AT91SAM9263 и I2C, Не запускается.
sashad
сообщение Oct 26 2011, 14:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
sashad
сообщение Nov 3 2011, 18:38
Сообщение #2


Участник
*

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



Пришлось сделать програмный I2C
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 3 2011, 19:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sashad @ Nov 3 2011, 22:38) *
Пришлось сделать програмный I2C

И это правильно - избавили себя от борьбы с ветряными мельницами.
Go to the top of the page
 
+Quote Post
Aleph
сообщение Nov 4 2011, 09:07
Сообщение #4





Группа: Новичок
Сообщений: 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;

Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 4 2011, 12:27
Сообщение #5


Гуру
******

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



Неча на TWI пенять. Работает безукоризненно.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 4 2011, 19:23
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Nov 4 2011, 16:27) *
Работает безукоризненно.

Работает непредсказуемо на всей линейке AT91.
Go to the top of the page
 
+Quote Post
Aleph
сообщение Nov 4 2011, 23:01
Сообщение #7





Группа: Новичок
Сообщений: 8
Регистрация: 3-12-08
Пользователь №: 42 191



Цитата(aaarrr @ Nov 4 2011, 20:23) *
Работает непредсказуемо на всей линейке AT91.

Может ссылку на errata можно привести? А то у меня по неопытности на двух из всей линейки AT91 I2C работает.
Go to the top of the page
 
+Quote Post
SimpleSoft
сообщение Nov 5 2011, 07:47
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 273
Регистрация: 3-11-05
Пользователь №: 10 442



Если посылаете 1 байт то сразу засылайте STOP, а потом ждите TXCOMP.

Посмотрите код драйвера под Linux.
Мы писали драйвер с использованием прерываний, только так добились стабильной работы и высоких скоростей.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 5 2011, 08:46
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 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)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 5 2011, 09:21
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Nov 5 2011, 12:46) *
Если умолчать об AVR (там я использовал только мегу8), то на 9261 и G45 управлял (управляю) TWI аудиокодеками, памятью, видеокамерой.
Проблем не отмечено. Без прерываний (как бэ не нужны - все равно переключатель задач работает).

Вот как раз на AVR все просто замечательно. Из опыта с AT91 (полдюжины разных процессоров SAM7-SAM9-SAM3 и около полутора десятков типов разных слейвов) совершенно неразрешимые проблемы были получены в двух случаях: при работе с SAA7113 и AD9887.

P.S. Рассказывать мне, что я "не умею их готовить" не надо - собака съедена на этом семействе.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 5 2011, 10:57
Сообщение #11


Гуру
******

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



Логично предположить, что если TWI работает с сотней микросхем, а с двумя - не работает, то эти две чем-то отличаются от этой сотни...
Я даже могу предположить - чем. ( В бытность программирования телефонных кодеков от силиконлаб - у них при исчезновении внешнего фреймового сигнала с вероятностью 50% гробилась связь по SPI Т.е. тактирование интерфейсного блока связано с неким набором внутренних генераторов.)


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 5 2011, 12:32
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Nov 5 2011, 14:57) *
Логично предположить, что если TWI работает с сотней микросхем, а с двумя - не работает, то эти две чем-то отличаются от этой сотни...

Откуда вдруг сотня? Вот так легко наблюдаемые 12% превратились в 2% sm.gif Я, конечно, не претендую на репрезентативность своей выборки, но, думаю, грабли
будут встречаться как минимум в 10% случаев.

Что касается самого TWI_AT91, то достаточно лишь почитать его описание, чтобы убедиться, что он построен просто идеологически неправильно.
Что помешало атмелам поставить на AT91 TWI по образцу и подобию AT90 (а он почти что замечательный, за вычетом некоторых не смертельных недостатков) - не понятно sad.gif

Цитата(DpInRock @ Nov 5 2011, 14:57) *
Я даже могу предположить - чем. ( В бытность программирования телефонных кодеков от силиконлаб - у них при исчезновении внешнего фреймового сигнала с вероятностью 50% гробилась связь по SPI Т.е. тактирование интерфейсного блока связано с неким набором внутренних генераторов.)

Нет, мимо. Из видеокодеков так себя ведет, например, SAA7121. Но она как раз вполне себе нормально живет с атмеловским TWI на SAM3U (когда внешний клок есть, разумеется).
Две упомянутые микросхемы отлично себя чувствуют на других хостах или программном I2C.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Nov 6 2011, 10:25
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 6 2011, 10:48
Сообщение #14


Гуру
******

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



Цитата
Да вообще-то это известный факт

Вот эта ветка тоже бы могла стать "общеизвестным фактом".

К слову, я действительно никогда не использую флаги ошибок периферии (любой). За бессмысленностью.
--
Ошибки не существует, пока не выяснены точно условия ее возникновения.
Ибо случайные сбои могут быть вызваны некачественным изготовлением микросхемы.
А вот регулярные - чаще всего ошибкой разработчиков.
И вот регулярные сбои достаточно легко определить. И задокументировать.

Пока вот такой задокументированности я не встречал. (Правда и не искал, ибо проблемы не стояло).

Сообщение отредактировал DpInRock - Nov 6 2011, 10:55


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
sasamy
сообщение Nov 6 2011, 12:21
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(DpInRock @ Nov 6 2011, 14:48) *
Пока вот такой задокументированности я не встречал. (Правда и не искал, ибо проблемы не стояло).


Проблема там - у TWI нет FIFO и он почти у всей линейки не подключен к PDC (только начиная с at91sam9g.. они догадались сделать это), любая незначительная задержка записи в регистр для передачи - контроллер автоматом отпраляет STOP и завершает ее.

Сообщение отредактировал sasamy - Nov 6 2011, 12:21
Go to the top of the page
 
+Quote Post

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

 


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


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