Перейти к содержанию
    

Всем привет, собственно поднимаю езернет на тренцовой платке, Имею спартан 6 с 2 блоками ДДР и phy 88Е1111 от марвела. В плисину запихал EMAClite, инициализировал его и попробовал послать данные в компьютер - все получилось, пакет был левый, но данные я принял.

 

И вот тут начались вопросы.

1. между spartan и phy идет GMII, в EMACLite есть только MII, и я не понимаю в какой момент и как PHY это просек. Есть какой то режим автоопределения интерфейса, или мне просто повезло? Как сделать везение постоянным?

 

2. настройка этого marvell, его полную карту регистров можно получить только после подписания договора о неразглашении (что думаю быстро нереально), но вроде бы первые 6 регистров во всех PHY заданы стандартом. Так ли это? Хватит ли для боле менее стандартного начала работы этих 6 регистров?

 

3. LwIP подключив библиотеку, я получил размер кода 57 КБайт (секция .text) , я что -то сделал не так? Или если связался с этим кодом то сразу надо понимать что придется программу запускать из DDR, что надо писать загрузчик? Я в DDR ничего не могу переложить, линкеру говорю положи туда он соглашается, но при попытке залить прошивку в ПЛИС ругается что сегменты не лезут в память, почему?!

 

4. LwIP идет в ксалинксе библиотекой, что делать с драйвером phy в этом случае? он какой то стандартный или считается что я настрою phy до запуска LwIP?

 

не хватает очень диалога с людьми которые это уже сделали... хочется не просто запустить чужой пример, а разобраться в том что твориться внутри проца...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А плата своя, или какая то отладка?

П1. А tri mode ethernet mac использовать нельзя?

П2. Должно хватить

П3. Да, он такой жирный. Загрузчик писать не надо, они где-то есть стандартные. Точно не помню, но в документации это было. Например тут http://www.xilinx.com/support/answers/43615.htm В крайнем случае можно пользовать system ace или его замену на spartan 3e, которую вот-вот обещают выпустить. Сегменты в память не лезут скорее всего потому что не все сложили в ddr. Могли heap или стек оставить в брамке. Или по какой-то причине линкер скрипт не сгенерился.

П4. Стандартный. Использует те самые стандартные регистры. Если интересно как - то это в папке contrib в недрах исходников lwip.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

плата от trenz, это не отладка, а как бы готовый модуль

ПЛИС + phy +DDR и 2 разъема на пузе

 

Хотел начать как бы с более простого и бесплатного :), но вопрос даже не в использовании, а в том как так получилось что phy подключенный по 8 проводам, работает по 4 не жалуясь... Кто и в какой момент ему это сказал, есть ли какой то автодетект интерфейса у Phy?

 

П2. - хорошо... а какие настройки в этих регистрах? где почитать?

 

П3 - то есть lwip - это сразу работа из DDR? нет возможности программу оставить в BRAME, а все остальное положить в DDR или другие дополнительные брамы?

 

П4. А он имеет какие то настройки по поводу GMII MII и так далее? То есть у него есть возможности phy ограничить 100 МБитами? И как его этому научить? Или надо его правильно ручками поправить?

 

 

С сегментами я вообще не понимаю. Ситуация такая, компилирую проект получаю сообщение, проект в память не лезет. Перекладываю все кроме .text в DDR в линкере, компилится все прекрасно. Нажимаю кнопочку залить в плис, и получаю сообщение что все мои переложенные сегменты не лезут в брам. Это логично, адреса у них за границами брама, но как научить среду правильно заливать проект, и главное как потом сделать прошивку которая все правильно разместит? Загрузчик? А про дебугер можно будет забыть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему работает phy - не знаю. Но тут http://ru.wikipedia.org/wiki/Gmii написано чо имеет право

П2 где то в стандартах есть. Читал очень давно, не помню где. Да в принципе и незачем знать.

П3 да, скорее всего только из ддр. Правда у меня был опыт засовывания tcp/ip cтека в 10 кбайт на avr, но это был другой стек и пришлось повозиться. Наверное, можно обрезать и lwip - но это будет непросто.

П4 скоростб ограничить можно

