bolmoe 0 24 января, 2020 Опубликовано 24 января, 2020 · Жалоба Доброго времени суток! Проблема такая..... Организовал в lwip (STM32 CUBE) работу через eth - все работает. Одновременно необходимо скидывать данные через gsm - организовал pppos, тоже работает. Для pppos все CRC define в lwipopts.h установил в 1. Переключаюсь с (eth) на (pppos) через netif_set_default(...) Периодически требуется пинговать контроллер через eth. Контроллер не пингуется. Добрался до функции в ethernetif.c low_level_output(). В нее пакет-ответ пинга поступает с правильной контрольной суммой. Передается в ДМА и на компе вайршарком в пакете вижу CRC=0. Т.е. в буфере до HAL_ETH_TransmitFrame(&heth, framelength); пакет с правильным CRC, а в полученном пакете CRC=0. Но этого мало, после нескольких пингований устройства pppos перестает работать. Т.е. функция netconn_bind(conn, netif_ip4_addr(ppp_netif(ppp)), 4555); возвращает ошибку ERR_TIMEOUT. Подскажите где, что , куда посмотреть!? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 24 января, 2020 Опубликовано 24 января, 2020 · Жалоба 1 час назад, bolmoe сказал: Передается в ДМА и на компе вайршарком в пакете вижу CRC=0 У вас включен аппаратный расчет контрольной суммы в MAC. Надо что-то одно - или аппаратный в MAC, или программный в lwIP. Можно сделать так, чтобы программно считался для pppos, а аппаратно - для MAC. Для этого надо установить в 1 define LWIP_CHECKSUM_CTRL_PER_NETIF, включить программный подсчет (CHECKSUM_GEN_xxx, CHECKSUM_CHECK_xxx) и после инициализации интерфейса, работающего через MAC, отключить для него программный подсчет при помощи макроса NETIF_SET_CHECKSUM_CTRL(&NetIF, NETIF_CHECKSUM_DISABLE_ALL); 1 час назад, bolmoe сказал: Но этого мало, после нескольких пингований устройства pppos перестает работать Думаю, это вещи никак не связанные. Смотрите свою реализацию драйвера модема. Возможно, ваш оператор разрывает неактивное соединение, а вы некорректно это обрабатываете. Включайте вывод отладочной информации и штудируйте ее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bolmoe 0 24 января, 2020 Опубликовано 24 января, 2020 · Жалоба Спасибо за совет! Попробовал, netconn_bind() для pppos стало возвращать /** Address in use. */ ERR_USE = -8 Драйвер для модема ошибок не возвращает. netconn_bind() начинает возвращать ошибку, только после пинга по ETH Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться