Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Lwip
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Kot_Schrodingera
Всем привет обывателям форума

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

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

И ещё один вопрос, для получения оптимальной скорости был впилен костыль в виде уменьшения времени вызова timer tmr до 1 ms(TCP_TMR_INTERVAL 1) - как это может повлиять на систему и LWIP, кроме как загрузки цп?
scifi
Кажется, здесь где-то сообщали, что драйвер Ethernet от STM кривой - не учитывает кеши у Cortex-M7.
Kot_Schrodingera
это конечно "приятная новость"
а есть где-нибудь информация, как добавить учитывание кеша?
Kabdim
тык
Забавно что в моем гугле это не искалось. Но на будущее поисковики великая сила.
scifi
Кто-то по недоразумению закинул топик в раздел Linux. Модераторы, не тормозите wacko.gif
Kot_Schrodingera
Вообще, видимо увидели слово Linux
Scifi, Вы были правы, убрал cache заработало, но то что скинул Kabdim, я использовал в ethernet драйвере, единственное я использовал функцию SCB_CleanInvalidateDCache()
Kot_Schrodingera
Но retransmission всё равно возникает
И почему SCB_CleanInvalidateDCache() не помог?
Перенес буферы приёма и передачи, дескрипторы в область DTCM, значительного улучшения не увидел
BioWolf2000
Я правил файл stm32f7xx_hal_eth.c добавляя инструкцию __DSB();


CODE
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;
}

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


Не помогает
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.