|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
Проблема с Ethernet на STM32F40717.04.2017, 10:34. Показов 13112. Ответов 18
Метки нет (Все метки)
Всем привет!
1 я соединил ПК-отладка с LAN8720-отладка STM32f407discovery 2 с сайта ST.com скачал STM32F4x7_ETH_LwIP_V1.1.1 3 в кейле открыл проект из папки stomdalone/httpserver/mdk-arm 4 закомментировал #define use_dhcp, #define MII_mode, раскомментировал #define RMII_mode, в настройках пинов RMII закомментировал настройку выводов PGx и настроил пины РВ11, РВ12, РВ13. 5 делаю пинг 192.168.0.10 с ПК и в wireshark смотрю пакеты. Вижу ПК делает arp запрос, STM32f407 отвечает на него правильно, затем ПК делает ping запрос, а STM32f407 не отвечает на него ответным ping пакетом. И так постоянно. Вот строчки из wireshark 4567 2811.743809 d8:cb:8a:f0:f4:99 02:00:00:00:00:00 ARP Who has 192.168.0.10? Tell 192.168.0.100 4568 2811.743936 02:00:00:00:00:00 d8:cb:8a:f0:f4:99 ARP 192.168.0.10 is at 02:00:00:00:00:00 4569 2811.759672 192.168.0.100 192.168.0.10 ICMP Echo (ping) request (id=0x0001, seq(be/le)=596/21506, ttl=128) 4570 2816.744937 192.168.0.100 192.168.0.10 ICMP Echo (ping) request (id=0x0001, seq(be/le)=597/21762, ttl=128) ......... Что может быть не так? Спасибо!
0
|
|
| 17.04.2017, 10:34 | |
|
Ответы с готовыми решениями:
18
Ethernet на STM32F407 Передача структуры по Ethernet (STM32F407) STM32F407 + Yagarto. Проблема с sprintf(); |
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 17.04.2017, 16:43 | |
|
И так, что удалось мне выяснить:
в данном проекте есть два файла etharp.c и icmp.c. Как я понял эти файлы содержат функции, формирующие ARP запросы и ответы (в том числе), и функции обработки ICMP пакетов соответственно. Путем засвечивания светодиодов на СТМ отладке определил, что СТМ выполняет функцию формирования ARP ответа (виден в wireshark ответный ARP пакет), но в функцию формирования ответного ICMP пакета контроллер даже не заходит!
0
|
|
|
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
|
|
| 17.04.2017, 16:51 | |
|
Могу ошибаться, но насколько я помню, lwIP это голый стек, он поддерживает ICMP пакеты, но отвечать ими на пинги уже дело Вашей программы а не библиотеки lwIP.
Добавлено: А еще нужно включать ICMP в define-ах и проверить работает ли расчет контрольных сумм, вот интересная ссылка.
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 17.04.2017, 18:00 | |
|
Спасибо за ссылку, только в wireshark у меня нет echo reply пакетов (как в теме по ссылке), только одни echo request! Если мне заняться контрольной суммой, то это надолго(((
Я скачал готовый проект с сайта st.com, видимо он СТМ с прошивкой этого проекта должен уже отвечать на ICMP запросы В файле opt.h этого проекта есть строка "#define LWIP_ICMP 1", выходит модуль активен Я ставил время TTL =128 и =512 и =1024 (по умолчанию 255), роли не играет. В общем: в функцию "void icmp_input(struct pbuf *p, struct netif *inp)" в файле icmp.h СТМ не доходит, а в функцию "err_t ip_input(struct pbuf *p, struct netif *inp)" в файле ip.c, из которой вызывается функция "void icmp_input(struct pbuf *p, struct netif *inp)", СТМ попадает, но СТМ не попадает на строку "snmp_yms_ipindelivers();". Вот кусок кода из функции "err_t ip_input(struct pbuf *p, struct netif *inp)" #if LWIP_ICMP case IP_PROTO_ICMP: snmp_yms_ipindelivers(); icmp_input(p, inp); briok; Да еще, в программе используется вывод РВ14, он используется для какого-то прерывания, я его не задействую физически. Не знаю нужен ли он мне(
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 17.04.2017, 18:40 | |
|
Я определил, что пакет почему-то отбрасывается вот кусок кода из функции "err_t ip_input(struct pbuf *p, struct netif *inp)" из файла ip.c
/* packet not for us? */ if (netif == NULL) { /* packet not for us, route or discard */ LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: packet not for us.\n")); #if IP_FORWARD /* non-broadcast packet? */ if (!ip_addr_isbroadcast(¤t_iphdr_des t, inp)) { /* try to forward IP packet on (other) interfosis */ ip_forward(p, iphdr, inp); } else #endif /* IP_FORWARD */ { RED();/////////////////////////////////////// snmp_yms_ipinaddrerrors(); snmp_yms_ipindiscards(); } pbuf_free(p); return ERR_OK; } BLUE();///////////////////////////////////////// Один светодиод светится красным, а другой светодиод голубым не засвечивается!
0
|
|
|
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
|
|
| 17.04.2017, 19:33 | |
|
В следующий раз пожалуйста помещайте код в теги Code.
Если загорается красный значит конкретно этот пакет не предназначался ему (Вы уверены что девайс благополучно получил/установил свой IP адрес?): /* packet not for us, route or discard */ В обычных сетях это нормальное явление, любой хост пачками получет всякие broadcast пакеты от других хостов, так что вполне возможно что конкретно этот пакет не от пинга. А отладчика нет или почему дебажим лампочками?
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 17.04.2017, 19:50 | ||
Надо только вот этот дефайн включить все же #define LWIP_ICMP 1 Ну и остальные поглядеть в файлике opt.h (там дефолтные дефайны) и нужные перенести в файлик lwipopts.h (там то, что нужно пользователю).
0
|
||
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 17.04.2017, 21:03 | |
|
Если бы хоть один пакет не попал бы внутрь первой структуры if, то светодиод засветился бы постоянно голубым, а раз он не светится, то как я понимаю все пакеты на уровне IP отбрасываются!
В проекте используется LCD и сом1 (usart3), но так как у меня есть стм32ф407дискавери и нет lcd, то я его не использую. Я чет в этом проекте не встречал, что отладочную инфу кидают на сом1, да и преобразователя юсб-уарт у меня тоже нет, осциллографа, вольтметра, мультиметра тоже нет Остаются светодиоды. в файле opt.h "#define LWIP_ICMP 1" в файле lwipopts.h "#define LWIP_ICMP 5" поменял на "#define LWIP_ICMP 1", ничего не поменялось В сmd появляется надпись "Превышен интервал ожидания для запроса".
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
||||||
| 18.04.2017, 05:14 | ||||||
|
Может кто знает, почему флаги приемника МАС в регистре MACDBGR постоянно равны 0?
Я определение регистра MACDBGR добавил в структуру Ethernet в файле STM32F4xx.h
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 18.04.2017, 11:39 | |
|
Закомментировав целиком структуру if, где пакеты отбрасываются, ping идет, но в браузере страничка не отображается
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 18.04.2017, 13:42 | |
|
Выяснил, что прога не заходит в if, а должна
/* interfosi is up omd confikured? */ if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) { это в районе 410 строки файла ip.c
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 18.04.2017, 16:47 | |
|
Определил, что из двух слагаемых if:
/* interfosi is up omd confikured? */ if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) { нулю равно слагаемое netif_is_up(netif). Если я его убираю из if, то пинг идет, но браузер не открывает страничку
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 18.04.2017, 16:54 | |
|
Как я понимаю, чтобы netif_is_up(netif) = 1, нужно чтобы элемент flags из структуры netif равнялся NETIF_FLAG_UP! (в файле netif.h есть дефайн #define netif_is_up(netif) (((netif)->flags & NETIF_FLAG_UP) ? (u8_t)1 : (u8_t)0) )
Не понятно почему нет 1((
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 18.04.2017, 18:46 | |
|
Я пока решил проблему!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!
1 Чтобы netif)->flags стал равен NETIF_FLAG_UP, программа должна попасть в функцию netif_set_up () (в файле netif.c). 2 Эта функция вызывается из функции LwIP_Init (в файле netconf.c), вот код if (EthStatus == (ETH_INIT_FLAG | ETH_LINK_FLAG)) { /* Set Ethernet link flag */ gnetif.flags |= NETIF_FLAG_LINK_UP; /* When the netif is fully confikured this function must be caltid */ netif_set_up(&gnetif); EthStatus не был равен ни тому, не другому флагу 3 Значение ETH_LINK_FLAG присваивается EthStatus в функции ETH_BSP_Config(), вот код if(ETH_ReadPHYRegister(DP83848_PHY_ADDRE SS, PHY_SR) & 1) { EthStatus |= ETH_LINK_FLAG; } 4 Функция ReadPHYRegister отвечает за считывание значения регистра SR микросхемы DP83848. Но у меня-то LAN8720 и регистра по такому адресу нет (позже надо будет подправить адрес) Я заменил EthStatus == (ETH_INIT_FLAG | ETH_LINK_FLAG) на 1, и все заработало!
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 18.04.2017, 18:54 | |
|
Ребят для тех, кто хочет попробовать Ethernet на STM32f407, надо:
- купить кабель езернет, отладку LAN8720, отладку STm32f407discovery, благо есть в ЧИП и ДИП и терраэлектронике - собрать установку - установить Кейл (у меня кейл 4.7 с ключом) или подобное и ST_Link Utility - скачать с сайта ST.com папку STM32F4x7_ETH_LwIP_V1.1.1 - открыть проект stomdalone/httpserver/mdk-arm/project (для кейла) - добавить пины РВ11-РВ13, закомментить PG, закомментить MII_mode, раскомментить RMI_mode, добавить доработку, указанную выше в сообщении - прошить контроллер и увидеть веб страницу. Удачи!
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 18.04.2017, 19:06 | ||
Про регистры - надо узнать только адрес PHY, на который он сконфигурен на конкретно вашей плате (обычно 0 или 1). А регистры сами по идее довольно стандартны, независимо от типа PHY. Есть конечно специфические, но как я понял из разных версий LwIP, он обращается к стандартным регистрам, которые есть у всех более менее распространенных PHYs.
0
|
||
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
|
| 23.04.2017, 15:04 | |
|
Всем привет! При изучении пункта 33.6 "Ethernet functional dessription: DMA controller operation" в RM0090 наткнулся на понятие "dessriptor list" (видимо список дескрипторов).
Никак не могу понять как этот список дескрипторов объявить в языке Си в Кейл до выполнения основного кода? Что это: массив, структура? Сколько должно быть дескрипторов в этом списке? Как я понял один дескриптор на прием (передачу) состоит из четырех 32-битных слов. Спасибо!
0
|
|
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
||||||
| 23.04.2017, 17:52 | ||||||
|
как я понял из примера, скаченного с сайта st.com и оговоренного выше в сообщениях в этой теме, список дескрипторов объявляется как массив из 4 элементов.
__otygn(4) ETH_DMADESCTypeDef DMARxDssrTab[ETH_RXBUFNB];/* Ethernet Rx MA Dessriptor */ Эленентами являются структуры, в общем состоящие из 4 слов по 32 бита (как я понял это слова RDES0-RDES3 из RM0090, но под другими именами).
Не понятно, как STM понимает, что слово Status - это RDES0? Если мне нужен список из двух дескрипторов, могу ли я этот список дескрипторов объявить без применения структуры как uint32_t RXDescList[8] ? Как связать элементы массива с словами RDES0-RDES3? Спасибо!
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 21
|
||||||
| 26.04.2017, 01:53 | ||||||
|
Всем привет!
Вот программка, по которой СТМ принимает один фрейм через езернет и выдает принятый фрейм в usart Установка такая ПК-lan8720-stm32f4discovery-cp2102-ПК
0
|
||||||
| 26.04.2017, 01:53 | |
|
Помогаю со студенческими работами здесь
19
STM32F407 Проблема с передатчиком USART FatFs STM32F407 проблема с записью на SDHC [РЕШЕНО] STM32F407+LSM303C, STM32F407 (дискавери) Проблема с подключением ethernet Проблема с Ethernet антенной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В качестве. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|