Grootoportunities 0 29 июня, 2023 Опубликовано 29 июня, 2023 (изменено) · Жалоба Привет! Использую микроконтроллер STM32F429ZI-DISC1 с микропроцессором на нём STM32F429ZIT6, + DP83848. Пробую написать прогу через которую этот микроконтроллер будет обмениваться с компом данными по Modbus TCP. Проблема в инициализации LWIP. Обратил внимание на следующий цикл: while (READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR) > 0U) { if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT)) { /* Set Error Code */ heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT; /* Set State as Error */ heth->gState = HAL_ETH_STATE_ERROR; /* Return Error */ return HAL_ERROR; } } Не происходит программный сброс, бит не сбрасывается в 0. Эту проблему я решил путём комментирования return и добавления break в конце цикла (источник: https://www.programmersought.com/article/52516336171/), LWIP начал инициализироваться, но в таком случае нет эхо в Wiresharke и он спрашивает "Who is ..." про IP. В одной из тем это решили путём подтягивания MII_INT к питанию: Там используется MII, в моём же случае - RMII, и я не понимаю какой там пин может отвечать за MII_INT и как его определить по схеме со схемой DP83848, и как будет отвечать с RMII у меня. Хотелось бы "излечить причину болезни", а не "симптомы" путём комментирования return. Буду благодарен любой помощи. Ещё смущает то, что на самой DP83848 горит только оранжевый диод, зелёный не светит и не моргает. На всякий случай ещё распишу как подключил пины: Спойлер DP83848 - STM32F429ZIT6 TX_EN - PG11 TX0 - PG13 TX1 - PG14 CRS - PA7 RX0 - PC4 RX1 - PC5 MDIO - PA2 OSCIN - PA1 (REF_CLK in configuration) MDC - PC1 VCC - 3V GND - GND 096DP83848TCP.ioc Соврал на счёт диодов на DP83848: посмотрел, горят оба диода постоянно. Зелёный никак не мигает, горит как и оранжевый постоянно. Изменено 29 июня, 2023 пользователем haker_fox Переместил в раздел STM32. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба Обычно этот бит не устанавливается, пока с PHY не начнет приходить частота на вход ETH_RMII _REF_CLK. У вас она приходит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grootoportunities 0 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 9 минут назад, Grootoportunities сказал: Привет! Использую микроконтроллер STM32F429ZI-DISC1 с микропроцессором на нём STM32F429ZIT6, + DP83848. Пробую написать прогу через которую этот микроконтроллер будет обмениваться с компом данными по Modbus TCP. Проблема в инициализации LWIP. Обратил внимание на следующий цикл: while (READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR) > 0U) { if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT)) { /* Set Error Code */ heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT; /* Set State as Error */ heth->gState = HAL_ETH_STATE_ERROR; /* Return Error */ return HAL_ERROR; } } Не происходит программный сброс, бит не сбрасывается в 0. Эту проблему я решил путём комментирования return и добавления break в конце цикла (источник: https://www.programmersought.com/article/52516336171/), LWIP начал инициализироваться, но в таком случае нет эхо в Wiresharke и он спрашивает "Who is ..." про IP. В одной из тем это решили путём подтягивания MII_INT к питанию: Там используется MII, в моём же случае - RMII, и я не понимаю какой там пин может отвечать за MII_INT и как его определить по схеме со схемой DP83848, и как будет отвечать с RMII у меня. Хотелось бы "излечить причину болезни", а не "симптомы" путём комментирования return. Буду благодарен любой помощи. Ещё смущает то, что на самой DP83848 оба диода (оранжевый и зелёный) горят постоянно. Разве зелёный не должен моргать при передаче данных? На всякий случай ещё распишу как подключил пины: Показать контент DP83848 - STM32F429ZIT6 TX_EN - PG11 TX0 - PG13 TX1 - PG14 CRS - PA7 RX0 - PC4 RX1 - PC5 MDIO - PA2 OSCIN - PA1 (REF_CLK in configuration) MDC - PC1 VCC - 3V GND - GND 096DP83848TCP.ioc 3 минуты назад, Сергей Борщ сказал: Обычно этот бит не устанавливается, пока с PHY не начнет приходить частота на вход ETH_RMII _REF_CLK. У вас она приходит? Если посмотреть это возможно только с осциллографом или мультиметром, то к сожалению у меня их нет в наличии 😞 Или можно это как-то узнать другим способом? Заранее прошу прощения за своё незнание, только недавно влился в работу с микроконтроллерами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grootoportunities 0 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 21 минуту назад, Сергей Борщ сказал: Обычно этот бит не устанавливается, пока с PHY не начнет приходить частота на вход ETH_RMII _REF_CLK. У вас она приходит? По datasheet GPIOA (ETH_REF_CLK - PA1) у меня подключен к шине AHB1. По Clock Configuration на шину AHB у меня идёт 180MHz, если я конечно правильно всё посмотрел по вашему вопросу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 29 июня, 2023 Опубликовано 29 июня, 2023 (изменено) · Жалоба 41 минуту назад, Grootoportunities сказал: Если посмотреть это возможно только с осциллографом или мультиметром, Просто наличие частоты можно посмотреть даже 2 послед. включенными светодиодами с общей точкой - 1 диод на + другой на - ср. точка на сигнал, с резисторами разумеется)). если частота есть - будут светится оба... Изменено 29 июня, 2023 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grootoportunities 0 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 25 минут назад, mantech сказал: Просто наличие частоты можно посмотреть даже 2 послед. включенными светодиодами с общей точкой - 1 диод на + другой на - ср. точка на сигнал, с резисторами разумеется)). если частота есть - будут светится оба... Спасибо за совет, но в скором времени лучше раздобуду осцил и посмотрю на нём приходит ли частота, мне кажется им проще) Как посмотрю - отпишусь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 2 часа назад, Grootoportunities сказал: По datasheet GPIOA (ETH_REF_CLK - PA1) у меня подключен к шине AHB1. По Clock Configuration на шину AHB у меня идёт 180MHz, если я конечно правильно всё посмотрел по вашему вопросу. На эту ногу должен приходить сигнал REF_CLK частотой 50 МГц от внешнего источника: Некоторые RMII_PHY (я использовал LAN8720A) умеют сами генерить этот сигнал: Ваша DP83848 такого делать не умеет, ей требуется эти же 50 МГц подать на вход X1: Ищите, кто в вашей схеме должен производить эти 50 МГц. Возможно, они берутся с выхода MCO1 или MCO2 контроллера (STM32F407), тогда вам нужно в вашей программе настроить соответствующим образом PLL и выход MCO. 2 часа назад, Grootoportunities сказал: Если посмотреть это возможно только с осциллографом или мультиметром, то к сожалению у меня их нет в наличии 😞 Или можно это как-то узнать другим способом? В отладчике откройте окно с регистрами периферии, найдите там регистр GPIOA->IDR, сделайте несколько шагов по циклу ожидания ETH_DMABMR_SR наблюдая за битом 1 в GPIOA->IDR. Если частота на этом выводе присутствует - в момент чтения регистра после остановки ядра отладчик будет попадать то на высокий, то на низкий уровень и вы будете наблюдать то 0, то 1 в бите, соответствующем PA1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grootoportunities 0 4 июля, 2023 Опубликовано 4 июля, 2023 · Жалоба В 29.06.2023 в 13:30, Сергей Борщ сказал: Ищите, кто в вашей схеме должен производить эти 50 МГц. Возможно, они берутся с выхода MCO1 или MCO2 контроллера (STM32F407), тогда вам нужно в вашей программе настроить соответствующим образом PLL и выход MCO. В отладчике откройте окно с регистрами периферии, найдите там регистр GPIOA->IDR, сделайте несколько шагов по циклу ожидания ETH_DMABMR_SR наблюдая за битом 1 в GPIOA->IDR. Если частота на этом выводе присутствует - в момент чтения регистра после остановки ядра отладчик будет попадать то на высокий, то на низкий уровень и вы будете наблюдать то 0, то 1 в бите, соответствующем PA1. В общем, проверил на осциллографе ногу PA1 - выдаёт 50МГц, но линия какая-то странная, то есть, то нет (возможно дело в проводах, они плохо держат и отходят легко, скоро подключу новыми проводами). В окне с регистрами периферии проверил регистры IDR. При проходе цикла, IDR1 (как я понимаю, именно он отвечает за PA1), бит в нём не меняется (0x0). Странно получается, по регистрам частоты нет, а по осциллографу есть? Подключил ещё MCO1 (PA8) через HSE на 8MHz (как и Input Frequency)- он меняется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grootoportunities 0 4 июля, 2023 Опубликовано 4 июля, 2023 · Жалоба Короче, проблема инициализации LWIP была в проводах 🙄 Теперь в дебаге код не останавливается на данном цикле и проходит дальше функции инициализации в main и без комментирования ретёрна. Но в Вайршарке по прежнему нет эхо, и про данный айпишник всё тот же вопрос - "Who has ... ?" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 4 июля, 2023 Опубликовано 4 июля, 2023 · Жалоба 5 часов назад, Grootoportunities сказал: В общем, проверил на осциллографе ногу PA1 - выдаёт 50МГц, но линия какая-то странная, то есть, то нет (возможно дело в проводах, они плохо держат и отходят легко, скоро подключу новыми проводами). Вы 50 МГц по какой-то лапше гоняете и ещё удивляетесь что оно нестабильно работает??? Сразу надо было писать, что у вас всё на соплях висит.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grootoportunities 0 5 июля, 2023 Опубликовано 5 июля, 2023 (изменено) · Жалоба 13 часов назад, jcxz сказал: Вы 50 МГц по какой-то лапше гоняете и ещё удивляетесь что оно нестабильно работает??? Сразу надо было писать, что у вас всё на соплях висит.... Действительно сглупил, внешне они выглядели нормально, но легко можно было их потревожить лишь дотронувшись до них) Понял это только после сигнала осциллографа Сейчас нужно понять в чём причина того, что в вайршарке ругается на айпишник Изменено 5 июля, 2023 пользователем Grootoportunities Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 5 июля, 2023 Опубликовано 5 июля, 2023 · Жалоба 41 минуту назад, Grootoportunities сказал: Сейчас нужно понять в чём причина того, что в вайршарке ругается на айпишник Он не ругается. Судя по вашим настройкам из первого сообщения, ваше устройство имеет адрес 192.168.1.193. 192.168.1.1 - шлюз. 192.168.1.192 - адрес компьютера, с которого вы пытаетесь связаться с железкой? Так вот этот компьютер хочет послать что-то за пределами вашей подсети (отчет дяде Биллу или просто запросить у мирового разума текущее время), для этого он должен послать пакет через шлюз и запросами "Who has 192.168.1.1" ищет шлюз. На этот запрос должен ответить шлюз. Пинг с компа на железку судя по последней картинке у вас проходит, то есть железка принимает запросы и отвечает на них. Непонятно, что вам не нравится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grootoportunities 0 5 июля, 2023 Опубликовано 5 июля, 2023 · Жалоба 4 часа назад, Сергей Борщ сказал: Он не ругается. Судя по вашим настройкам из первого сообщения, ваше устройство имеет адрес 192.168.1.193. 192.168.1.1 - шлюз. 192.168.1.192 - адрес компьютера, с которого вы пытаетесь связаться с железкой? Так вот этот компьютер хочет послать что-то за пределами вашей подсети (отчет дяде Биллу или просто запросить у мирового разума текущее время), для этого он должен послать пакет через шлюз и запросами "Who has 192.168.1.1" ищет шлюз. На этот запрос должен ответить шлюз. Пинг с компа на железку судя по последней картинке у вас проходит, то есть железка принимает запросы и отвечает на них. Непонятно, что вам не нравится? В ответе, который я прикрепил ниже, у человека, который разобрался с проблемой, в вайршарке есть сообщения с протоколом ICMP и echo реквестом и реплаем (в скриншоте). Я думал, раз синициализироовался LWIP, при пинге айпишника через cmd должны приходить такие же сообщения в вайршарке. Я чего-то не понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 5 июля, 2023 Опубликовано 5 июля, 2023 · Жалоба 1 час назад, Grootoportunities сказал: Я думал, раз синициализироовался LWIP, при пинге айпишника через cmd должны приходить такие же сообщения в вайршарке. Причём тут сообщения к 192.168.1.1 если у вас комп и устройство - в одной подсети? Зачем тогда смотрите на сообщения к шлюзу? Шлюз используется только при обращении за пределы подсети. Ищите сообщения с IP своего устройства. А то что в логе шарка много ARP к 192.168.1.1, говорит возможно о том, что: или шлюз почему-то не отвечает (неправильно сконфигурена сеть?); или о том, что на запрашивающем устройстве (192.168.1.192?) почему-то не работает ARP-кеш; или ... 1 час назад, Grootoportunities сказал: Я чего-то не понимаю? Не понимаете принципов работы сетевых устройств? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться