|
Как я поднял GEthernet на Спартан-3 (с их ядром МАКа) и PHY DP83865DVH, Может чем-то кому-то поможет... |
|
|
|
Apr 16 2007, 10:30
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Когда у меня всё заработало, я решил описать здесь свои мытарства. Вдруг кто-то тоже "мучается" и этот "рассказ" может чем-то помочь. Короче, делюсь опытом. Сори, если кому-то этот текст покажется "ничего такого" или будет "резать слух", я просто пишу так наверное от радости от успешного результата (ещё "не успокоился"). Было решено реализовать МАК-контроллер гигабитного эзернета на матрице логики в виду того, что согласно ТЗ плата д.б. работать на температуре от -40 градусов. В то время, когда это решение принималось, на рынке не было готовых МАКов на такую температуру с не-PCI интерфейсом (их и сейчас вроде нету), которые можно было бы использовать с быстрым процессором (ADSP TS201) в standalone варианте. Поэтому из готовых и доступных ядер МАК-контроллеров + матрица был выбран ксалинкс Спартан-3 (3s1000fg320-4) и ядро МАКа версии 8.1 того же ксалинкса. Что касается физического уровня гигабитного эзернета, то на то время для температуры от -40 градусов вообще ничего из доступного не было, поэтому для опытного образца был выбран DP83865DVH (он работает от 0 градусов) с прицелом на последующую его замену на что-то другое (сейчас планируется 88E1011S). Прошивка матрицы хранится в XCF08P. Там же хранится начальный загрузчик и программа процессора (это "лежит" за проектом матрицы). Загрузочный софт процессора (256 слов по 32 бита) хранится в ПЗУ, которая реализована в самой матрице (инициализация содержимого через файл .coe). Итак, плата была разведена и изготовлена и я приступил к разработке проекта матрицы. Вообще это считаю порочной практикой, т.к. надо сначала сделать проект, а потом разводить матрицу на плате. Иначе могут быть труднопоправимые недочёты в разводке. Но мы, как известно, не ищем лёгких путей (начальство ведь этих тонкостей не понимает), нет таких проблем, которые мы не могли бы сами себе создать. Кое-какой опыт за плечами позволял предполагать удачный исход. Коротко по проекту матрицы. Были взяты исходники ядра из ИСЕ 8.2  , которые "подключались" через немного подправленный файл gmac_block.v (он генерируется ИСЕ при создании проекта через генератор корок). Правка этого файла заключалась в добавлении "фиктивных" wire для configuration_vector и mac_unicast_address, а также переименовании (уже не помню почему, видимо тоже компилятор ругался) имени порта mdc в mdc_out и имени корки gmac в gmac_gen. К ядру было добавлено два фифо на приём и передачу (получены с помощью генератора корок), сделан интерфейс с процессором по параллельной шине (32 бита). Плюс были добавлены некоторые мелочи, которые не буду упоминать. Очень важный файл констрейнтов был взят и переработан тоже из стандартной генерации проекта (gmac_example_design.ucf) в части выкидывания "BU2/U0/" и правки некоторых названий связей. При разработке проекта выплыли первые две ошибки (результат порочности, описанной выше). Одна в том, что я лоханулся и забыл, что надо завести тактовую частоту приёмника (125 МГц) с физического уровня не на любой вход матрицы, а на тактовый вход. Тут спас опыт - я большинство незадействованных выводов матрицы (она же в корпусе BGA, так что к выводам не подберёшься) вывел на переходные отверстия. Так что это мне позволило кинуть перемычку и завести тактовую куда надо. Вторая ошибка - один из выходов шины данных в физический уровень компиллятор наотрез отказался разводить на ту ногу, что я ему задал (т.е. на ту ногу, что я развёл). Пришлось делать ещё одну перемычку. Наконец всё готово к включению. Включаю... Ничего не работает, даже нет автонегоциации физического уровня. Регистры физического уровня не читаются и не пишутся. Тут и начались основные мытарства... Долгие размышления почему не работает физический уровень ни к чему не привели. Почитал по форумам (и тут тоже), что не один я мучался с этим DP83865. Это меня даже дезориентировало (как потом выяснилось) и мы купили ещё несколько штук DP83865 в другой конторе. Но после перепайки ничего ровным счётом не изменилось. Обратился в поддержку National через дистрибьютера. Они прислали доку пошагового поиска неисправностей (которая у меня уже была, но я ей не воспользовался - мы же не любим читать матчасть). Делать было нечего и я решил твёрдо пройтись по этой доке от начала до конца. И это помогло! Снова выплыли две ошибки. Первая - я неправильно развёл разъём эзернета, у меня получилась обратная нумерация контактов (поэтому не мог найти импульс автонегоциации). А всё из-за неадекватного восприятия забугорного чертежа этого разъёма (от Молекса). Пришлось слепить нестандартный кабель эзернета с переставленными наоборот контактами на одном из концов. Вторая ошибка - я забывал при чтении/записи регистров физического уровня выставлять его физический адрес. В результате я посылал адрес 0, а у меня на плате он выставлен в 1 (страп - резисторами). Ясное дело, из-за этого он и не отзывался, ведь не с ним обмениваются. После исправления программы и с переделанным кабелем физический уровень пошёл работать как надо! Однако обмена по эзернету всё равно не было. А это означало, что ядро МАК-контроллера не работает. Настало время разбираться с ним. Но в службу поддержки, понятное дело, уже не обратишься, вся надежда только на себя. Снова долгие раздумья ни к чему не привели. Но я вдруг вспомнил не очень мне понятный (тогда) небольшой кусок тескста в самом конце руководства по ядру МАКа (читал же!) о подборе зачем-то какой-то фазы. Перечитал, вроде понял для чего и решил "покрутить", всё равно никаких идей больше не было. "Крутил" значение фазы PLL приёмника прямо в FPGA editor без перекомпилляции проекта. И чудо! При определённом диапазоне значения фазы заработал приём! Я выставил фазу в "среднее" положение (уже в .ucf файле). Но передачи так и не было. Причём странность была в том, что лампочка активности физического уровня при передаче моргала, но компьютер ничего не принимал (смотрел программой ethereal). Пришлось взять осциллограф и смотреть сигналы. Выяснилось, что с матрицы все сигналы при передаче выходят правильные. Это меня повергло в уныние, т.к. означало что ядро работает, физический уровень вроде работает, а передачи нету уже по каким-то мистическим причинам. Однако оказалось никакой мистики нет. Я снова вспомнил, что ранее при чтении даташита на DP8З865 обнаружил непонятность для себя о том что есть два варианта интерфейса с МАКом - один 3COM, второй HP. Я снова заглянул в даташит, увидел, что они отличаются какими-то временными характеристиками (в даташите как-то было туманно про это написано). По умолчанию (выбирается страп-резисторами) у меня стоял интерфейс 3COM. Я решил попробовать поменять на HP, всё равно других идей не было никаких. Для этого надо было программно прописать в регистр AUX_CTRL физического уровня значение 0xA000 (было 0xB000). И снова чудо! Началась передача по эзернету! Вот так закончились мои мытарства по доведения железа до работающего состояния. Теперь перехожу непосредственно к embedded программированию, т.е. написанию программы по обмену через эзернет (стек tcp/ip) и пр. Удачи всем.
|
|
|
|
|
 |
