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

Checksum GD32f107 Ethernet LWIP

Коллеги подскажите.. использую стек LWIP на GD32f107. заметил такую особенность..

выставляю софтварный расчет контрольной суммы принятого ТСП пакета.

в результате нет ни пинга не соединения по ТСП..

в чем проблема??

где то читал, что GD чипы глючат при расчете хардварно -  контрольную сумму пакета..

так вот если выставить расчет кс хардварно - то из 10000 пакетов 1 таки битый

 

 

 

 

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


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

А в самом стеке то контролька считается? 

ethernetif_input() вызывается?

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


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

Найти не могу, где реализовано в стеке софтварный расчет КС.

 

да, вызывается, она стоит в теле:

void MX_LWIP_Process(void)
{
/* USER CODE BEGIN 4_1 */
/* USER CODE END 4_1 */
  ethernetif_input(&gnetif);

 

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


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

1 час назад, BALDA сказал:

Найти не могу, где реализовано в стеке софтварный расчет КС.

у меня в lwipopts.h стоит такое:

Спойлер

/*
   --------------------------------------
   ---------- Checksum options ----------
   --------------------------------------
*/
/*
The STM32 allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
 - To use this feature let the following define uncommented.
 - To disable it and process by CPU comment the  the checksum.
*/
#define CHECKSUM_BY_HARDWARE

#ifdef CHECKSUM_BY_HARDWARE
  /* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
  #define CHECKSUM_GEN_IP           0
  /* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
  #define CHECKSUM_GEN_UDP          0
  /* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
  #define CHECKSUM_GEN_TCP          0
  /* CHECKSUM_GEN_ICMP==0: Generate checksums by hardware for outgoing ICMP packets.*/
  #define CHECKSUM_GEN_ICMP         0
  /* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
  #define CHECKSUM_CHECK_IP         0
  /* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
  #define CHECKSUM_CHECK_UDP        0
  /* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
  #define CHECKSUM_CHECK_TCP        0
  /* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
  #define CHECKSUM_CHECK_ICMP       0
  /* CHECKSUM_CHECK_ICMP6==1: Check checksums in software for incoming ICMPv6 packets*/
  #define CHECKSUM_CHECK_ICMP6      0
#else
  /* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
  #define CHECKSUM_GEN_IP           1
  /* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
  #define CHECKSUM_GEN_UDP          1
  /* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
  #define CHECKSUM_GEN_TCP          1
  /* CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets.*/
  #define CHECKSUM_GEN_ICMP         1
  /* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
  #define CHECKSUM_CHECK_IP         1
  /* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
  #define CHECKSUM_CHECK_UDP        1
  /* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
  #define CHECKSUM_CHECK_TCP        1
  /* CHECKSUM_CHECK_ICMP==1: Check checksums in software for incoming ICMP packets.*/
  #define CHECKSUM_CHECK_ICMP       1
  /* CHECKSUM_CHECK_ICMP6==1: Check checksums in software for incoming ICMPv6 packets*/
  #define CHECKSUM_CHECK_ICMP6      1
#endif

Дальше ищите в исходниках "CHECKSUM_GEN" и "CHECKSUM_CHECK".

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

Изменено пользователем Сергей Борщ
пропал исходник

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


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

On 2/27/2024 at 12:17 PM, Сергей Борщ said:

у меня в lwipopts.h стоит такое:

Вы забыли вставить какое ))

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


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

4 минуты назад, dimka76 сказал:

Вы забыли вставить какое ))

Вставлял. Но когда оборачивал в сворачиваемую форму оно потерялось. Исправил.

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


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

В 27.02.2024 в 12:17, Сергей Борщ сказал:

у меня в lwipopts.h стоит такое:

Дальше ищите в исходниках "CHECKSUM_GEN" и "CHECKSUM_CHECK".И не забывайте, что может работать или одно, или другое. То есть если вы включаете программный подсчет, то аппаратный обязаны выключить и наоборот.

 

