geotox 0 11 июня, 2018 Опубликовано 11 июня, 2018 · Жалоба Ребят, всем привет! Недавно столкнулся с задачей имплементации TCP/IP / UDP на STM32. До этого работал с микроконтроллерами PIC от Microchip. Погуглив немного, нашел решения, использующие lwIP для реализации TCP/IP. Использовать сторонние либы не хочется, поэтому вопрос - насколько сложна имплементация вышеуказанных протоколов посредством только регистров? Использование HAL и схожих библиотек также не приветствуется. Для реализации используется Nucleo-F767ZI с STM32F767ZI и LAN8742A на борту. Для начала пытаюсь разобраться с настройкой LAN8742A. Первое, что меня смутило, это то, что в документации к Nucleo-F767ZI сказано, что соединение между мк и модулем LAN8742A происходит посредством интерфейса RMII, в то время как регистры LAN8742A настраиваются через SMI. Так как настроить LAN8742A через мк? Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 44 11 июня, 2018 Опубликовано 11 июня, 2018 · Жалоба UDP с нуля за один-два дня написать можно, он простой как палка. Несколько поковыряться придется, если вы захотите использовать фрагментацию IP пакетов. Можно использовать вместо lwIP стек uIP. Но его сейчас в чистом виде нет. Он входит в состав Contiki. Но можно попытаться поискать старые версии. Он написан тем же автором. uIP тоже достаточно простой. По RMII происходит обмен данными (выход в сеть). Для управления регистрами служит интерфейс MDC/MDIO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
geotox 0 11 июня, 2018 Опубликовано 11 июня, 2018 · Жалоба UDP с нуля за один-два дня написать можно, он простой как палка. Несколько поковыряться придется, если вы захотите использовать фрагментацию IP пакетов. Можно использовать вместо lwIP стек uIP. Но его сейчас в чистом виде нет. Он входит в состав Contiki. Но можно попытаться поискать старые версии. Он написан тем же автором. uIP тоже достаточно простой. По RMII происходит обмен данными (выход в сеть). Для управления регистрами служит интерфейс MDC/MDIO. Спасибо большое за столь быстрый ответ! Значит, как я понял из вашего сообщения, для управления регистрами LAN8742A через STM, нужно на нем использовать MDIOS? Стек наподобие uIP буду писать (во всяком постараюсь) сам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 44 11 июня, 2018 Опубликовано 11 июня, 2018 · Жалоба для управления регистрами LAN8742A через STM, нужно на нем использовать MDIOS? Стек наподобие uIP буду писать (во всяком постараюсь) сам. Я не знаю как именно этот интерфейс в STM32F767ZI назвали. Они любят там всякие буковки добавлять. Посмотрите по схеме куда ножки MDC и MDIO от LAN8742A идут и узнаете как периферия называется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
geotox 0 11 июня, 2018 Опубликовано 11 июня, 2018 · Жалоба Я не знаю как именно этот интерфейс в STM32F767ZI назвали. Они любят там всякие буковки добавлять. Посмотрите по схеме куда ножки MDC и MDIO от LAN8742A идут и узнаете как периферия называется. Нет, ошибся, все же RMII переферия оказалась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 12 июня, 2018 Опубликовано 12 июня, 2018 · Жалоба проверьте на примере из CUBE, что работает эзернет - в 767 ошибка в RMII интерфейсе (или см еррату для проверки ревизии чипа) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
geotox 0 29 июля, 2018 Опубликовано 29 июля, 2018 · Жалоба Ребят, всем привет! Поднял в итоге Ethernet + DMA. Сейчас пытаюсь отослать UDP пакет на PC. Как понял, можно посылать пакет сразу, без всяких приветствий и рукопожатий. Единственное не пойму какой вид имеет UDP пакет. Везде в интернете он разный. Некоторые пакеты имеют header-ы как и IPv4 так и UDP, остальные только UDP. Есть ли у кого пример? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 36 29 июля, 2018 Опубликовано 29 июля, 2018 · Жалоба Единственное не пойму какой вид имеет UDP пакет. Везде в интернете он разный. Это зависит в каком сечении Семиуровневой модели OSI вы смотрите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
geotox 0 29 июля, 2018 Опубликовано 29 июля, 2018 · Жалоба Это зависит в каком сечении Семиуровневой модели OSI вы смотрите. А можно немного поподробнее? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 36 29 июля, 2018 Опубликовано 29 июля, 2018 · Жалоба А можно немного поподробнее? Спасибо! Я думал бан в гугле это прикол, ан нет... Семиуровневая модель OSI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
geotox 0 5 августа, 2018 Опубликовано 5 августа, 2018 · Жалоба Решил все же испробовать 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); } } Как думаете, куда копать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
geotox 0 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба 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 подключен напрямую к ПК, без роутера. В чем может быть проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба Как только указываю IP компьютера, пакеты перестают приходить. STM подключен напрямую к ПК, без роутера. В чем может быть проблема? В ARP arp запросы видны в wireshark? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
geotox 0 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба В ARP arp запросы видны в wireshark? Да, по всей видимости вы правы. Запросы есть, ответов нет... LWIP_ARP дефайн существует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
geotox 0 11 августа, 2018 Опубликовано 11 августа, 2018 · Жалоба Ребят, что посоветуете сделать, если и STM и PC шлют друг другу ARP запросы, но ни один на них не отвечает? Все запросы видны в Wireshark. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться