Jump to content

    

stm32f407+lwip+eth+pppos

Доброго времени суток!

Проблема такая.....

Организовал в 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.

Подскажите где, что , куда посмотреть!?

 

Share this post


Link to post
Share on other sites
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 перестает работать

Думаю, это вещи никак не связанные. Смотрите свою реализацию драйвера модема. Возможно, ваш оператор разрывает неактивное соединение, а вы некорректно это обрабатываете. Включайте вывод отладочной информации и штудируйте ее.

Share this post


Link to post
Share on other sites

Спасибо за совет!

Попробовал, netconn_bind() для  pppos стало возвращать /** Address in use.          */  ERR_USE        = -8

Драйвер для модема ошибок не возвращает. 

netconn_bind() начинает возвращать ошибку, только после пинга по ETH

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this