Грендайзер 0 14 апреля, 2020 Опубликовано 14 апреля, 2020 · Жалоба Добрый день, коллеги и всех с пршедшим праздником космонавтики! Встала такая задача, прегонять "сырые" ethernet пакеты через stm32. Т.е. к MAC сонтроллеру в STM32 приходит ethernet пакет (физика lan8742), его необходимо принять и как есть передать дальше (например по SPI или UART - не важно). На другом конце стоит такой же STM32 который принимает пакет всё по тому же (UART или SPI) и должем с помощью своего MAC отправить его в сеть, опять же как есть! Т.к. с STM-овскими драйверами не получилось разобраться, использую ф-ции lwip NETCON (те что для FreeRtos): ethernetif_input - та, что создаётся в дефолтной задаче и low_level_output(netif, p). Для проверки использовал плату Nucleo-f767 переписав ethernetif_input следующим образом: void ethernetif_input(void const * argument) { struct pbuf *p; struct netif *netif = (struct netif *) argument; uint8_t *pbuf_test; for( ;; ) { if (osSemaphoreWait(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK) { do { LOCK_TCPIP_CORE(); p = low_level_input( netif ); if (p != NULL) { /* Здесь просто меняю байт в адресе назначения для проверки */ pbuf_test = (uint8_t*)p->payload; pbuf_test = pbuf_test + 3; *pbuf_test = 0x44; /* и отсылаю обратно */ low_level_output(netif, p); pbuf_free(p); } UNLOCK_TCPIP_CORE(); } while(p!=NULL); } } } Наблюдаю ситуацию в wireshark - всё нормально, в качестве адреса назначения FFFFFF44FFFF в качестве адреса источника (АИ) - адрес моего ПК. Однако теперь нужно сделать то же самое на STM32h743 и тут засада. Контроллер прерсылает в качестве АИ свой MAC адрес. Как объяснить этому мерзавцу, что б он так не делал? В его мак контроллере есть регист ETH_MACCR в котором можно указать из какого MAC регистра брать этот адресс, но вот что б отключить это дело, как я понял необходимо подшаманить в содержимом дескрипторов, и тут чё то я ничего не понял... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 15 апреля, 2020 Опубликовано 15 апреля, 2020 (изменено) · Жалоба 19 часов назад, Грендайзер сказал: его необходимо принять и как есть передать дальше Не понял, зачем использовать в данном случае эту загогулину в виде "ф-ции lwip NETCON (те что для FreeRtos):" когда нужно просто без разбора прокидывать эзернет фреймы? Ваша задача - это медиаконвертер в чистом виде. Изменено 15 апреля, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 15 апреля, 2020 Опубликовано 15 апреля, 2020 · Жалоба Я не разабрался с ethernet драйверами от stm, а функции lwip настравивают (с помощью всё тах же драйверов) mac контроллер и пересылают/принимают с помощью него данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 15 апреля, 2020 Опубликовано 15 апреля, 2020 · Жалоба 2 минуты назад, Грендайзер сказал: Я не разабрался с ethernet драйверами от stm, А придется, коли нужно МАКи подменять... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться