-
- Во общем, парни, был не прав, все забыл )) Индусский косяк у меня исправлен таким образом: Раз в секунду вызывается функция, анализирующая наличие линка и (при необходимости) апающая или даунущая интерфейсы: 0men(485 знак., 11.01.2018 18:06)
- спасибо. Раз в секунду опрос линка у меня уже есть, добавлю остальное как у вас. - Sylvan(11.01.2018 18:12)
- Это не решает проблему изменения скорости 10<->100. Хотя, конечно, в жизни такое бывает крайне редко, надо думать. - SciFi(11.01.2018 18:09)
- как ни странно, а вот с этим все ок, при изменении состояния линка вызывается кубовская калбэк 0men(139 знак., 11.01.2018 18:32)
как костыль:замена на Constantin24(617 знак., 11.01.2018 12:05 - 12:36)- а при этом statusEthernetInit - это что? Как вы предлагаете это использовать? - Sylvan(11.01.2018 12:18)
- извините это из другого разряда) Constantin24(689 знак., 11.01.2018 12:34)
- OMG! Оно заработало. Это значит, в функции low_level_init() уже есть NETIF_FLAG_LINK_UP, но оно выполняется только в том случае когда кабель был воткнут во время инициализации. А если это не так, то NETIF_FLAG_LINK_UP уже никогда не присваивался. Sylvan(145 знак., 11.01.2018 13:18, ссылка)
- Я делаю так. При инициализации lwip сразу ставлю флаги netif->flags |= NETIF_FLAG_UP|NETIF_FLAG_LINK_UP; Evgeniy1294(436 знак., 11.01.2018 15:15 - 15:17)
- Это из рубрики "вредные советы". На чужую кривизну накручиваем свою кривизну в надежде, что вместе две кривизны обнулятся. SciFi(175 знак., 11.01.2018 15:17 - 15:19)
- я не разбирался в данном вопросе углубленно - Constantin24(11.01.2018 14:31)
- Нет, это не так. Оно выполняется, если правильно сработает HAL_ETH_Init в которой выполняется инициализация configure ethernet peripheral (GPIOs, clocks, MAC, DMA). Посмотрите внимательно, что внутри этой функции делается и что она возвращает в 0men(13 знак., 11.01.2018 13:24)
- в моем проекте я вижу что HAL_ETH_Init() вызывается при инициализации. Но если инициализация пройдена без подключения кабеля, то потом уже, если включить кабель, эта функция уже не вызывается - Sylvan(11.01.2018 15:32)
- проверю, попозже, у себя, такой проблемы не замечал. Правда, у меня F407, IAR - 0men(11.01.2018 15:40 - 15:42)
- кстати, у меня нет прерывания от физики на изменение статуса линка. Возможно у вас есть. - Sylvan(11.01.2018 15:51)
- Ну, ежели оторвать и выбросить куб так сложно, можно после подключения кабеля делать сброс МК, и тогда HAL_ETH_Init() вызовется :-) - SciFi(11.01.2018 15:35)
- блин, ну непросто это, таки да (про выбросить и вставить заново без HAL) :)) Оно в общем-то уже работает, после искусственного поднятия флага NETIF_FLAG_LINK_UP во время инициализации. - Sylvan(11.01.2018 15:48)
- HAL_ETH_Init внутри low_level_init :) - 0men(11.01.2018 15:38)
- То есть индусские говнокодеры не рассматривают возможность отключения и подключения кабеля? Впрочем, кого этим удивишь? - SciFi(11.01.2018 15:41)
- да вряд ли в этом дело, у меня все работает когда отключаешь-подключаешь - 0men(11.01.2018 15:46)
- Предлагаю такие эксперименты: SciFi(223 знак., 11.01.2018 15:49)
- был не прав, см выше ) - 0men(11.01.2018 18:07)
- да, попозже посмотрю, давно этот проект был.. - 0men(11.01.2018 16:33)
- да, и у меня тоже с самого начала так работало.Не работало если инициализация - без кабеля, а потом засунуть кабель. Сейчас это вылечено (хоть и костыльно) - Sylvan(11.01.2018 15:49)
- Предлагаю такие эксперименты: SciFi(223 знак., 11.01.2018 15:49)
- да вряд ли в этом дело, у меня все работает когда отключаешь-подключаешь - 0men(11.01.2018 15:46)
- То есть индусские говнокодеры не рассматривают возможность отключения и подключения кабеля? Впрочем, кого этим удивишь? - SciFi(11.01.2018 15:41)
- проверю, попозже, у себя, такой проблемы не замечал. Правда, у меня F407, IAR - 0men(11.01.2018 15:40 - 15:42)
- в моем проекте я вижу что HAL_ETH_Init() вызывается при инициализации. Но если инициализация пройдена без подключения кабеля, то потом уже, если включить кабель, эта функция уже не вызывается - Sylvan(11.01.2018 15:32)
- Я делаю так. При инициализации lwip сразу ставлю флаги netif->flags |= NETIF_FLAG_UP|NETIF_FLAG_LINK_UP; Evgeniy1294(436 знак., 11.01.2018 15:15 - 15:17)
- OMG! Оно заработало. Это значит, в функции low_level_init() уже есть NETIF_FLAG_LINK_UP, но оно выполняется только в том случае когда кабель был воткнут во время инициализации. А если это не так, то NETIF_FLAG_LINK_UP уже никогда не присваивался. Sylvan(145 знак., 11.01.2018 13:18, ссылка)
- извините это из другого разряда) Constantin24(689 знак., 11.01.2018 12:34)
- а при этом statusEthernetInit - это что? Как вы предлагаете это использовать? - Sylvan(11.01.2018 12:18)
- Вариант выкинуть куб нафиг рассматривается? - SciFi(11.01.2018 10:19)
- если есть подозрение что это из-за него, то да, вполне можно. Все остальное в этом проекте - мое, писано ручками, через обращения к регистрам. Без HAL - Sylvan(11.01.2018 10:26)
- У себя делаю так: SciFi(409 знак., 11.01.2018 10:31)
- что есть "инициализация MAC"? вызов static void low_level_init(struct netif *netif) из файла ethernetif.c, верно? - Sylvan(11.01.2018 11:34)
- тогда получается, что я могу оставить все как есть и просто добавить то что вы описали. Это ж все быстрее сделать чем все выкинуть и сидеть портировать LwIP с нуля. Спасибо за советы! - Sylvan(11.01.2018 10:35)
- У себя недавно обнаружил косяк в драйвере STM32 MAC DMA. Удивительно, как он работал столько лет. Немного изменил конфигурацию - и косяк вылез наружу. Намекаю на то, что хорошо бы, чтобы в индусском говнокоде того же не было... - SciFi(11.01.2018 11:18)
- SciFi ответил исчерпывающе. От себя добавлю, что autonegotiation лучше включать, без него были проблемы, с повторным подключением кабеля связь не восстанавливалась (выставлял вручную Full Duplex 100mb). По ссылке неплохая вики на lwip - Evgeniy1294(11.01.2018 11:13, ссылка)
- У себя делаю так: SciFi(409 знак., 11.01.2018 10:31)
- если есть подозрение что это из-за него, то да, вполне можно. Все остальное в этом проекте - мое, писано ручками, через обращения к регистрам. Без HAL - Sylvan(11.01.2018 10:26)
- Во общем, парни, был не прав, все забыл )) Индусский косяк у меня исправлен таким образом: Раз в секунду вызывается функция, анализирующая наличие линка и (при необходимости) апающая или даунущая интерфейсы: 0men(485 знак., 11.01.2018 18:06)