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

 
 
> stm32F4 ethernet отправка фрейма
Fobes
сообщение Mar 13 2016, 14:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 19-01-16
Пользователь №: 90 105



Всем доброго времени суток. Уже совсем измучился... Нужно отправить чисто ethernet фрейм + vlan tag + свои данные. Т.е. только канальный уровень по ОСИ.
Взял LwIp библиотеку. Как я понял в ней отправка данных происходит через буфер pbuf и при помощи функции low_level_output().
Собственно сделал свои структуры дабы время сэкономить:
CODE

struct ethernet_header
{
uint8_t dstAdr[6];
uint8_t srcAdr[6];
uint8_t type[2];
} __attribute__((packed));

struct vlan_header
{
uint8_t param[2];
uint8_t type[2];
} __attribute__((packed));

struct my_header
{
struct ethernet_header eth_hdr;
struct vlan_header vlan_hdr;
//дальше мои данные
} __attribute__((packed));


Дальше заполняю и отправляю вот так:

CODE

struct pbuf *pbuf_my;
struct my_header my_hdr;

uint32_t errCnt;
err_t error;

my_hdr.eth_hdr.dstAdr[0] = 0x01; my_hdr.eth_hdr.dstAdr[1] = 0x0C;
my_hdr.eth_hdr.dstAdr[2] = 0xCD; my_hdr.eth_hdr.dstAdr[3] = 0x04;
my_hdr.eth_hdr.dstAdr[4] = 0x00; my_hdr.eth_hdr.dstAdr[5] = 0x01;

my_hdr.eth_hdr.srcAdr[0] = 0x06; my_hdr.eth_hdr.srcAdr[1] = 0x02;
my_hdr.eth_hdr.srcAdr[2] = 0x00; my_hdr.eth_hdr.srcAdr[3] = 0xFF;
my_hdr.eth_hdr.srcAdr[4] = 0xFF; my_hdr.eth_hdr.srcAdr[4] = 0x10;

my_hdr.eth_hdr.type[0] = 0x81; my_hdr.eth_hdr.type[1] = 0x00;
//------------
my_hdr.vlan_hdr.param[0] = 0x80; my_hdr.vlan_hdr.param[1] = 0x00;
my_hdr.vlan_hdr.type[0] = 0x88; my_hdr.vlan_hdr.type[1] = 0xba;
//-----

//вот это верно делаю ? sad.gif
pbuf_my= pbuf_alloc(PBUF_RAW,sizeof(struct my_header), PBUF_RAM);
pbuf_my->payload = &my_hdr;


while (1)
{
error = gnetif.linkoutput(&gnetif, pbuf_my);

if (error != ERR_OK)
{
errCnt++;
}
}


Длина одного фрейма порядка 820 байт... Фреймы передаются,но wireshark периодически показывает "Malformed packet". И в error появляется "#define ERR_BUF -2 /* Buffer error. */" Что я делаю не так ? Как правильно использовать буфер ? sad.gif помогите плиз, знающие люди !!!
И второй вопрос, фрейм передается правильно, но vlan tag вырезается почему-то, оно где-то разрешаться должно чтоли ?

п.с. с фреймами меньшей длины такие проблемы возникают, но реже

может ли это быть связано с повреждением микросхемы физического уровня ?

Сообщение отредактировал Fobes - Mar 13 2016, 16:27
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Fobes
сообщение Mar 16 2016, 22:53
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 19-01-16
Пользователь №: 90 105



Цитата(ig_z @ Mar 14 2016, 13:52) *
Телепаты в отпуске, попробую угадать. Под виндовс влан теги стрипаются драйвером до снифера


Приношу свои извинения) Забыл что с других устройств снимал данные под линуксом) Вопрос с влан тегом снят. Все верно отправляется.


Цитата(cyrax0 @ Mar 16 2016, 07:49) *
Плохо ищете...
STM32Cube_FW_F4_V1.11.0\Projects\STM324xG_EVAL\Applications\LwIP\LwIP_UDP_Echo_Client (вместо STM324xG_EVAL см. ваш контроллер)
udp_echoclient_send, который у них сделан в коллбэке, перенесите в while(1), и получите, видимо, то, что хотите.


Посмотрел всетаки свой код, при отправке моих пакетов никаких ошибок не вылетает, но шарк ругается по прежнему, буду надеяться что это неисправность железа всетаки)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 15:04
Рейтинг@Mail.ru


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