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

 
 
> SAM3U и I2C, как slave работает не правильно.
*rust*
сообщение Jun 1 2011, 11:33
Сообщение #1


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Добрый день!

Пытаюсь реализовать I2S на SAM3U, причем проц. должен работать как slave. Прежде всего хочу отметить что в описании на slave mode есть ошибки.
1.Бит SVREAD регистра TWI_SR говорит об направлении (прием\передача). лог.1-чтение мастером, лог 0-запись мастером, что вытекает из описания битов регистра TWI_SR(стр.656). На рисунке 33-32, стр. 661. наоборот.

2. Бит RXRDY регистра TWI_SR говорит о состоянии приемника. лог 1- был принят байт в регистр приемника TWI_RHR, после последнего чтения, лог 0- не был принят байт в регистр приемника TWI_RHR, после последнего чтения. На рисунке 33-32, стр. 661. опять же наоборот.


Но ошибки это не главное, чудеса начинаются после запуска.

После того как был принят свой адрес, направление передачи "R"-чтение, sam3u посылает ASK-это нормально, и я должен положить байт в регистр передачи TWI_THR. Я так и делаю, но в зависимости от значения байта, мой SAM3U(slave) либо отпускает линию SDA или нет - а вот это уже странно.
Как вообще slave может удерживать линию SDA?

Судите сами.
(адрес slave -10)
1 картинка- после ASKа загружаю 0xFF. sam3u отпускает шину SDA - нормально. Далее мастер формирует ПОВСТАРТ и СТОП-условие
Прикрепленный файл  receive_FF.bmp ( 19 килобайт ) Кол-во скачиваний: 17

2 картинка- после ASKа загружаю 0x01. sam3u не отпускает шину SDA- не понятно. Далее мастер пытается сформировать СТОП, но Sam3u пытается удерживать линию SDA в нуле.
Прикрепленный файл  receive_01_first.bmp ( 18.54 килобайт ) Кол-во скачиваний: 14

3 картинка для информации, что происходит после 2 картинки, когда линия SDA в каком-то непонятном состоянии.
Прикрепленный файл  receive_01_second.bmp ( 18.51 килобайт ) Кол-во скачиваний: 8


А теперь главный вопрос, кто виноват и что делать? Я готов написать в ATMEL, но хотелось бы услышать, мнения форумчан.
Может где-то мой косяк зарыт? Код перекраивал много раз, итог один.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jun 1 2011, 11:50
Сообщение #2


Гуру
******

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



Про атмеловский TWI ничего хорошего не скажу. У меня была надежда, что в SAM3 его исправят, однако практика показала, что воз и ныне там.

А вот картинки ваши странные: средний уровень откуда взялся? У мастера push-pull на SDA?
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 11 2011, 12:24
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jun 1 2011, 15:50) *
Про атмеловский TWI ничего хорошего не скажу. У меня была надежда, что в SAM3 его исправят, однако практика показала, что воз и ныне там.

А можете подробнее рассказать про грабли TWI модуля?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 11 2011, 12:39
Сообщение #4


Гуру
******

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



Цитата(sonycman @ Jun 11 2011, 16:24) *
А можете подробнее рассказать про грабли TWI модуля?

Они практически в полном составе унаследованы от SAM7, разве что убрали наиболее одиозные глюки и добавили PDC. Идеология, однако, осталась прежней: мастер синхронного интерфейса у них может вылететь в overrun/underrun.

Мое общение с TWI на SAM3 закончилось довольно быстро. Сдуру был написан честный драйвер с PDC и прерываниями, однако на тестировании выяснилось, что из 10 слейвов в составе устройства отзываются 8. Два AD9887 принципиально не дают ACK после адреса.
Памятуя безблагодатные пляски с бубном при аналогичных симптомах на SAM7, не стал даже разбираться в причинах сего явления и просто откатился на bit-band.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 11 2011, 14:07
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jun 11 2011, 16:39) *
Они практически в полном составе унаследованы от SAM7, разве что убрали наиболее одиозные глюки и добавили PDC. Идеология, однако, осталась прежней: мастер синхронного интерфейса у них может вылететь в overrun/underrun.

После беглого прочтения доки заметил пока, что если в режиме Master Receiver не успеть вовремя (перед приёмом последнего байта) взвести STOP бит, то вместо NACK будет выдан ACK и принят лишний байт.
Это оно?

