|
|
  |
Ethernet + Cyclone + Nios |
|
|
|
Mar 8 2011, 23:52
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(covsh @ Mar 8 2011, 22:15)  Всю тему прочил уже несколько раз, но ответов так и не нашел.
Собрал систему в sopc использую модель eth_ocm. далее, создаю простую программу в nios и наталкиваюсь на то, что для успешной компиляции в проекте должен присутствовать InterNiche TCP/IP и соответсвенно UCOSII. я прав или что-то путаю? в этой теме есть ответ и примеры кода без InterNiche TCP/IP Цитата Хочу попробовать свои силы с компонентом triple speed Ethernet (TSE) но меня смущает что он time limited. Как можно это побороть? "правильной" лицензией. Цитата с чего начать освоение 10/100 ethernet? если будете делать по примерам из этого топика, то сначала почитайте про ваш PHY, у него может отличаться инициализация. потом почитать про SGDMA. ну, и иметь представление об ARP, ICMP. этого хватит, чтобы пропинговать плату.
|
|
|
|
|
Mar 9 2011, 07:52
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 7-04-05
Пользователь №: 3 947

|
Цитата(vadimuzzz @ Mar 9 2011, 02:52)  в этой теме есть ответ и примеры кода без InterNiche TCP/IP было бы очень любезно, если бы вы указали где найти. перелистал всю тему и без толку. в гугле нашел лишь то, что можно InterNiche запустить без rtos используя superloop http://www.alterawiki.com/wiki/%22Super_Loop%22_NicheStackЦитата "правильной" лицензией. а она вообще существует под 9.1 sp2 ?
|
|
|
|
|
Mar 9 2011, 09:01
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 7-04-05
Пользователь №: 3 947

|
Уважаемый, vadimuzzz Я начинающий в этом вопросе, прошу понимания у знатоков Последовательность моих действий: Я использую Quartus II 9.1 sp2. Использую компонент eth_ocm_91_0_beta.zip установил модуль в “C:\altera\91\ip\user_components\eth_ocm” в соответствии с инструкцией. Далее, создал систему в SOPC  После этого, перехожу в NIOS и создаю простой проект на основе шаблона «Hello World» При компиляции возникает ошибка. Код nios2-elf-gcc -xc -MP -MMD -c -I. -I./drivers/inc -I./HAL/inc -DSYSTEM_BUS_WIDTH=32 -D__hal__ -pipe -DALT_NO_INSTRUCTION_EMULATION -DALT_SINGLE_THREADED -DALTERA_TRIPLE_SPEED_MAC -DETH_OCM_PHY_MAX_PROFILES=3 -DETH_OCM_PHY_SUPPORT_DP83848C -DETH_OCM_PHY_SUPPORT_MVL88E1111 -O0 -g -Wall -mno-hw-div -mhw-mul -mno-hw-mulx -o obj/drivers/src/eth_ocm_phy.o c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c: In function `eth_ocm_phy_init': c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c:160: error: structure has no member named `phyadd' Чего не хватает в моем проекте? Что идейно я упустил? Цитата(vadimuzzz @ Mar 9 2011, 11:04)  ну вы блин даете. http://electronix.ru/forum/index.php?showt...st&p=751876 - это для TSE. несколько раньше было для опенкоровского. может не листать, а читать попробовать? вы имели ввиду вот это? http://electronix.ru/forum/index.php?s=&am...st&p=687221
|
|
|
|
|
Mar 9 2011, 13:07
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 7-04-05
Пользователь №: 3 947

