реклама на сайте
подробности

 
 
> Microblaze + Marvell phy + LwIP, вопрос к тем кто поднимал подобную систему
Golikov A.
сообщение Apr 20 2013, 18:49
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет, собственно поднимаю езернет на тренцовой платке, Имею спартан 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?

не хватает очень диалога с людьми которые это уже сделали... хочется не просто запустить чужой пример, а разобраться в том что твориться внутри проца...
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
rsv
сообщение Apr 20 2013, 19:30
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 16-07-07
Из: Тула
Пользователь №: 29 160



А плата своя, или какая то отладка?
П1. А tri mode ethernet mac использовать нельзя?
П2. Должно хватить
П3. Да, он такой жирный. Загрузчик писать не надо, они где-то есть стандартные. Точно не помню, но в документации это было. Например тут http://www.xilinx.com/support/answers/43615.htm В крайнем случае можно пользовать system ace или его замену на spartan 3e, которую вот-вот обещают выпустить. Сегменты в память не лезут скорее всего потому что не все сложили в ddr. Могли heap или стек оставить в брамке. Или по какой-то причине линкер скрипт не сгенерился.
П4. Стандартный. Использует те самые стандартные регистры. Если интересно как - то это в папке contrib в недрах исходников lwip.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 20 2013, 19:56
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



плата от trenz, это не отладка, а как бы готовый модуль
ПЛИС + phy +DDR и 2 разъема на пузе

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

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

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

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


С сегментами я вообще не понимаю. Ситуация такая, компилирую проект получаю сообщение, проект в память не лезет. Перекладываю все кроме .text в DDR в линкере, компилится все прекрасно. Нажимаю кнопочку залить в плис, и получаю сообщение что все мои переложенные сегменты не лезут в брам. Это логично, адреса у них за границами брама, но как научить среду правильно заливать проект, и главное как потом сделать прошивку которая все правильно разместит? Загрузчик? А про дебугер можно будет забыть?
Go to the top of the page
 
+Quote Post
rsv
сообщение Apr 20 2013, 20:13
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 16-07-07
Из: Тула
Пользователь №: 29 160



Почему работает phy - не знаю. Но тут http://ru.wikipedia.org/wiki/Gmii написано чо имеет право
П2 где то в стандартах есть. Читал очень давно, не помню где. Да в принципе и незачем знать.
П3 да, скорее всего только из ддр. Правда у меня был опыт засовывания tcp/ip cтека в 10 кбайт на avr, но это был другой стек и пришлось повозиться. Наверное, можно обрезать и lwip - но это будет непросто.
П4 скоростб ограничить можно
Тему с линкером я кажется понял. Есть в sdk такая бага. Попробуйте прибить линкерскрипт и скомпилить прогу, после чего сгенерить линкескрипт заново и для ддр
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 20 2013, 20:36
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вот я как то читаю про МII GMII RMII и прочее, но однозначного ответа не нахожуsad.gif Может там в начале идет какая то синхропосылка по которой можно определить какой интерфейс? Главная загадка что 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

что-то заливальщику чтоли надо сказать...
Go to the top of the page
 
+Quote Post
rsv
сообщение Apr 20 2013, 20:58
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 16-07-07
Из: Тула
Пользователь №: 29 160



Скриншот бы посмотреть от генератора линкерскрипта. Обычно все работает, а тут в логе прямо говорит что какие то секции в брамке лежат. А надо в ддрке.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 20 2013, 21:24
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

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

я использую кнопку Program FPGA, может она не может делать ничего кроме програмленья брама? Потому и пишет что сегменты из чужого адресного пространства ей не по зубам? А как тогда все это удобно делать то?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
rsv
сообщение Apr 20 2013, 21:28
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 16-07-07
Из: Тула
Пользователь №: 29 160



Надо все секции в ддр складывать, совсем все. А в брам при программировании fpga складывать bootloop. Тогода через sdk все прошьется и заработает.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 21 2013, 04:13
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

теперь осталось понять как после того как бутлуп запихали, как программу пихать...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 21 2013, 06:13
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



НАРОД! можно для тупых, как bootloop использовать? я чет концепции не понимаю хоть умри....
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 21 2013, 09:59
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Некоторые ответы на заданные ранее вопросы, может кто-то будет задаваться теме же вопросами:
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 регистр, и данные полились рекой.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 21 2013, 11:27
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Теперь еще сообщение о том как работать черезе bootloop.
в SDK 14.4 делается так:

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

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

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

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


Пока я не знаю как сделать файл прошивку для флэшки, чтобы оно все само запускалось и в память перекладовалось, с этим bootloop-ом, кто знает подскажите...
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Apr 23 2013, 05:25
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(Golikov A. @ Apr 21 2013, 14:27) *
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 Многое станет яснее.
Go to the top of the page
 
+Quote Post
knk
сообщение Apr 23 2013, 13:00
Сообщение #14





Группа: Участник
Сообщений: 13
Регистрация: 28-03-11
Пользователь №: 63 931



К вашей плате идёт 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, (для базового функционала особых сложностей нет)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 23 2013, 16:14
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Acvarif @ Apr 23 2013, 09:25) *
Нужно почитать документацию на 88e1111. http://read.pudn.com/downloads129/sourceco...8E1111%20DS.pdf Многое станет яснее.

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

Цитата(knk @ Apr 23 2013, 17:00) *
К вашей плате идёт 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, то и загрузчик тоже как то сам появиться... То есть я думал это будет какое то стандартное решение, какая то утилита.. Ничего сложного не надо, так что подойдет стандарт, минимальной кровью...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 22:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01487 секунд с 7
ELECTRONIX ©2004-2016