|
|
  |
Ethernet + Cyclone + Nios |
|
|
|
Apr 26 2011, 07:25
|
Участник

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

|
Цитата(vadimuzzz @ Apr 26 2011, 03:04)  возможно (я код пока не смотрел) дело в настройках регистров MAC (Tx_Cmd_Stat Register и Rx_Cmd_Stat Register). там есть режим, когда по 32-битной границе выравнивается IP payload. поиграйте с битами TX_SHIFT16 и RX_SHIFT16 в соотв. регистрах. спасибо за наводку, но это не помогло. данные биты, как я понимаю, устанавливают выравнивание всего пакета. у меня ситуация несколько другая. сделал пару иллюстраций. итак, сначала на массив накладывает вот такая структура eth_frame_t *frame = (void*) packet;  далее, на поле alt_u8 data[] накладывается новая структура ARP сообщения arp_message arp_message_t *msg = (void*)(frame->data); что должно быть и что получается я проиллюстрировал на рисунке  видно, что появляется сдвижка при наложении 32 битного числа, со всеми остальными типами все в порядке может кто-нибудь подкинет идею почему так происходит?
|
|
|
|
|
Apr 27 2011, 06:07
|
Участник

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

|
Цитата(vadimuzzz @ Apr 26 2011, 16:29)  а, понял. это из-за 6-байтного MAC-адреса. попробуйте объявить структуру с атрибутом packed большое спасибо, все получилось
|
|
|
|
|
Jun 20 2011, 12:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(vadimuzzz @ Jun 20 2011, 11:37)  потому что не должен. в нормальном режиме MAC "видит" только пакеты с его адресом и broadcast'ы. в promiscuous "видит" все пакеты. Насколькл я понял, при PROMIS_EN = 0, видит пакеты в которых младший бит destination MAC address = 1 и не видит те, в которых 0. Потом нашёл уже описание у Альтеры: The MAC function can accept frames with the following address types: ■ Unicast address—bit 0 of the destination address is 0. ■ Multicast address—bit 0 of the destination address is 1. ■ Broadcast address—all 48 bits of the destination address are 1. The MAC function always accepts broadcast frames. If promiscuous mode is enabled (PROMIS_EN bit in the command_config register = 1), the MAC function omits address filtering and accepts all unicast frames. Ломал голову, думал что-то с времянкой, когда пакет с нуля начинается. Ещё есть вопросик по осцилограммам rgmii: есть две платы, на одной - Marvell 88E1111, на другой Micrel KSZ9021RL, сигналы RX_CTL отличаются, хотя при этом всё работает нормально, MAC принимает-передаёт пакеты.
|
|
|
|
|
Jun 21 2011, 09:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(vadimuzzz @ Jun 21 2011, 11:05)  а насколько часто такие различия повторяются? если это не дребезг, то картинка от марвела показывает на наличие RX_ER вот это-то и не понятно, RX_CTL у марвела такой всегда. Есть две платы с марвелом, одна - с Stratix 2 (marvell подключён напрямую к fpga), на второй просто marvell, через переходник подключается к tms320c6455 (надо на нём гигабит запустить), на обоих RX_CTL одинаковый, как на рисунке. Приём-передача на nios ii, работает нормально, но в процессе отладки была замечена данная "особенность" marvella, при подключении к тому же tse mac nios ii платы с phy micrel, RX_CTL нормальный и данные тоже принимаются. Так вот и вопрос - так надо, или всётаки что-то не так? И если ошибка - каким образом тогда пакет принимается правильный?
|
|
|
|
|
  |
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0
|
|
|