|
stm32 LwIp, Как работать с фреймами Ethernet |
|
|
|
Jan 22 2014, 06:02
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 9-06-12
Пользователь №: 72 244

|
Вот пример от терраэлектроники как они реализуют прием и отправку по Ethernet. Можно попытаться сделать разграничение по двум типам приема: в ручную и стеком. http://forum.promelec.ru/index.php/topic,1828.15.html
Сообщение отредактировал Log_in - Jan 22 2014, 06:03
|
|
|
|
|
Jan 23 2014, 06:14
|
Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071

|
Цитата(scifi @ Jan 22 2014, 10:40)  Если прямо кадры Ethernet - то в так называемом "драйвере" STM32 Ethernet MAC. Драйвер написан кодерами-индусами из ST, так что разбираться тоже будет непросто. Кстати, мой самописный драйвер имеет размер всего 450 строк. Если достаточно перехвата пакетов IP, то в lwip для этого есть штатные средства. В lwIp я не шибко силен - читал что есть raw-функции, которые можно использовать если не используется многозадачность. Я так понял, что либо FreeRtos без lwip - либо lwIp без многозадачности?
|
|
|
|
|
Jan 23 2014, 08:10
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(TolikG @ Jan 23 2014, 10:14)  В lwIp я не шибко силен - читал что есть raw-функции, которые можно использовать если не используется многозадачность. Я так понял, что либо FreeRtos без lwip - либо lwIp без многозадачности? это не про LwIP просто, а про LwIP на софтварных процах микроблайза. Там LwIP завернут в библиотеку, и у него 2 режима работы. Raw и Socket, первый без операционок, а второй требует операционки. Но это все про ксалинкс, плис, и их микроблайз. Для АРМ и прочего может быть не так, если вы только ихнюю же библиотеку как то не прикрутите, или вам не попались их исходники, или в LwIP для армов изначально тоже все это есть...
|
|
|
|
|
Jan 23 2014, 10:06
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Golikov A. @ Jan 23 2014, 12:10)  Для АРМ и прочего может быть не так, если вы только ихнюю же библиотеку как то не прикрутите, или вам не попались их исходники, или в LwIP для армов изначально тоже все это есть... При чём тут плис и арм? lwip - вполне себе нормальная библиотека, написанная на языке Си. Работает одинаково как на армах, так и на софткорах. Процессор - он ведь и в Африке процессор. Полистайте для разнообразия исходники lwip. Возможно, развеются какие-нибудь заблуждения.
|
|
|
|
|
Jan 24 2014, 06:44
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата Вобщем не смог проследить путь от netconn_write() до места где данные уходят наружу, там мог бы и подменить буфер с фреймом. 1. Вам нужно найти место где инициализируется структура Код ethif->output = etharp_output; ethif->linkoutput = EthernetOutput; //EthernetOutput - Это и есть вывод фремом естесно у Вас она может по другому называться скажем так low_level_output ethif->input = tcpip_input; //tcpip_input - Сюда принятые фреймы засовываются если используется ОС и ethernet_input - если неиспользуется ОС ethif->mtu = 1500; ethif->flags = NETIF_FLAG_BROADCAST|NETIF_FLAG_ETHARP; //broadcast capability P.S. Странный подход у Вас вам нужны вреймы а вы их пытаетесь проследить от netconn_write(), не стой стороны копаете, копайте со стороны драйвера МАС.
|
|
|
|
|
Jan 24 2014, 10:08
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Golikov A. @ Jan 23 2014, 14:20)  ...режим полинга по таймерам называли Raw.. как бы роу - в контексте стэка, имеется ввиду сырые пакеты. т.е. юзверь стэка может формировать сам пакеты и сказать - а теперь передатчик съешь это всё. это становится понятно, когда загляните в исходники lwip - там прямо такие кейсы и встретите по коду SOCK_RAW LWIP_RAW MEMP_RAW_PCB PBUF_RAW NETCONN_RAW а как это обслуживает стэк - поллинг или прерывания или там сбоку подпрыгивает - пофигу...
|
|
|
|
|
Jan 28 2014, 06:03
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата как бы роу - в контексте стэка, имеется ввиду сырые пакеты. т.е. юзверь стэка может формировать сам пакеты и сказать - а теперь передатчик съешь это всё. это становится понятно, когда загляните в исходники lwip - там прямо такие кейсы и встретите по коду Не стоит путать сырые пакеты IP с фреймами изернет где могут передаваться фреймы отличные от IP протокола, а RAW сокеты работают с IP пакетами.
|
|
|
|
|
Jan 30 2014, 13:16
|
Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071

|
Цитата(MALLOY2 @ Jan 24 2014, 10:44)  1. Вам нужно найти место где инициализируется структура Код ethif->output = etharp_output; ethif->linkoutput = EthernetOutput; //EthernetOutput - Это и есть вывод фремом естесно у Вас она может по другому называться скажем так low_level_output ethif->input = tcpip_input; //tcpip_input - Сюда принятые фреймы засовываются если используется ОС и ethernet_input - если неиспользуется ОС ethif->mtu = 1500; ethif->flags = NETIF_FLAG_BROADCAST|NETIF_FLAG_ETHARP; //broadcast capability P.S. Странный подход у Вас вам нужны вреймы а вы их пытаетесь проследить от netconn_write(), не стой стороны копаете, копайте со стороны драйвера МАС. Устройство должно выполнять следующие задачи: - WEB - cтраничка для оперативного управления - FTP-сервер для удаленного обновления - маршрутизация (пересылка некоторых фреймов в необработанном виде) в другие (не Eternet!) интерфейсы (UART, SPI...) и обратно из других интерфейсов в Eternet. Покопался в исходниках LwIp со стороны обработчика прерываний - вышел на функции low_level_input(), low_level_output(). Думаю получится.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|