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

Всем привет обывателям форума

 

Имеется stm32f7, прикручен lwip

Идет постоянный обмен с железкой(на железке поднят linux)

При подключении через хаб, всё работает более или менее, но когда подключено "точка-точка" начинают сыпаться сообщения об retransmission.(Если кому понадобиться могу скинуть dump)

Из dump видно, что теряется пакет, отсюда вопрос, как его можно отследить на stm32?

 

При включении debug сыпется много сообщений, так как на сообщения тратиться время, retransmission пропадает, то есть по моим выводам lwip или драйвер eth не успевает что-либо делать

 

И ещё один вопрос, для получения оптимальной скорости был впилен костыль в виде уменьшения времени вызова timer tmr до 1 ms(TCP_TMR_INTERVAL 1) - как это может повлиять на систему и LWIP, кроме как загрузки цп?

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


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

Кажется, здесь где-то сообщали, что драйвер Ethernet от STM кривой - не учитывает кеши у Cortex-M7.

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


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

это конечно "приятная новость"

а есть где-нибудь информация, как добавить учитывание кеша?

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


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

тык

Забавно что в моем гугле это не искалось. Но на будущее поисковики великая сила.

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


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

Вообще, видимо увидели слово Linux

Scifi, Вы были правы, убрал cache заработало, но то что скинул Kabdim, я использовал в ethernet драйвере, единственное я использовал функцию SCB_CleanInvalidateDCache()

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


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

Но retransmission всё равно возникает

И почему SCB_CleanInvalidateDCache() не помог?

Перенес буферы приёма и передачи, дескрипторы в область DTCM, значительного улучшения не увидел

Изменено пользователем Kot_Schrodingera

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


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

Я правил файл stm32f7xx_hal_eth.c добавляя инструкцию __DSB();

 

 

      heth->TxDesc = (ETH_DMADescTypeDef *)(heth->TxDesc->Buffer2NextDescAddr);
   }
 }

//////////////////////
  __DSB();

/////////////////////

 /* When Tx Buffer unavailable flag is set: clear it and resume transmission */
 if (((heth->Instance)->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET)
 {
   /* Clear TBUS ETHERNET DMA flag */
   (heth->Instance)->DMASR = ETH_DMASR_TBUS;
   /* Resume DMA transmission*/
   (heth->Instance)->DMATPDR = 0;
 }

 

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


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

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

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

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

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

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

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

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

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

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