реклама на сайте
подробности

 
 
> STM32F429 + Ethernet PHY DP83484
VHEMaster
сообщение Feb 4 2016, 15:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobok0
сообщение Feb 4 2016, 16:11
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(VHEMaster @ Feb 4 2016, 18:26) *
...Я так понимаю, объём полезных данных в TCP пакете равен 536 байт....


не правильно понимаете.
в TCP.... нет пакетов, от слова совсем. Это потоковый протокол.
и второе. вы можете без проблем сформировать с успехом! IP пакет в 65535 байт, передать его по сети, и даже принять его! И даже без взведения флага
запрета дефрагментирования. Т.е. сам протокол IP это позволяет. Для бОльшей продуктивности, обычно все хопы имеют дефолтное ограничение в
1500 байт на уровне IP. Т.е. если Вы зашлёте максимум - то он тупо будет порезан на указанную размерность.

возвращаясь к баранам.
Вам нужно проверить так называемый слой драйвера(то что обрабатывает прерывание от ПДП буфера приёма) и код выделения памяти.
Роющаяся собака - где то там sm.gif

(круглый)
Go to the top of the page
 
+Quote Post
VHEMaster
сообщение Feb 4 2016, 16:16
Сообщение #3


Участник
*

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



Цитата(kolobok0 @ Feb 4 2016, 18:11) *
Вам нужно проверить так называемый слой драйвера(то что обрабатывает прерывание от ПДП буфера приёма) и код выделения памяти.


В каком файле примерно искать?.. Можете помочь с этим?

UPD: методом тыка выяснил, что перестаёт идти прерывание от ETH... Почему?....

Сообщение отредактировал VHEMaster - Feb 4 2016, 16:31
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 4 2016, 17:47
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(VHEMaster @ Feb 4 2016, 19:16) *
UPD: методом тыка выяснил, что перестаёт идти прерывание от ETH... Почему?....

Вы ждете, что люди вам ответят? - Исчерпывающая информация находится в регистрах МК.
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 4 2016, 18:34
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(adnega @ Feb 4 2016, 20:47) *
Вы ждете, что люди вам ответят? - Исчерпывающая информация находится в регистрах МК.

Всё, расходимся.
Это универсальный ответ.
laughing.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 4 2016, 18:51
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(scifi @ Feb 4 2016, 21:34) *
Всё, расходимся.
Это универсальный ответ.
laughing.gif

У меня бывало машина состояний передачи останавливалась. Лечу так:
Код
while(ETH->DMASR & ETH_DMASR_TBUS)
{
    ETH->DMASR    = ETH_DMASR_TBUS;
    ETH->DMATPDR  = 0;
}

Но у ТС, вроде, прием ломается.
В любом случае - начинаем с ETH->DMASR.
Go to the top of the page
 
+Quote Post
VHEMaster
сообщение Feb 4 2016, 20:19
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 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;
}


А в какой именно момент нужно вставлять этот фрагмент?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016