Надо было согласовать выходы EP1C12Q240I(периферия 3,3в) и процессора ATMEGA128-16AI(5в).
Поскольку в Data Sheet сказано, что входа м/сх EP1C12Q240I толерантны к 5в только по чтению, то
решено было попробовать самосоображающие преобразователи уровней MAX3002. По Data Sheet характеристики
у этой м/сх замечательные - работа с уровнями от 1.2 до 5.5в, 10 нс задежка.
Итак конфигурация платы: Контроллер Ethernet W5100 (3.3в) <-> Плис - 1ый циклон EP1C12Q240I(периферия 3,3в)
<-> двунаправленный преобразователь логических уровней MAX3002EUP
<-> процессор ATMEGA128-16AI(5в) мультиплексированная шина адреса/данных.
Помимо мультиплексирования шины контроллера Ethernet - процессор на ПЛИС реализовано еще несколько устройств.
После отладки проекта и ПО обнаружилось, что иногда ( 1бит на 1000 байт) бьются данные
получаемые процессором с контроллера Ethernet.
Путем долгих разбирательств был обнаружен виновник - м\сх MAX3002EUP.
Питание, конденсаторы, разводка, помехи по цепям питания и земли - норма
(дополнительные ёмкости, фильтры по питанию и прочие танцы с бубнами не помогают).
На прилагаемом скриншоте - Work1.TIF показан момент сбоя.
D14 - сигнал процессора запись/чтение
2 - один из разрядов адреса/данных на ноге процессора.
На скриншоте записаны два цикла чтения буфера м/сх W5100 - первый нормальный, второй со сбоем.
Видно, как после записи адреса возник сигнал чтения, по нему шины переключились в сторону процессора,
данные (1) выставились на на шину. Но тут (через 20 нс) чуть вздрогнула шина процессора на какие то свои внутренние такты.
В MAX3002EUP сработали ускорители, шина развернулась в сторону ПЛИС, затем развернулась обратно.
Но ускорители уже не сработали и видно, как шину вытягивают только операционниники подключенные через 6 ком.
Мы попытались подтягивать шину резисторами, играть временами проекта, тактами ожидания, токами сигнала.
Наибольший эффект дало уменьшение в PIN Planner выходного тока контактов ПЛИС до минимального уровня.
Сбои уменьшились, но не исчезли окончательно.
Решили провести эксперимент -
создали два тристабильных буфера, на их входы подается тактовая в противофазе,
на управление тристабильным состоянием - медленно смещающиеся друг относительно друга и тактовой окна разрешения.
Выходы тристабильных буферов поданы на свободные концы MAX3002EUP, которые замкнуты между собой на стороне 5в.
В итоге получилось кольцо, где периодически происходит столкновение шин.
Очень быстро удалось подобрать такое соотношение частот при которых появился искомый дефект.
На скриншоте Test_3.3-5v.TIF видно, как после шинных столкновений одна сторона шины остаётся в 0,
а с другой стороны сигнал медленно дрейфует.
D15 - тактовая на вход тристабильного буфера (на второй вход - в противофазе)
D14 - разрешение на первый тристабильный буфер
1 - выход первого тристабильного буфера
D13 - разрешение на второй тристабильный буфер
2 - выход второго тристабильного буфера
Затем мы изменили перепаяли Выходы тристабильных буферов на м/сх MAX3002EUP с питанием 3.3в и 1,8в.
Все вышеупомянутые дефекты исчезли .
На скриншоте Test_3.3-1.8.TIF видно, что любое столкновение шин приводит в конечном итоге к правильному результату.
Резюме -
1) Надо учиться читать между строк- если сказано в Data Sheet, что типовое включение 1,8 - 3,3 значит в этом режиме
она работает как написано, а при других напряжениях - как получится.
2) Больше не использовать м/сх MAX3002EUP, а брать обычный управляемый шинник с двойным питанием. Конечно у него и
задержка побольше и управление надо делать, но тратить две недели на поиск подобных блох - себе дороже.
Вопросы -
1) А надо ли обращать внимание на слова о толерантности к 5в только по чтению. Какая "физика" стоит за этим.
Может достаточно поставить подтягивающие резисторы ?
(Мы вышли из положения выкинув MAX3002 и соединив напрямую ПЛИС и процессор напрямую. Сбоев нет.
Правда еше не гоняли на ТХИ.)
2) Есть ли у кого положительный/отрицательный опыт использования подобного класса преобразователей при 3.3 - 5в
3) А может мы что то не так делали?