|
TCP/IP и UDP на Nucleo-F767ZI |
|
|
|
Jun 11 2018, 15:31
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
Ребят, всем привет! Недавно столкнулся с задачей имплементации TCP/IP / UDP на STM32. До этого работал с микроконтроллерами PIC от Microchip. Погуглив немного, нашел решения, использующие lwIP для реализации TCP/IP. Использовать сторонние либы не хочется, поэтому вопрос - насколько сложна имплементация вышеуказанных протоколов посредством только регистров? Использование HAL и схожих библиотек также не приветствуется. Для реализации используется Nucleo-F767ZI с STM32F767ZI и LAN8742A на борту. Для начала пытаюсь разобраться с настройкой LAN8742A. Первое, что меня смутило, это то, что в документации к Nucleo-F767ZI сказано, что соединение между мк и модулем LAN8742A происходит посредством интерфейса RMII, в то время как регистры LAN8742A настраиваются через SMI. Так как настроить LAN8742A через мк? Заранее спасибо!
|
|
|
|
|
Jun 11 2018, 16:01
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
Цитата(dimka76 @ Jun 11 2018, 19:51)  UDP с нуля за один-два дня написать можно, он простой как палка. Несколько поковыряться придется, если вы захотите использовать фрагментацию IP пакетов.
Можно использовать вместо lwIP стек uIP. Но его сейчас в чистом виде нет. Он входит в состав Contiki. Но можно попытаться поискать старые версии. Он написан тем же автором. uIP тоже достаточно простой.
По RMII происходит обмен данными (выход в сеть). Для управления регистрами служит интерфейс MDC/MDIO. Спасибо большое за столь быстрый ответ! Значит, как я понял из вашего сообщения, для управления регистрами LAN8742A через STM, нужно на нем использовать MDIOS? Стек наподобие uIP буду писать (во всяком постараюсь) сам.
|
|
|
|
|
Jun 11 2018, 16:45
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(geotox @ Jun 11 2018, 19:01)  для управления регистрами LAN8742A через STM, нужно на нем использовать MDIOS? Стек наподобие uIP буду писать (во всяком постараюсь) сам. Я не знаю как именно этот интерфейс в STM32F767ZI назвали. Они любят там всякие буковки добавлять. Посмотрите по схеме куда ножки MDC и MDIO от LAN8742A идут и узнаете как периферия называется.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Jun 11 2018, 17:16
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
Цитата(dimka76 @ Jun 11 2018, 20:45)  Я не знаю как именно этот интерфейс в STM32F767ZI назвали. Они любят там всякие буковки добавлять. Посмотрите по схеме куда ножки MDC и MDIO от LAN8742A идут и узнаете как периферия называется. Нет, ошибся, все же RMII переферия оказалась.
|
|
|
|
|
Jul 29 2018, 18:29
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
Ребят, всем привет! Поднял в итоге Ethernet + DMA. Сейчас пытаюсь отослать UDP пакет на PC. Как понял, можно посылать пакет сразу, без всяких приветствий и рукопожатий. Единственное не пойму какой вид имеет UDP пакет. Везде в интернете он разный. Некоторые пакеты имеют header-ы как и IPv4 так и UDP, остальные только UDP. Есть ли у кого пример?
|
|
|
|
|
Jul 29 2018, 18:33
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата(geotox @ Jul 29 2018, 21:29)  Единственное не пойму какой вид имеет UDP пакет. Везде в интернете он разный. Это зависит в каком сечении Семиуровневой модели OSI вы смотрите.
|
|
|
|
|
Jul 29 2018, 18:47
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
Цитата(VladislavS @ Jul 29 2018, 22:33)  Это зависит в каком сечении Семиуровневой модели OSI вы смотрите. А можно немного поподробнее? Спасибо!
|
|
|
|
|
Jul 29 2018, 19:38
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата(geotox @ Jul 29 2018, 21:47)  А можно немного поподробнее? Спасибо! Я думал бан в гугле это прикол, ан нет... Семиуровневая модель OSI
|
|
|
|
|
Aug 5 2018, 19:33
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
Решил все же испробовать lwIP. Подключил плату напрямую к компу. Установил IP адреса: Код IP_ADDRESS[0] = 192; IP_ADDRESS[1] = 168; IP_ADDRESS[2] = 1; IP_ADDRESS[3] = 107; NETMASK_ADDRESS[0] = 255; NETMASK_ADDRESS[1] = 255; NETMASK_ADDRESS[2] = 255; NETMASK_ADDRESS[3] = 0; GATEWAY_ADDRESS[0] = 192; GATEWAY_ADDRESS[1] = 168; GATEWAY_ADDRESS[2] = 1; GATEWAY_ADDRESS[3] = 1; Теперь посылаю каждую секунду на комп инфу: Код void udp_client_send(void) { struct pbuf *p; sprintf(str1, "Test Data..."); p = pbuf_alloc(PBUF_TRANSPORT, strlen(str1), PBUF_POOL);
if (p != NULL) { pbuf_take(p, (void *) str1, strlen(str1)); udp_send(upcb, p); pbuf_free(p); } } На PC поднимаю UDP сервер при помощи програмы Hercules, которая ничего не принимает. Стандартная инициализация. Код void udp_init_connection(void) { ip_addr_t dest_ip; err_t err; upcb = udp_new();
if (upcb != NULL) { IP4_ADDR(&dest_ip, 192, 168, 1, 107); upcb->local_port = 1556; err = udp_connect(upcb, &dest_ip, 1555); }
if (err == ERR_OK) { udp_recv(upcb, udp_receive_callback, NULL); } } Как думаете, куда копать?
|
|
|
|
|
Aug 6 2018, 15:24
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
UPD:Решил пойти от обратного. Создал UDP сервер на STM32: Код void udp_init_connection(void) { ip_addr_t dest_ip; err_t err; upcb = udp_new();
if (upcb != NULL) { IP4_ADDR(&dest_ip, 169, 254, 166, 3); err = udp_bind(upcb, &dest_ip, 22); upcb->local_port = 22; IP4_ADDR(&dest_ip, 0, 0, 0, 0); upcb->remote_ip = dest_ip; upcb->remote_port = 22; }
if (err == ERR_OK) { udp_recv(upcb, udp_receive_callback, NULL); } } Прописал новые IP в функции инициализации lwip: Код IP_ADDRESS[0] = 169; IP_ADDRESS[1] = 254; IP_ADDRESS[2] = 166; IP_ADDRESS[3] = 3; NETMASK_ADDRESS[0] = 255; NETMASK_ADDRESS[1] = 255; NETMASK_ADDRESS[2] = 0; NETMASK_ADDRESS[3] = 0; GATEWAY_ADDRESS[0] = 169; GATEWAY_ADDRESS[1] = 254; GATEWAY_ADDRESS[2] = 166; GATEWAY_ADDRESS[3] = 1; Теперь, когда remote_ip = 0.0.0.0 в WireShark вижу посланный с STM32 пакет. Как только указываю IP компьютера, пакеты перестают приходить. STM подключен напрямую к ПК, без роутера. В чем может быть проблема?
|
|
|
|
|
Aug 7 2018, 18:57
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
Цитата(KRS @ Aug 7 2018, 12:14)  В ARP arp запросы видны в wireshark? Да, по всей видимости вы правы. Запросы есть, ответов нет... LWIP_ARP дефайн существует.
|
|
|
|
|
Aug 11 2018, 11:21
|
Группа: Участник
Сообщений: 9
Регистрация: 11-06-18
Пользователь №: 105 009

|
Ребят, что посоветуете сделать, если и STM и PC шлют друг другу ARP запросы, но ни один на них не отвечает? Все запросы видны в Wireshark.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|