Тему с линкером я кажется понял. Есть в sdk такая бага. Попробуйте прибить линкерскрипт и скомпилить прогу, после чего сгенерить линкескрипт заново и для ддр

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот я как то читаю про МII GMII RMII и прочее, но однозначного ответа не нахожу:( Может там в начале идет какая то синхропосылка по которой можно определить какой интерфейс? Главная загадка что MII - это 25 мгц, RMII - 50 МГц, GMII - 125 Мгц, но частоту генерит PHY, то есть пока в голове каша, и ощущение какой то магии%)....

 

П2 - принято.

 

П3 - у меня есть запасной вариант на арме рядом с плисом, так что резать ЛВИП точно пока не буду...

 

п4 - будем искать, ну главное хотя бы запустить... пойду линкер пытать, спасибо за наводки...

 

не фига не помогло...

грохнул старый елф файл, грохнул скрипт линкерный, сделал новый, скомпилил, пробую залить и на те

 

ELF file : C:/Projects/TestCore_03/MainProject/Debug/MainProject.elf

ERROR:EDK:3165 - elfcheck failed!

The following sections did not fit into Processor BRAM memory:

Section .jcr (0xA00005B8 - 0xA00005BB)

Section .eh_frame (0xA00005B4 - 0xA00005B7)

Section .data (0xA0000408 - 0xA00005B3)

Section .rodata (0xA0000010 - 0xA0000401)

Section .dtors (0xA0000008 - 0xA000000F)

Section .ctors (0xA0000000 - 0xA0000007)

 

Try using the linker script generation tools to generate an ELF that maps

correctly to your hardware design.

Programming the FPGA failed due to errors from elfcheck

 

что-то заливальщику чтоли надо сказать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скриншот бы посмотреть от генератора линкерскрипта. Обычно все работает, а тут в логе прямо говорит что какие то секции в брамке лежат. А надо в ддрке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кнопка Program FPGA вообще может грузить код секциями в DDR или это только через перезапись флэшки?

 

чет у меня прям с загрузкой картинки траблы... прикрепил просто

 

вот окно, все попихал в ДДР кроме текста программы и еще 2 секуций....

что-то мне кажется у меня какая то принципиальная ошибка по тому как пихать программу в ФПГА,

 

я использую кнопку Program FPGA, может она не может делать ничего кроме програмленья брама? Потому и пишет что сегменты из чужого адресного пространства ей не по зубам? А как тогда все это удобно делать то?

post-14454-1366493089_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо все секции в ддр складывать, совсем все. А в брам при программировании fpga складывать bootloop. Тогода через sdk все прошьется и заработает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то есть про идею использовать 2 внутренниии шины для памяти программ и данных можно забыть? Вот же блин же...

 

теперь осталось понять как после того как бутлуп запихали, как программу пихать...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

НАРОД! можно для тупых, как bootloop использовать? я чет концепции не понимаю хоть умри....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Некоторые ответы на заданные ранее вопросы, может кто-то будет задаваться теме же вопросами:

1. Phy marvell 88e1111 при помощи внешних ножек (или внутренних регистров) может быть сконфигурен на вид носителя (медь - оптика) и протокол связи (GMII/MII RGMII) и так далее...

При этом GMII/MII идет всегда единой связкой. Если phy подключится на 1000MB ethernet он будет работать по GMII, на 10/100 по MII. При этом поскольку клок для GMII и MII разные с phy выходят в mac. То Даже включившись на GMII на MII будет клок (есть возможности настройки)

дальше я так понимаю по тому на какой из клоков засинхронизируется MAC марвел и отличает по какой шине 8бит GMII или 4MII идет обмен. Это при передаче, при приеме МАК вроде как генерит клок, следовательно по частоте 2.5 25 125 можно отличить интерфейсы. Вроде как вот так работает эта магия.

 

2. Первые 6 регистров управляют езернетом до 100 МБит, под 1000 МБит выделен дополнительный 10 и 9 регистр, именно там можно запретить переключатся на 1000 МБитный езернет. Занулив 9 регистр вы получите 100 МБитное phy, после этого надо будет еще выставить в единицу 15 бит в 0 регистре, чтобы phy софтварно рестартанулось. (предпочтительный режим работы 10-100-1000 также можно выбрать и конфигурационными пинами, но для меня не актуально, схема уже распаяна.)

 

Подключил MACLite к phy, а его к ноутбуку, определилась макс возможная и предпочтительная скорость 1000 МБит, и дальше в МАК читались пустые данные, и пропадали записанные phy, так как MACLite сидит на MII и не способен принимать 1000 МБит. Переконфигурил 9 регистр, и данные полились рекой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь еще сообщение о том как работать черезе bootloop.