|
Цитата(vadimuzzz @ Mar 9 2011, 12:25)  не совсем то.. там для TSE код, а опенкоровский закомментирован (он д.б. рабочий, но я лучше поищу последнюю актуальную версию). если вам не критично, начните с TSE. а я поищу у себя старый код для опенкоровского ядра. таких ошибок компиляции, как у вас, я не видел, тогда юзал квартус 7.2. ругается компилятор на поле в какой-то структуре, может быть там имя поменялось в новой версии? при вникании оказалось что все ошибки идут из-за отсутствия определения ALT_INICHE в eth_ocm.h попытки определить его в ручную дают еще более серьезные ошибки  однако, как только проект создается с поддержкой MicroC/OS-II RTOS и NicheStack TCP/IP Stack, компиляция проходит успешно. видимо, либо где-то есть возможность конфигурирования либо эта штука сейчас работает только совместно с NicheStack TCP/IP Stack. vadimuzzz, спасибо за ответ. начну разбираться с TSE. тем более, здесь много полезных исходников. остался вопрос только с лицензированием TSE. если кто может помочь, напишите в личку
|
|
|
|
|
Mar 31 2011, 07:28
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(nmurzin @ Mar 31 2011, 13:54)  - Какое отношение имеют друг к другу Sopc Builder и NIOS ? NIOS - один из компонентов, используя которые как кирпичики, можно собрать в билдере систему (SOPC) Цитата - Обязательно ли для этой задачи использовать Sopc Builder ? нет, но жизнь он упрощает здорово. есть куча готовых компонентов, можно писать свои. Цитата - Какое отношение имеет DDR2 память к Ethernet ? никакого. просто, как правило, по Ethernet надо слить довольно большой объем данных, удобно складывать их там. или же хочется систему с ниосом, эзернетом и какой-нибудь осью - опять память нужна Цитата - Что за компонент Lan91C111 и для чего он нужен ? это контроллер эзернет (MAC+PHY в одном флаконе). ставят обычно на дешевых платах. у вас марвеловский PHY, для него нужна IP-корка эзернет, либо альтеровская, либо своя или опенсорсная. для Lan91C111 она не нужна. Цитата(nmurzin @ Mar 31 2011, 13:54)  Поделитесь сколько времени у вас на это ушло. это зависит от вашего опыта. работали ли вы с другими контроллерами (если да, то вариант с ниосом предпочтительнее) или ПЛИС
|
|
|
|
|
Apr 15 2011, 12:59
|
Группа: Участник
Сообщений: 13
Регистрация: 10-12-10
Из: RND
Пользователь №: 61 523

|
Ув. vadimuzzz... а вы пробовали использовать при передаче jumbo frame (>4кб)??? А то я или что то туплю или не понимаю, по описанию Marvell 88E1111 поддерживает jumbo >10 кб, но при попытке записать пакет выше 1530 байт вижу только мигание светодиода TX (плата DSP KIT CIII 3C120F780), а на другом конце на машине под Ubuntu 10.10 под Wireshark ничего не вижу... основа для работы с сетью Ваша (та что вы с dim99 ранее делали)... Длину массивов переменных увеличивал, может нужно было увеличить размер дескриптора SGDMA в SOPCe (у меня сейчас дескриптор 4096)? или я уже туплю и все до бонального просто....??
|
|
|
|
|
Apr 19 2011, 08:11
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 27-05-09
Из: Москва
Пользователь №: 49 648

|
Цитата(avacs @ Apr 15 2011, 16:59)  Ув. vadimuzzz... а вы пробовали использовать при передаче jumbo frame (>4кб)??? А то я или что то туплю или не понимаю, по описанию Marvell 88E1111 поддерживает jumbo >10 кб, но при попытке записать пакет выше 1530 байт вижу только мигание светодиода TX (плата DSP KIT CIII 3C120F780), а на другом конце на машине под Ubuntu 10.10 под Wireshark ничего не вижу... основа для работы с сетью Ваша (та что вы с dim99 ранее делали)... Длину массивов переменных увеличивал, может нужно было увеличить размер дескриптора SGDMA в SOPCe (у меня сейчас дескриптор 4096)? или я уже туплю и все до бонального просто....?? Добрый день. А сколько места конкретно занимает данная SOPC? Интересно просто (у меня такой же кит), на таком же ките проект UDP + ethernet под RGMII занял сущие крохи- 1 процент от кристалла.
|
|
|
|
|
Apr 20 2011, 07:44
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 7-04-05
Пользователь №: 3 947