Ответов
|
May 8 2007, 12:01
|

Местный
  
Группа: Свой
Сообщений: 310
Регистрация: 15-10-04
Пользователь №: 884

|
вопрос к Dimonira по поводу разьема для GigabitEthernet: у вас все-таки настольное/офисное устройство или приборный блок для работы на улице? Если последнее - то какой тип разьема вместо RJ45 вы для себя выбрали? Мне на глаза пока ничего подходящего не попадается: нужны круглые металлические блочные/кабельные разьемы для вывода из блока GigabitEthernet, со степенью защиты IP67(IP68) (по механике/климатике). Я вообще пока не увидел разьема с импедансом, который был бы с согласован со 100-омным кабелем, или хотя бы с приемлемой (до 200МГц/600МГц для кабелей Cat5/Cat7) полосой пропускания. Пока смотрю в сторону: 1. Amphenol с его серией "Subminiature Cylindrical Connectors Commercial 38999 Serias III Type Connectors". Там есть разьемы с 6-ю парами твинаксиальных контактов (через 4 таких контакта можно пропустить 4 Ethernet-ые витые пары) Но опять же, характеристик на них - никаких нет... 2. Lemo, например, К-series....
--------------------
"Я люблю путешествовать, посещать новые города, страны, знакомиться с новыми людьми." Чингисхан.
|
|
|
|
|
May 10 2007, 07:40
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(Porychik Kize @ May 8 2007, 16:01)  вопрос к Dimonira по поводу разьема для GigabitEthernet: у вас все-таки настольное/офисное устройство или приборный блок для работы на улице? Если последнее - то какой тип разьема вместо RJ45 вы для себя выбрали? Мне на глаза пока ничего подходящего не попадается: нужны круглые металлические блочные/кабельные разьемы для вывода из блока GigabitEthernet, со степенью защиты IP67(IP68) (по механике/климатике). Я вообще пока не увидел разьема с импедансом, который был бы с согласован со 100-омным кабелем, или хотя бы с приемлемой (до 200МГц/600МГц для кабелей Cat5/Cat7) полосой пропускания. У меня обычный разъём на плату от Молекса. А плата внутри девайса, в корпус которого кабели входят через гланды. В своё время я тоже обыскался разъёмов на стенку корпуса, но, так ничего и не найдя, остановился именно на таком построении: кабель внутрь корпуса через гланды, а разъём прямо на плате. Может, конечно, это не всегда приемлемо, спору нет.
|
|
|
|
|
May 10 2007, 08:45
|

