|
|
  |
Ethernet + Cyclone + Nios |
|
|
|
Jan 24 2011, 14:38
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984

|
Люди помогите разобраться с передачей по Ethernet. Есть кит 4 циклона DK-START-4CGX15N. Беру проект который выкладывал тут ув. vadimuzzz, ОГРОМНОЕ ему за это спасибо! Немного подправил его под проект кита "board_update_portal". Компилирую его запускаю... и естественно ничего не работает. Долго не мог въехать что именно не работает не было ни передачи ни приёма (светодиоды кита rx, tx мигали), при этом пример кита со стеком IP от iniche работал. Начал по шагам сравнивать инициализацию PHY и MAC, нашел одно отличие у себя и у примера из кита. После добавления такой строки в инициализацию MAC - приём заработал. IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 0, ALTERA_TSE_PCS_IF_MODE, 0x03); // PCS SGMII mode enabled А вот с передачей полная засада! Уже не пойму куда смотреть. Лампочка tx на PHY (88E1111) мигает. Дескриптор возвращает actual_bytes_transferred 0xc8, то есть вроде всё передал. Смотрю а пакета НЕТ! Немного о конфигурации ПК. Для отладки Etherneta, стоит отдельная сетевая карта (вторая), IP прописал ей статический. Приём на ките смотрю по запросам карточки. Она чего-то просит по широковещательному адресу FFFFFFFFFFFF у кита. А на приёме у карточки из кита ничего нет! Может я ей неправильные пакеты шлю, хотя как я понял Wireshark должен показывать любые пакеты. Может чего-то на карточке в ПК надо сконфигурировать? Уже не знаю куда смотреть!!! Прошу помощи у народа! Файлы проекта (soft) прилагаю.
|
|
|
|
|
Jan 24 2011, 15:00
|

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

|
Цитата(inco @ Jan 24 2011, 20:38)  А вот с передачей полная засада! сейчас под рукой нет примера, но это точно связано с конфигурацией марвеловского PHY. Последовательность запуска такая: - Запись по адресу 0 значения 0x8000 (SwRst==1)
- Задержка
- Запись по адресу 0 значения 0х1000 (AutoNeg==1)
- Задержка
- Чтение значения из адреса 1, проверка бита 2 (Link==1), если не установлен - 1)
- Запись по адресу 27 нижних бит [3:0] == 4'b1111 (GMII,copper)//смотреть доки на плату, это для девборды циклон-3!
- При RGMII IF - запись по адресу 20 прочитанного значения с установленными битами 7,1//смотреть доки на плату, это для девборды циклон-3!
- Повторять пункты 1-5, до установления линка. (SwRst)
в принципе, все это есть в альтеровском драйвере, поищите процедуру с названием чипа
|
|
|
|
|
Jan 25 2011, 02:15
|

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

|
CODE alt_u32 t2; IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TSE_MAC_BASE,PHY); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,0x1B);//Extended PHY Specific Status Register t2 &= 0xFFF0; IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,0x1B,t2|0xB);//RGMII to Copper t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,0x14);//Extended PHY Specific Control Register IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,0x14,t2|0x82);//Add Delay to RX_CLK for RXD Outputs; Add Delay to GTX_CLK for TXD Inputs t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,ALTERA_TSEMAC_PHY_ADDR_CONTROL); IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,ALTERA_TSEMAC_PHY_ADDR_CONTROL,t2|PCS_CTL _sw_reset);//Previous Operations Require SW Reset do { t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,ALTERA_TSEMAC_PHY_ADDR_STATUS); } while((t2&0x04)==0);//wait for link-up
этот код проверялся на http://www.altera.com/products/devkits/altera/kit-cyc3.html
|
|
|
|
|
Jan 26 2011, 19:04
|
Группа: Участник
Сообщений: 13
Регистрация: 10-12-10
Из: RND
Пользователь №: 61 523