Спасибо дружище - помогло - пинг пошел.

"CHECKSUM_GEN" и "CHECKSUM_CHECK" - это вроде не пригодилось..

TCP, UDP, принимаются- отправляются - понаблюдаю денек разницу с хардварной КС.

 

/*----- Value in opt.h for CHECKSUM_GEN_IP: 1 -----*/
#define CHECKSUM_GEN_IP 1
/*----- Value in opt.h for CHECKSUM_GEN_UDP: 1 -----*/
#define CHECKSUM_GEN_UDP 1
/*----- Value in opt.h for CHECKSUM_GEN_TCP: 1 -----*/
#define CHECKSUM_GEN_TCP 1
/*----- Value in opt.h for CHECKSUM_GEN_ICMP: 1 -----*/
#define CHECKSUM_GEN_ICMP 1
/*----- Value in opt.h for CHECKSUM_GEN_ICMP6: 1 -----*/
#define CHECKSUM_GEN_ICMP6 1
/*----- Value in opt.h for CHECKSUM_CHECK_IP: 1 -----*/
#define CHECKSUM_CHECK_IP 1
/*----- Value in opt.h for CHECKSUM_CHECK_UDP: 1 -----*/
#define CHECKSUM_CHECK_UDP 1
/*----- Value in opt.h for CHECKSUM_CHECK_TCP: 1 -----*/
#define CHECKSUM_CHECK_TCP 1
/*----- Value in opt.h for CHECKSUM_CHECK_ICMP: 1 -----*/
#define CHECKSUM_CHECK_ICMP 1
/*----- Value in opt.h for CHECKSUM_CHECK_ICMP6: 1 -----*/
#define CHECKSUM_CHECK_ICMP6 1
/*-----------------------------------------------------------------------------*/

 

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


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

Коллеги, правильно ли я понял , при хардварном подсчете контрольной суммы эти настройки не имеют значения?

что 0 что 1 при любом раскладе?

 

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


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

Да если речь о IP семействе, но! Не понятно как это будет работать в случае CRC Ethernet фрейма. Согласно документации Ethr CRC добавляется к пакету, т.е. если там будет уже CRC он и её посчитает.

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


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

не понял, о каком CRC речь, какой то вне заголовков IP, TCPv4?

поробую поставить родной STM.. не ужели так все плохо у этих GD...

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


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

да точно так же как и у всех.
Может стоит подтянуть матчасть, так сказать... Что такое Ethernet фрейм и что такой пакет и какие там CRC, а их там много, даже в одном фрейме

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


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

а что там подтягивать 16 бит в ип пакете и 16 бит в тсп

просвятите  если я не прав??

(может реально я за 20 лет чегото забыл?)

 

 

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


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

Это который в самом конце??

Lwip обрабатывает его? Имею ввиду опции приведенные выше?

Я так понял, что эти опции затрагивает только контр суммы заголовков

Ip tcp, udp...

 

В 01.03.2024 в 13:44, BALDA сказал:

 

поробую поставить родной STM.. не ужели так все плохо у этих GD...

Поставил вместо GD- STM, все как рукой сняло.. все эти танцы с бубном..

Причем и софтварный и хардварный метод.

Что ж за ешкин кот...

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


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

21 hours ago, BALDA said:

Lwip обрабатывает его? Имею ввиду опции приведенные выше?

Боже ш ты мой.. А в чём проблема взять и посмотреть? Open Source же... 
В "штатном" понимании считается, что железка сама посчитает CRC эзернет фрейма. Но никто не запрещает этого делать софтово в рамках метода netif->linkoutput()
 

21 hours ago, BALDA said:

Поставил вместо GD- STM, все как рукой сняло.. все эти танцы с бубном..

Я надеюсь не просто заменил проц, но и пересобрал код и перенастроил периферию? 

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


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

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

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

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

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

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

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

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

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

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