Местный
  
Группа: Свой
Сообщений: 310
Регистрация: 15-10-04
Пользователь №: 884

|
Цитата(Dimonira @ May 10 2007, 11:40)  У меня обычный разъём на плату от Молекса. А плата внутри девайса, в корпус которого кабели входят через гланды. В своё время я тоже обыскался разъёмов на стенку корпуса, но, так ничего и не найдя, остановился именно на таком построении: кабель внутрь корпуса через гланды, а разъём прямо на плате. Может, конечно, это не всегда приемлемо, спору нет. а можно чуть подробнее? Я не понял что есть "гланды"  Т.е. если плата находится внутри переносного герметизированного блока, то как обеспечивается разьемое соединение "блок-кабель"???
--------------------
"Я люблю путешествовать, посещать новые города, страны, знакомиться с новыми людьми." Чингисхан.
|
|
|
|
|
May 10 2007, 21:31
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(Porychik Kize @ May 10 2007, 12:45)  а можно чуть подробнее? Я не понял что есть "гланды"  Т.е. если плата находится внутри переносного герметизированного блока, то как обеспечивается разьемое соединение "блок-кабель"??? У нас нет требования полной герметичности, т.е. девайс не будет подвержен осадкам, лежать в воде и пр. Гланды (по англицки так: gland) - это ввод/вывод в/из корпуса для кабелей, представляет из себя что-то типа "болта" со сквозной дыркой по оси, через которую проходит кабель. Этот "болт" крепится через отверстие в корпусе "гайкой" и уплотнительными резиновыми шайбами. Внутри него тоже уплотнительная резина (кольцом). На его наружном конце что-то типа цанги. После продевания кабеля сквозь "болт" и резинку что внутри, на него накручивается зажимная "гайка", которая сжимает цангу вместе с резинкой и кабелем. Резинка зажимается и закрывает пустоты между кабелем и внутренней дыркой "болта", обеспечивая некую герметичность. Понятно объяснил? Этих гланд большое количество вариантов как по размерам отверстия, так и по прочим параметрам. Например, есть пластмассовые, есть с металлическим корпусом. Цанга может быть сразу на "болте", а может вставляться внутрь отдельно. Короче, вариантов масса. Если разделанный кабель не протощить сквозь гланду (например, на кабеле разъёмы, как в моём случае с эзернетом), то кабель сначала протаскивается, а потом на месте разделывается. Т.е. это делается на этапе пуско-наладочных работ. Для примера: я применял на похожем девайсе такие гланды - "Perfect" brass cable gland от Hylec Components, ордер код 50.009. Их я покупал через Farnell, код 236573. Стоили они тогда около 2.45$ за штуку.
|
|
|
|
Сообщений в этой теме
Dimonira Как я поднял GEthernet на Спартан-3 (с их ядром МАКа) и PHY DP83865DVH Apr 16 2007, 10:30 id_gene Поздравления!
Поделитесь пожалуйста упомянуто... Apr 16 2007, 13:04 Dimonira 2 id_gene:
Спасибо!
Дока такая: AN-1329.
Фаз... Apr 16 2007, 15:23 Doka я так понимаю речь всёже идёт о PHY DP83865DVH ?
... Apr 16 2007, 16:55 Konst_777 Цитата(Dimonira @ Apr 16 2007, 10:30) Ког... Apr 16 2007, 17:48 Dimonira Doka
Цитатая так понимаю речь всёже идёт о PHY DP8... Apr 17 2007, 07:57 Dimonira Хочу добавить некоторую инфу по поводу необходимос... Apr 18 2007, 12:54 v_mirgorodsky ЦитатаКороче я решил сделать два приёмных ФИФО вме... Apr 18 2007, 14:24 Dimonira Цитата(v_mirgorodsky @ Apr 18 2007, 15:24... Apr 18 2007, 15:30 v_mirgorodsky Dimonira
Все это оч круто, до тех пор, пока не над... Apr 18 2007, 18:46 Dimonira Цитата(v_mirgorodsky @ Apr 18 2007, 19:46... Apr 19 2007, 08:30 v_mirgorodsky Поскольку ваш входной поток предполагается мизерны... Apr 19 2007, 10:37 Dimonira Цитата(v_mirgorodsky @ Apr 19 2007, 11:37... Apr 22 2007, 21:40 goodwin Гермоввод May 10 2007, 21:58 proba IP67 RJ45 connectors:
http://194.2.77.62/ged/amph... May 11 2007, 06:47 Porychik Kize Цитата(proba @ May 11 2007, 10:47) IP67 R... May 11 2007, 11:36  Dimonira Цитата(Porychik Kize @ May 11 2007, 15:36... May 13 2007, 15:17   Porychik Kize Цитата(Dimonira @ May 13 2007, 19:17) Вед... May 14 2007, 02:01 Dimonira Дополнение.
Небольшая 3-х дневная победоносная вой... Jun 21 2007, 10:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|