в SDK 14.4 делается так:

 

в платформ студио генерите ядро процессора, и экспортируете его в SDK. Там создаете проект на этом ядре. Для полученного проекта создаете или правите lscript.ld. Файл может называться и по другому, в настройках проекта в buid задается какой файл использовать. Файл можно создать при помощи утилиты, а можно тыкнуть имеющийся он лежит в src проекта, откроется помощник его правки, а можно совсем заджидается и поправить прямо текст руками.

 

В этом файле рассказываете куда какие секции в памяти вашего проекта разложить, компилируете, смотрите чтобы все влезло.

 

Дальше жмете кнопку Program FPGA, и в открывшемся меню выбираете загрузить bootloop, и ждете когда он загрузится.

 

Дальше вашу программу пихаете через кнопки debug as и run as, программа будет запускаться с сегментами в определенной вами памяти. Только надо следить что вы попихали в память, если весь проект сразу положить в DDR может и не заработать так как хочется... некоторые модули надо будет правильно проинитить с учетом того что работаете не из bram.

 

 

Пока я не знаю как сделать файл прошивку для флэшки, чтобы оно все само запускалось и в память перекладовалось, с этим bootloop-ом, кто знает подскажите...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Phy marvell 88e1111 при помощи внешних ножек (или внутренних регистров) может быть сконфигурен на вид носителя (медь - оптика) и протокол связи (GMII/MII RGMII) и так далее...

При этом GMII/MII идет всегда единой связкой. Если phy подключится на 1000MB ethernet он будет работать по GMII, на 10/100 по MII. При этом поскольку клок для GMII и MII разные с phy выходят в mac. То Даже включившись на GMII на MII будет клок (есть возможности настройки)

дальше я так понимаю по тому на какой из клоков засинхронизируется MAC марвел и отличает по какой шине 8бит GMII или 4MII идет обмен. Это при передаче, при приеме МАК вроде как генерит клок, следовательно по частоте 2.5 25 125 можно отличить интерфейсы. Вроде как вот так работает эта магия.

Нужно почитать документацию на 88e1111. http://read.pudn.com/downloads129/sourceco...8E1111%20DS.pdf Многое станет яснее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К вашей плате идёт 2 проекта пользующих Ethernet и работающих из BRAM. Один с FIFO https://github.com/Trenz-Electronic/TE060X-...ee_XPS14.2-Base другой с DMA https://github.com/Trenz-Electronic/TE060X-...4.2-FlashWriter

Если необходим LwIP то прийдётся писать загрузчик. Код помещать в SPI Flash после битстрима, загрузчик должен его считать и передать управление (код простой и компактный).

Если такой вариант не подходит прийдётся писать свой упрощённый стек который поместится в BRAM, (для базового функционала особых сложностей нет)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно почитать документацию на 88e1111. http://read.pudn.com/downloads129/sourceco...8E1111%20DS.pdf Многое станет яснее.

я недавно нашел сей документ, по умолчанию он же не доступен без подписания кровью:)... читаю, становится яснее... собственно на основе уже прочитанного это и писал... Прямых указаний как оно работает я в нем не нашел, может где то оно описано, но пока мне не попалось. А так как модуль МАК тоже не мой а из библиотеки, то как он с GMII на MII переводит phy я могу только предполагать...

 

К вашей плате идёт 2 проекта пользующих Ethernet и работающих из BRAM. Один с FIFO https://github.com/Trenz-Electronic/TE060X-...ee_XPS14.2-Base другой с DMA https://github.com/Trenz-Electronic/TE060X-...4.2-FlashWriter

Если необходим LwIP то прийдётся писать загрузчик. Код помещать в SPI Flash после битстрима, загрузчик должен его считать и передать управление (код простой и компактный).

Если такой вариант не подходит прийдётся писать свой упрощённый стек который поместится в BRAM, (для базового функционала особых сложностей нет)

Езернет то я поднял, но надо же TCP/IP а то те кто на компутерах ответную часть пишут иначе не согласны... Примеры у меня есть, спасибо...

 

Про загрузчик я уже понял, думал что поскольку все так легко в DDR перевелось средствами SDK, то и загрузчик тоже как то сам появиться... То есть я думал это будет какое то стандартное решение, какая то утилита.. Ничего сложного не надо, так что подойдет стандарт, минимальной кровью...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...