|
STM32F429 + Ethernet PHY DP83484 |
|
|
|
Feb 4 2016, 15:26
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 28-08-15
Пользователь №: 88 191

|
Доброго времени суток! Недавно стал владельцем Ethernet PHY модуля на базе чипа DP83848. Пытаюсь подружить его с STM32F429ZI, но проблема в том, что он не может нормально получать данные.. Т.е. если он получит 15-20 пакетов, то всё. Всякая связь с контроллером по Ethernet пропадает. Даже нет ответов на PING. Я так понимаю, объём полезных данных в TCP пакете равен 536 байт. С пакетами, у которых этот объём занят полностью, такая-же проблема. Т.е. не важно, получает ли он те 15-20 пакетов, в которых инф-и на 1 байт, либо на все 536 байт. Всё равно он повисает. Как я проверял. Я сделал на контроллере сервер, который отправляет клиенту некую строку, а принятые данные выводит в UART. Так вот, как правило после 16-го пакета (или символа, введённого через telnet) связь тут же обрывается. Отладчик показал, что контроллер не уходит в исключение, а основной поток работает дальше. Архив с проектом: http://rghost.ru/7vtTz7bYCВот скриншот: http://s018.radikal.ru/i519/1602/53/66fd8ee63bae.pngКстати, точно такая-же беда и в режиме клиента, когда он подключается к какому-либо HTTP серверу и начинает брать данные.
Сообщение отредактировал VHEMaster - Feb 4 2016, 15:28
|
|
|
|
|
 |
Ответов
|
Feb 4 2016, 16:11
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(VHEMaster @ Feb 4 2016, 18:26)  ...Я так понимаю, объём полезных данных в TCP пакете равен 536 байт.... не правильно понимаете. в TCP.... нет пакетов, от слова совсем. Это потоковый протокол. и второе. вы можете без проблем сформировать с успехом! IP пакет в 65535 байт, передать его по сети, и даже принять его! И даже без взведения флага запрета дефрагментирования. Т.е. сам протокол IP это позволяет. Для бОльшей продуктивности, обычно все хопы имеют дефолтное ограничение в 1500 байт на уровне IP. Т.е. если Вы зашлёте максимум - то он тупо будет порезан на указанную размерность. возвращаясь к баранам. Вам нужно проверить так называемый слой драйвера(то что обрабатывает прерывание от ПДП буфера приёма) и код выделения памяти. Роющаяся собака - где то там  (круглый)
|
|
|
|
|
Feb 4 2016, 16:16
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 28-08-15
Пользователь №: 88 191

|
Цитата(kolobok0 @ Feb 4 2016, 18:11)  Вам нужно проверить так называемый слой драйвера(то что обрабатывает прерывание от ПДП буфера приёма) и код выделения памяти. В каком файле примерно искать?.. Можете помочь с этим? UPD: методом тыка выяснил, что перестаёт идти прерывание от ETH... Почему?....
Сообщение отредактировал VHEMaster - Feb 4 2016, 16:31
|
|
|
|
|
Feb 4 2016, 18:51
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(scifi @ Feb 4 2016, 21:34)  Всё, расходимся. Это универсальный ответ.  У меня бывало машина состояний передачи останавливалась. Лечу так: Код while(ETH->DMASR & ETH_DMASR_TBUS) { ETH->DMASR = ETH_DMASR_TBUS; ETH->DMATPDR = 0; } Но у ТС, вроде, прием ломается. В любом случае - начинаем с ETH->DMASR.
|
|
|
|
|
Feb 4 2016, 20:19
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 28-08-15
Пользователь №: 88 191

|
Цитата(adnega @ Feb 4 2016, 20:51)  Лечу так: Код while(ETH->DMASR & ETH_DMASR_TBUS) { ETH->DMASR = ETH_DMASR_TBUS; ETH->DMATPDR = 0; } А в какой именно момент нужно вставлять этот фрагмент?
|
|
|
|
Сообщений в этой теме
VHEMaster STM32F429 + Ethernet PHY DP83484 Feb 4 2016, 15:26      adnega Цитата(VHEMaster @ Feb 4 2016, 23:19) А в... Feb 4 2016, 20:25       VHEMaster Проблема решилась. Дело в том, что я лез туда, куд... Feb 4 2016, 23:45 zltigo QUOTE (kolobok0 @ Feb 4 2016, 18:11) в TC... Feb 4 2016, 18:58  mantech Цитата(zltigo @ Feb 4 2016, 21:58) в TCP.... Feb 4 2016, 19:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|