|
Цитата(inco @ Jan 24 2011, 17:38)  Люди помогите разобраться с передачей по Ethernet.
Есть кит 4 циклона DK-START-4CGX15N. Беру проект который выкладывал тут ув. vadimuzzz, ОГРОМНОЕ ему за это спасибо!
Немного подправил его под проект кита "board_update_portal". Компилирую его запускаю... и естественно ничего не работает.
Долго не мог въехать что именно не работает не было ни передачи ни приёма (светодиоды кита rx, tx мигали), при этом пример кита со стеком IP от iniche работал.
Начал по шагам сравнивать инициализацию PHY и MAC, нашел одно отличие у себя и у примера из кита. После добавления такой строки в инициализацию MAC - приём заработал.
IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 0, ALTERA_TSE_PCS_IF_MODE, 0x03); // PCS SGMII mode enabled
А вот с передачей полная засада!
Уже не пойму куда смотреть. Лампочка tx на PHY (88E1111) мигает. Дескриптор возвращает actual_bytes_transferred 0xc8, то есть вроде всё передал. Смотрю а пакета НЕТ!
Немного о конфигурации ПК. Для отладки Etherneta, стоит отдельная сетевая карта (вторая), IP прописал ей статический.
Приём на ките смотрю по запросам карточки. Она чего-то просит по широковещательному адресу FFFFFFFFFFFF у кита. А на приёме у карточки из кита ничего нет! Может я ей неправильные пакеты шлю, хотя как я понял Wireshark должен показывать любые пакеты. Может чего-то на карточке в ПК надо сконфигурировать? Уже не знаю куда смотреть!!!
Прошу помощи у народа!
Файлы проекта (soft) прилагаю. inco, недавно, сам мучался с такой же проблемой, правда на DSP 3C120 - CIII + Marvel 88E1111. пробовал проекты из данного топика, и оба запускались сразу на прием на 100Мб, а вот при передаче таже засада что и у Вас, светодиод мигает, а пакетов на другом конце в Wireshark - 0... КОРОЧЕ, ДОЛБАЛСЯ Я НЕДЕЛЮ ПОСЛЕ НОВОГО ГОДА... 3-й раз читал докуметацию (спасибо Little styart за доки и информацию). Все заработало, когда поставил 1 бит в регистре 20 (0x14) Marvell. На всякий случай еще раз включил Ethernet передатчик... Код IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,MDIO_SPACE0,0x14,0xC53); IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,MDIO_SPACE0,0x00,0xB100); //peregrujaem MAC SOFT Reset Да, на карточке тоже ставил 100 Мб, autonegotiation..., а то можно поставить такой режим что коннект будет восстанавливатся только после "передергивания" кабеля Ethernet. Надеюсь поможет! Удачи.
Сообщение отредактировал avacs - Jan 26 2011, 19:07
|
|
|
|
|
Jan 26 2011, 21:01
|
Группа: Участник
Сообщений: 13
Регистрация: 10-12-10
Из: RND
Пользователь №: 61 523

|
Цитата(inco @ Jan 26 2011, 22:33)  Спасибо за информацию!
Я уже это тоже попробовал. Почитал доку на марвел и тоже попробовал принудительно включить передатчик (нулевой бит в 20 регистре). Но не сильно помогло. Если до этого вообще не видел данных, то после включения передатчика увидел что иногда в карточку приходят пакеты. Но не понятно как. Я сделал посылку пакетов примерно раз в секунду, но минут за 5 приходит только от 1 до 3 пакетов и всё. Больше пока времени разбираться не было. Уже второй день загрузили другими делами, может завтра продолжу если время выберу. icon, ты меня непонял (или я неправильно выразился, сразу извиняюсь). Я тоже сначала думал, что дело в нулевом бите, типа не включил Transmitter и поэтому нет сообщений, но все оказалось чуть интереснее! Там есть еще и первый бит, он дает какое то (там есть описание) смещение между тактами RX и TX, Вот из оф документации:п. 4.12.2 (стр 252 и далее у MArvell 88E1111 datasheet), Регистр 20, бит -1, (стр 170) -> "RGMII Transmit Timing Control" =>> "1 - Add delay to GTX_CLK for TXD Outputs", fo details see Page 218. У меня после выстановки именно этого бита заработала передача! Я думаю что все бы заработало сразу если бы при тактировании я поставил фазовый сдвиг между CLK_RX и CLK_TX в TSE.
|
|
|
|
|
Jan 27 2011, 07:11
|

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

|
Цитата(inco @ Jan 27 2011, 12:10)  На ките марвел подключен по SGMII двумя диффиринциальными проводами RX и TX и всё. там вроде ничего особенного в этом режиме нет, надо только заменить в коде выше IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,0x1B,t2|0xB);//RGMII to Copper на IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,0x1B,t2|0x4);//SGMII without clock to Copper. и выбросить установку задержек. примерно так: CODE alt_u32 t2; IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TSE_MAC_BASE,PHY); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,0x1B);//Extended PHY Specific Status Register t2 &= 0xFFF0; IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,0x1B,t2|0x4);//SGMII without clock to Copper. t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,ALTERA_TSEMAC_PHY_ADDR_CONTROL); IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,ALTERA_TSEMAC_PHY_ADDR_CONTROL,t2|PCS_CTL _sw_reset);//Previous Operations Require SW Reset do { t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0,ALTERA_TSEMAC_PHY_ADDR_STATUS); } while((t2&0x04)==0);//wait for link-up
|
|
|
|
|
Jan 27 2011, 17:18
|
Группа: Участник
Сообщений: 13
Регистрация: 10-12-10
Из: RND
Пользователь №: 61 523

|
|
|
|
|
|
Feb 3 2011, 11:02
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984

