Полная версия этой страницы:
Проблема с I2C
AlphaMil
Sep 3 2010, 00:49
Уважаемые...
Собрал проект: программный процессор управляет ядром I2C, ПЛИС Spartan3E. Пытаюсь управлять микросхемой захвата видео ADV7181C. При этом на осциллографе при передаче адреса вижу нормальную пачку импульсов от ПЛИС к м/с (стартовая комбинация и 8 бит данных), НО вот бит подтверждения в 0 не опускается, снижается только где-то на 1/3, и распознается как лог 1, т.е. м/с адрес не подтверждает и обмена нет. С другой стороны - снижается же немножко, т.е. адрес верный (адрес задан выводом ALSB).
Может проблема в ядре? Или в выводе ПЛИС (использую обычный IO)???
barabek
Sep 3 2010, 01:06
Цитата(AlphaMil @ Sep 3 2010, 10:49)

снижается только где-то на 1/3, и распознается как лог 1, т.е. м/с адрес не подтверждает и обмена нет.
Такое ощущение, что м/с пытается подтвердить, но у ПЛИС вывод не в открытом колекторе (стоке), а в пуш-пул. Соответственно у него "сильная" "1" и напряжение питание делится на открытых транзистарах ПЛИС (верхний) и ADV(нижний). Проверте конфигурацию вывода данных.
AlphaMil
Sep 3 2010, 01:14
Я это тоже подозреваю. Но вот как сделать или сымитировать открытый коллектор? После синтеза заметил - на выходах I2C используются почему-то не двунаправленные буфферы.
Цитата(AlphaMil @ Sep 2 2010, 20:14)

Я это тоже подозреваю. Но вот как сделать или сымитировать открытый коллектор? После синтеза заметил - на выходах I2C используются почему-то не двунаправленные буфферы.
assign pipa = popa ? pipa_data : 1'bz;
barabek
Sep 3 2010, 01:53
Цитата(AlphaMil @ Sep 3 2010, 11:14)

Я это тоже подозреваю. Но вот как сделать или сымитировать открытый коллектор? .
Имитировать не надо. В альтере можно самому делать настройки режимов выходов. В assignment editir или pin editor. Наверняка у хилых что-то похожее, с ними не работал.
ShSerge
Sep 3 2010, 08:37
Проверьте, не является ли ваш экземпляр микросхемы перемаркированной 7181B (у нее действительно другой адрес). Попали на такую партию случайно. Заподозрили неладное, когда цех промывал плату, надпись начала сползать

. Подключили, как 7181B (отличие - пара проводов) и все заработало.
Alex_VI
Sep 3 2010, 09:26
не так давно боролся с аналогичной задачей. Микросхема только AD9985, что сути не меняет.
По поводу открытого коллектора. Внешний порт объявляем двунаправленным и заводим его линией в процессор. В дизайне процессора уже реализована эмуляция открытого коллектора. (в спартане нет аппаратного драйвера с открытым коллектором).
Софт пишется в SDK? Я столкнулся с тем, что драйвер I2C шины почему-то у меня не работал на прием. Передача шла, прием ни в какую (с теми же симптомами подвисания линии).. В итоге переписал функцию приема данных на свой лад, после чего все заработало. Какие-то косяки у них с ожиданием прерывания от I2C модуля при приеме данных с шины..
Могу скинуть кусок кода приема байта, но он немного ущербный, т.к. во-первых, в С я чайник, во-вторых, мне не нужно было полноценный прием реализовывать.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.