Перейти к содержанию
    

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.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 перестает работать

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...