|
|
  |
Ethernet + Cyclone + Nios |
|
|
|
Feb 28 2013, 08:24
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(vadimuzzz @ Feb 27 2013, 13:30)  я приводил пример для DP83848, мельком глянул даташит на ks8721 - вроде времянки такие же. http://electronix.ru/forum/index.php?showt...t&p=1128246Спасибо. Приемник заработал. Но принимает только один раз. Для повторного приема необходимо перезагрузить .sof Не врубаюсь в чем хитрость.. Стоп.. Кажется заработало. Глубина FIFO приемника была маленькая. Теперь нужно проверить как правильно принимаются байты. В приемнике eth_ocm нужный байт находился в массиве buf_ptr Код ... buf_ptr = (alt_u8*)alt_remap_cached ((volatile void*) pkt, 4); buf_ptr = (alt_u8*)(((unsigned int)buf_ptr) + ETHHDR_BIAS); IOWR_ETH_OCM_DESC_PTR(ETH_OCM_0_BASE, 1, (alt_u32)buf_ptr); ... Подскажите пожалуйста как для TSE поступать. На приемник передается 96 байт известного содержимого. Где будут находиться данные по приему (TSE)? Код if((IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_RX_0_BASE) & ALTERA_AVALON_SGDMA_STATUS_CHAIN_COMPLETED_MSK )) { tse_mac_aRxRead(currdescriptor_ptr); } Принимающая функция tse_mac_aRxRead Как теперь из нее достать каждый отдельный байтик принятого пакета?
Сообщение отредактировал Acvarif - Feb 28 2013, 11:52
|
|
|
|
|
Mar 4 2013, 09:48
|

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

|
я тут тоже недавно словил похожий баг с переполнением приемного fifo. по какой-то причине первый пакет мог (не выяснил, при каких условиях) вызвать переполнение fifo. хотя в штатном режиме сбойный пакет просто должен быть отброшен. я покопался в доках и нашел ошибку в своем коде, которая тянется с хз каких времен. суть: если взводится бит ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK в командном регистре, то RX_SECTION_FULL должен быть установлен в 0, т.к. иначе опция проверки пакетов не работает. сейчас код инициализации MAC у меня выглядит так: Код IOWR_ALTERA_TSEMAC_FRM_LENGTH(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, ALTERA_TSE_MAC_MAX_FRAME_LENGTH); IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 8); IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 3); IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, ETH_0_TRIPLE_SPEED_ETHERNET_0_TRANSMIT_FIFO_DEPTH - 16); IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 0); IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, ETH_0_TRIPLE_SPEED_ETHERNET_0_RECEIVE_FIFO_DEPTH - 16); IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 0); IOWR_ALTERA_TSEMAC_TX_CMD_STAT(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE,0); IOWR_ALTERA_TSEMAC_RX_CMD_STAT(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE,0); IOWR_ALTERA_TSEMAC_MAC_0(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, MY_MAC_ADDR.mac_addr.mac_hi); IOWR_ALTERA_TSEMAC_MAC_1(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, MY_MAC_ADDR.mac_addr.mac_lo); IOWR_ALTERA_TSEMAC_CMD_CONFIG(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, ALTERA_TSEMAC_CMD_TX_ENA_MSK | ALTERA_TSEMAC_CMD_RX_ENA_MSK | ALTERA_TSEMAC_CMD_TX_ADDR_INS_MSK | ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK | ALTERA_TSEMAC_CMD_PAD_EN_MSK); почему я этот баг раньше не поймал - ума не приложу, м.б. что-то меняли в новых корках
|
|
|
|
|
Mar 5 2013, 08:51
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Спасибо. Приемник стал работать лучше. Но всеравно иногда затыкался. Полностью избавиться от затыков на приеме помогло изменение конфигурации fifo tse из 32-бит на 8 бит
Не врубаюсь какая связь между размерностью фифо TSE и надежностью приемов... Попробую вернуться назад (на 32 бита) и еще раз проверить
Сообщение отредактировал Acvarif - Mar 5 2013, 16:27
|
|
|
|
|
Apr 2 2013, 13:46
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Успешно запустив Ethernet на De0Nano, появилсь необходимость использовать ethernet драйвер от vadimuzzz на DE2-115 где стоит phy 88E1111. Но не получается. Очевидно потому, что неизвестен адрес PHY. Для Микрела (ksz872bl) он был #define PHY 0x1. Если кто сталкивался подскажите пожалуйста какой установить #define PHY для 88E1111 (De2-115)? Попробую автопределение Код for (t=0;t<33;t++) { IOWR_ALTERA_TSEMAC_MDIO_ADDR0(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, t); alt_printf("Probing PHY at address %x ...\n", t); r = IORD_ALTERA_TSEMAC_MDIO(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID1); if (r == 0x22)/*KSZ9021*/{ alt_printf("PHY address:%x\n", t); alt_printf("PHY_ID1:%x\n", r); alt_printf("PHY_ID2:%x\n", IORD_ALTERA_TSEMAC_MDIO(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID2)); break; } } Подскажите please ID 88E1111
Сообщение отредактировал Acvarif - Apr 2 2013, 16:09
|
|
|
|
|
Apr 4 2013, 13:23
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(vadimuzzz @ Apr 3 2013, 14:28)  PHY_ADDR у марвела весьма своеобразно задается, путем подключения ног CONFIG к опеделенным LED. судя по схеме борды, адрес выставлен 10000b(0x10) для eth0 и 10001b (0x11) для eth1. на всякий случай, PHY_ID1=0x0141 Спасибо. PHY_ADDR определился как 0x10. Поскольку на передачу 88E1111 требует внешнюю тактовую, то подал на вход gtx_clock phy 125мГц. Светодиод передачи на боарде мигает, тоесть функция tse_mac_raw_send((char*)ethmass_ptr, 1168) работает - в PHY tse что-то загружает. Внешне вроде передатчик работает. Но на сниффере пусто. Вроде инициализация tse никак не должна отличаться для ksz872 и для 88e1111? Да и подключение tse к PHY для режима MII должно быть одинаковое для ksz872 и 88e1111 кроме внешнй частоты gtx_clock phy 125мГц. Пока не пойму чего этой 88E1111 не хватает?
|
|
|
|
|
Apr 5 2013, 06:57
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(vadimuzzz @ Apr 4 2013, 18:36)  там не MII, а RGMII. поэтому нужны 2 вещи - правильные констрейны на I/O и сконфигурировать PHY для режима RGMII (добавятся задержки по клокам). поищите, я код конфигурации марвела выкладывал. м.б. даже в этой теме Понял. Поищу. Попробую режим RGMII. Со стандартным примером от терасик этот режим вроде работает. Правда работает неважно. В пакетах смещение на 8 байт. И в части программы (tse драйвер, инициализация MAC, прием , передача ) там ногу можно сломать столько наворочено. Ваш драйвер намного понятнее. На ksz872bl работает отлично. И тем не менее на боарде DE2-115 есть перемычка Jp1 которая переключает режим работы PHY на MII (ножка 60 Enet0_Cconfig4). Что я собственно и сделал. После загрузки системы и запуска инициализации МАС линк есть. Передача тоже работает (светодиод передатчика 88е1111 мигает). Но в сеть ничего не поступает. Как будто скорость передачи не та...
Сообщение отредактировал Acvarif - Apr 5 2013, 07:45
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|