|
SAM3U и I2C, как slave работает не правильно. |
|
|
|
Jun 1 2011, 11:33
|
Частый гость
 
Группа: Участник
Сообщений: 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 килобайт )
Кол-во скачиваний: 172 картинка- после ASKа загружаю 0x01. sam3u не отпускает шину SDA- не понятно. Далее мастер пытается сформировать СТОП, но Sam3u пытается удерживать линию SDA в нуле.
receive_01_first.bmp ( 18.54 килобайт )
Кол-во скачиваний: 143 картинка для информации, что происходит после 2 картинки, когда линия SDA в каком-то непонятном состоянии.
receive_01_second.bmp ( 18.51 килобайт )
Кол-во скачиваний: 8А теперь главный вопрос, кто виноват и что делать? Я готов написать в ATMEL, но хотелось бы услышать, мнения форумчан. Может где-то мой косяк зарыт? Код перекраивал много раз, итог один.
|
|
|
|
|
 |
Ответов
|
Jun 11 2011, 14:07
|

Любитель
    
Группа: Свой
Сообщений: 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. Странные капризы. Возможно, слейвы тоже не без греха. Буду надеятся, что меня не коснётся
|
|
|
|
|
Jun 11 2011, 14:24
|
Гуру
     
Группа: Свой
Сообщений: 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)  Странные капризы. Возможно, слейвы тоже не без греха. Буду надеятся, что меня не коснётся  Да нет, подобное наблюдается исключительно на атмеловских армах. С программным I2C и на других хостах те же AD9887 работают замечательно. Насчет не коснется сказать заранее нельзя: повезет - заработает, не повезет - увы. Главное, не пытаться расшибить голову в последнем случае. Вот удивительно: на AVR сделали вполне приличный TWI, а тут просто говно откровенное. UPD: Сейчас глянул свежие даташиты на SAM7S/X в плане TWI. Цитата UNRE and OVRE bit fields removed from TWI Status and Interrupt register tables Гениально: нет битов - нет и проблемы
|
|
|
|
Сообщений в этой теме
*rust* SAM3U и I2C Jun 1 2011, 11:33     sonycman Цитата(aaarrr @ Jun 11 2011, 18:24) Вот у... Jun 13 2011, 13:04      aaarrr Цитата(sonycman @ Jun 13 2011, 17:04) Ну ... Jun 13 2011, 21:01   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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|