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


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

assign pipa = popa ? pipa_data : 1'bz;
barabek
Цитата(AlphaMil @ Sep 3 2010, 11:14) *
Я это тоже подозреваю. Но вот как сделать или сымитировать открытый коллектор? .

Имитировать не надо. В альтере можно самому делать настройки режимов выходов. В assignment editir или pin editor. Наверняка у хилых что-то похожее, с ними не работал. 
ShSerge
Проверьте, не является ли ваш экземпляр микросхемы перемаркированной 7181B (у нее действительно другой адрес). Попали на такую партию случайно. Заподозрили неладное, когда цех промывал плату, надпись начала сползать biggrin.gif . Подключили, как 7181B (отличие - пара проводов) и все заработало.
Alex_VI
не так давно боролся с аналогичной задачей. Микросхема только AD9985, что сути не меняет.

По поводу открытого коллектора. Внешний порт объявляем двунаправленным и заводим его линией в процессор. В дизайне процессора уже реализована эмуляция открытого коллектора. (в спартане нет аппаратного драйвера с открытым коллектором).

Софт пишется в SDK? Я столкнулся с тем, что драйвер I2C шины почему-то у меня не работал на прием. Передача шла, прием ни в какую (с теми же симптомами подвисания линии).. В итоге переписал функцию приема данных на свой лад, после чего все заработало. Какие-то косяки у них с ожиданием прерывания от I2C модуля при приеме данных с шины..
Могу скинуть кусок кода приема байта, но он немного ущербный, т.к. во-первых, в С я чайник, во-вторых, мне не нужно было полноценный прием реализовывать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.