Цитата
Мое общение с TWI на SAM3 закончилось довольно быстро. Сдуру был написан честный драйвер с PDC и прерываниями, однако на тестировании выяснилось, что из 10 слейвов в составе устройства отзываются 8. Два AD9887 принципиально не дают ACK после адреса.
Памятуя безблагодатные пляски с бубном при аналогичных симптомах на SAM7, не стал даже разбираться в причинах сего явления и просто откатился на bit-band.

Странные капризы. Возможно, слейвы тоже не без греха.
Буду надеятся, что меня не коснётся sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 11 2011, 14:24
Сообщение #6


Гуру
******

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



Цитата(sonycman @ Jun 11 2011, 18:07) *
После беглого прочтения доки заметил пока, что если в режиме Master Receiver не успеть вовремя (перед приёмом последнего байта) взвести STOP бит, то вместо NACK будет выдан ACK и принят лишний байт.
Это оно?

Это еще один прикол, затрудняющий применение PDC на приеме: последний ничего о ACK/NACK не знает.
Если в Master Receiver не прочитать вовремя RHR, то получим OVRE, хотя можно было бы просто притормозить прием.

Цитата(sonycman @ Jun 11 2011, 18:07) *
Странные капризы. Возможно, слейвы тоже не без греха.
Буду надеятся, что меня не коснётся sm.gif

Да нет, подобное наблюдается исключительно на атмеловских армах. С программным I2C и на других хостах те же AD9887 работают замечательно.
Насчет не коснется сказать заранее нельзя: повезет - заработает, не повезет - увы. Главное, не пытаться расшибить голову в последнем случае.

Вот удивительно: на AVR сделали вполне приличный TWI, а тут просто говно откровенное.

UPD:
Сейчас глянул свежие даташиты на SAM7S/X в плане TWI.
Цитата
UNRE and OVRE bit fields removed from TWI Status and Interrupt register tables

Гениально: нет битов - нет и проблемы sad.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 13 2011, 13:04
Сообщение #7


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jun 11 2011, 18:24) *
Вот удивительно: на AVR сделали вполне приличный TWI, а тут просто говно откровенное.

biggrin.gif это грустно.

В мануале по поводу I2C с PDC в режиме мастера на приём сказано задавать длину пакета как size-1.
Ну это понятно, STOP то надо выставлять после приёма предпоследнего байта.
Ну а сам последний байт надо считывать уже ручками? DMA его не читает?

Может ли TWI модуль выдавать REPEATED START (режим мастера)?
Судя по документации, он это делать клинически не обучен sad.gif

И ещё - нашёл в регистре TWI_SR описание для битов ENDRX, ENDTX, RXBUFF и TXBUFE.
Только про них больше нигде ничего не сказано.
Что это такое? Останки какой-то вырезанной фичи по буферизации?

ЗЫ: а, нашёл по последнему вопросу описание в разделе PDC... sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 13 2011, 21:01
Сообщение #8


Гуру
******

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



Цитата(sonycman @ Jun 13 2011, 17:04) *
Ну а сам последний байт надо считывать уже ручками? DMA его не читает?

Ручками, ага.

Цитата(sonycman @ Jun 13 2011, 17:04) *
Может ли TWI модуль выдавать REPEATED START (режим мастера)?
Судя по документации, он это делать клинически не обучен sad.gif

При чтении делает автоматом, по желанию пользователя не обучен.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- *rust*   SAM3U и I2C   Jun 1 2011, 11:33
|- - singlskv   Цитата(aaarrr @ Jun 11 2011, 16:39) Они п...   Sep 8 2011, 17:07
|- - aaarrr   Цитата(singlskv @ Sep 8 2011, 21:07) ну и...   Sep 8 2011, 17:45
|- - singlskv   [/quote name='aaarrr' date='Sep 8 2011...   Sep 8 2011, 18:08
- - BurglarInt   Цитата(*rust* @ Jun 1 2011, 15:33) *rus...   Jun 1 2011, 12:04
- - *rust*   stan@ngfp.ru ЦитатаПро атмеловский TWI ничего хор...   Jun 1 2011, 12:24
|- - aaarrr   Цитата(*rust* @ Jun 1 2011, 16:24) Slave ...   Jun 1 2011, 12:36
- - BurglarInt   *rust*, письмо на твой e-mail я отправил, спасибо.   Jun 1 2011, 12:26
- - *rust*   У FTDI232 100 процентов не I2C, многое не по специ...   Jun 1 2011, 12:43
- - SergeyDDD   По идеологии I2C, таких ступенек как у Вас принцип...   Jun 11 2011, 14:02
- - *rust*   Привожу мою переписку с тех. службой ATMEL, хотя о...   Jun 23 2011, 12:53


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 05:57
Рейтинг@Mail.ru


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