|
Вроде заработала передача дело оказалось в этой строке: Было: - передача не работала IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(TSE_MAC_BASE, 16); Сделал как в примере кита: IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(TSE_MAC_BASE, 0); И передача заработала! А с инициализацией мака было всё в порядке. Вот на всякий случай выкладываю весь кусок инициализации: CODE IOWR_ALTERA_TSEMAC_MDIO_ADDR1(TSE_MAC_BASE, 0);
// PHY and other board peripheral initialization IOWR_ALTERA_TSEMAC_MDIO_ADDR0(TSE_MAC_BASE, PHY); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, 27); //Extended PHY Specific Status Register t2 &= 0xFFF0; IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, 27, t2 | 0x04); //SGMII without Clock with SGMII Auto-Neg to copper
if((IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_STATUS) & PCS_ST_an_done) == 0) { IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_CONTROL + 16, 0x78); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_CONTROL); IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_CONTROL, t2 | PCS_CTL_sw_reset); }
// Without next string don't work reading packet IOWR_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 0, ALTERA_TSE_PCS_IF_MODE, 0x03); // PCS SGMII mode enabled
do { Delay(0xFFFFF); t2 = IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE, 1, ALTERA_TSEMAC_PHY_ADDR_STATUS); } while((t2 & 0x04) == 0); //wait for link-up
/* Get the Rx and Tx SGDMA addresses */ sgdma_tx_dev = alt_avalon_sgdma_open(SGDMA_TX_NAME); sgdma_rx_dev = alt_avalon_sgdma_open(SGDMA_RX_NAME); IOWR_ALTERA_AVALON_SGDMA_CONTROL(SGDMA_RX_BASE,ALTERA_AVALON_SGDMA_CONTROL_SOFTW ARERESET_MSK); IOWR_ALTERA_AVALON_SGDMA_CONTROL(SGDMA_RX_BASE, 0x0);
/* reset the mac */
IOWR_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE, ALTERA_TSEMAC_CMD_SW_RESET_MSK | ALTERA_TSEMAC_CMD_TX_ENA_MSK | ALTERA_TSEMAC_CMD_RX_ENA_MSK); while(IORD_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_BASE) & ALTERA_TSEMAC_CMD_SW_RESET_MSK) ;
/* Initialize MAC registers */
IOWR_ALTERA_TSEMAC_FRM_LENGTH(TSE_MAC_BASE, ALTERA_TSE_MAC_MAX_FRAME_LENGTH); IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(TSE_MAC_BASE, 8); IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(TSE_MAC_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(TSE_MAC_BASE, 8); IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(TSE_MAC_BASE, 3); IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(TSE_MAC_BASE, TSE_MAC_TRANSMIT_FIFO_DEPTH - 16); //1024/4; IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(TSE_MAC_BASE, 0); //32/4; // start transmit when there are 48 bytes IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(TSE_MAC_BASE, TSE_MAC_RECEIVE_FIFO_DEPTH - 16); //4000/4); IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(TSE_MAC_BASE, 0); IOWR_ALTERA_TSEMAC_TX_CMD_STAT(TSE_MAC_BASE,ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_ MSK); // IOWR_ALTERA_TSEMAC_TX_CMD_STAT(TSE_MAC_BASE,0); IOWR_ALTERA_TSEMAC_RX_CMD_STAT(TSE_MAC_BASE,ALTERA_TSEMAC_RX_CMD_STAT_RXSHIFT16_ MSK); // IOWR_ALTERA_TSEMAC_RX_CMD_STAT(TSE_MAC_BASE,0); IOWR_ALTERA_TSEMAC_CMD_CONFIG(TSE_MAC_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); IOWR_ALTERA_TSEMAC_MAC_0(TSE_MAC_BASE,((int)(0x00) | (int)(0x07 << 8) | (int)(0xED << 16) | (int)(0x19 << 24))); IOWR_ALTERA_TSEMAC_MAC_1(TSE_MAC_BASE,(((int)(0x03) | (int)(0x01 << 8)) & 0xFFFF)); alt_avalon_sgdma_register_callback(sgdma_rx_dev, (alt_avalon_sgdma_callback)&tse_sgdmaRx_isr, (alt_u16)ALTERA_TSE_SGDMA_INTR_MASK, sgdma_rx_dev);
|
|
|
|
|
Mar 8 2011, 16:15
|
Участник

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

|
Здравствуйте! Я новичок с плис, начиная разбираться с ethernet на ките DK-N2EVAL-3C25NМикросхема физического уровня dp83848. Всю тему прочил уже несколько раз, но ответов так и не нашел. Собрал систему в sopc использую модель eth_ocm. далее, создаю простую программу в nios и наталкиваюсь на то, что для успешной компиляции в проекте должен присутствовать InterNiche TCP/IP и соответсвенно UCOSII. я прав или что-то путаю? Хорошо, создал новый проект на основе шаблона с UCOSII, и при запуске получил приглашение ввести серийный номер Хочу попробовать свои силы с компонентом triple speed Ethernet (TSE) но меня смущает что он time limited. Как можно это побороть? Направьте на путь истинный, с чего начать освоение 10/100 ethernet? ps использую quartus II 9.1 sp1
Сообщение отредактировал covsh - Mar 8 2011, 16:34
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|