Цитата(kolobok0 @ Apr 24 2015, 15:53)

как Вы контролируете что передача происходит? Проверяли ли отладчиком
обработку прерывания передатчика(окончания передачи ПДП)? Там всё корректно? Как Вы отрабатываете сборку DMA отработанных
сегментов? Там всё корректно(возвращается ли память обратно в свободный пул, корректна ли обработка нехватка памяти и нет ли
зависимости обработчика прерывания от тяжёлых функций)? В своё время меня не устроил обработчик по умолчанию - дюже тяжёл был.
Смотрю отправку в:
Код
/* When Tx Buffer unavailable flag is set: clear it and resume transmission */
if ((ETH->DMASR & ETH_DMASR_TBUS) != (u32)RESET)
{
/* Clear TBUS ETHERNET DMA flag */
ETH->DMASR |= ETH_DMASR_TBUS;
/* Resume DMA transmission*/
ETH->DMATPDR = 0;
}
После старта, без появления глюка, данные отправляются сразу после
ETH->DMATPDR = 0;, как и должно.
После проявления глюка, светодиод на разъеме LAN так же "моргает" после записи нуля в DMATPDR, т.е. что-то через физику уходит.
В регистре DMASR, разницы с проявлением глюка - не вижу.
Биты TPS, NIS, ETS выставляются так же.
в MMCTGFCR (
transmitted good frames counter register) после записи DMATPDR счет так же увеличивается ...
Честно говоря уже голову сломал, больше недели потратил - результат пока нулевой (
Думаю стек и драйвер от st не при делах.
Сверял все указатели непосредственно в регистре DMA, указатели на дескрипторы и их содержимое, на буфер Tx, все верно и не отличается от работы до появления этого глюка.
Думаю если создать свой буфер с дескриптором (да заполнить константами) и подцепить к DMA вместо буфера из стека, наверняка получится то же самое ...
Уже и Errata на STM32F429 пересмотрел, ничего похожего не нашел, что не удивительно.