|
Здравствуйте! Сначала хочу поблагодарить тов. vadimuzzz за исходниккоторый очень помог при старте. Решил приделать к проекту vadimuzzz'a свой обработчик пакетов arp+ping Как раз появилась очень хорошая статья по этому поводу. Вылез большой глюк. Суть проблемы в следующем: прием пакетов начал работать очень странно. Arp пакет принимает корректно, далее программа на него отвечает (все вижу по wireshark) Следующим идет ping запрос и вот тут косяк – обработчик прерывания перестает вызываться (не останавливается по контрольной точке в самом начале tse_sgdmaRx_isr). Оригинальный проект работает без нареканий. Прерывания есть по приему каждого пакета. Прошу помощи у сообщества. Исходники прилагаю. ps пробовал на 9.1 sp2, оптимизацию всю отключил. на 10.1 sp1 поведение аналогичное
Сообщение отредактировал covsh - Apr 20 2011, 09:36
|
|
|
|
|
Apr 25 2011, 07:33
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 7-04-05
Пользователь №: 3 947

|
разобрался в странном поведении своей программы. причина заключалась в том что на этапе инициализации в процедуре MAC_init() прописывался один мак адрес Код IOWR_ALTERA_TSEMAC_MAC_0(TRIPLE_SPEED_ETHERNET_0_BASE,((int)(0x00) | (int)(0x07 << 8) | (int)(0xAB << 16) | (int)(0xF0 << 24))); IOWR_ALTERA_TSEMAC_MAC_1(TRIPLE_SPEED_ETHERNET_0_BASE,(((int)(0x0D) | (int)(0xBA << 8)) & 0xFFFF)); а на этапе формирование ethernet пакета присваивал совершенно другие мак адреса. исправил на нужные - все заработало. есть еще одна проблема, причины которой я не могу понять в программе есть структура arp сообщения Код typedef struct arp_message { alt_u16 hw_type; // протокол канального уровня (Ethernet) alt_u16 proto_type; // протокол сетевого уровня (IP) alt_u8 hw_addr_len; // длина MAC-адреса =6 alt_u8 proto_addr_len; // длина IP-адреса =4 alt_u16 type; // тип сообщения (запрос/ответ) alt_u8 mac_addr_from[6]; // MAC-адрес отправителя alt_u32 ip_addr_from; // IP-адрес отправителя alt_u8 mac_addr_to[6]; // MAC-адрес получателя, нули если неизвестен alt_u32 ip_addr_to; // IP-адрес получателя }arp_message_t; когда делаю такое присваивание Код arp_message_t *msg = (void*)(frame->data); то поле типа alt_u32 ip_addr_from присваивает переменной со сдвижкой в 2 байта, т.е. захватывается кускок mac_addr_to. аналочино и второе поле alt_u32 ip_addr_to присваивает с ошибкой. пробовал делать выравнивание структуре вот так Код typedef struct arp_message { alt_u16 hw_type; // протокол канального уровня (Ethernet) alt_u16 proto_type; // протокол сетевого уровня (IP) alt_u8 hw_addr_len; // длина MAC-адреса =6 alt_u8 proto_addr_len; // длина IP-адреса =4 alt_u16 type; // тип сообщения (запрос/ответ) alt_u8 mac_addr_from[6]; // MAC-адрес отправителя alt_u32 ip_addr_from; // IP-адрес отправителя alt_u8 mac_addr_to[6]; // MAC-адрес получателя, нули если неизвестен alt_u32 ip_addr_to; // IP-адрес получателя }arp_message_t __attribute__ ((aligned (4))); убирать выравнивание массива Код volatile char pkt[1562]; ничего не помогает. написал вместо alt_u32 alt_u8[4] работаю пока так. как избавиться от какого явления? исходник прикрепляю. там работающий arp+ping+ чуть udp
Сообщение отредактировал covsh - Apr 25 2011, 07:37
|
|
|
|
|
  |
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|