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

 
 
 
Reply to this topicStart new topic
> 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
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
zltigo
сообщение Feb 4 2016, 18:58
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (kolobok0 @ Feb 4 2016, 18:11) *
в TCP.... нет пакетов, от слова совсем. Это потоковый протокол.

Запредельный бред.




--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 4 2016, 19:52
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(zltigo @ Feb 4 2016, 21:58) *
в TCP.... нет пакетов, от слова совсем. Это потоковый протокол.

Запредельный бред.


Опа! Каждый день узнаю что-то новое biggrin.gif

Цитата(VHEMaster @ Feb 4 2016, 18:26) *
Т.е. если он получит 15-20 пакетов, то всё. Всякая связь с контроллером по Ethernet пропадает. Даже нет ответов на PING.

МК был не стм, но было такое дело, в сетевом контроллере был циклический буфер на 10 или 20 пакетов, переключение буферов автоматом, но когда все заполнено, нужно было перевести адрес на 1й буфер, чтоб процесс повторялся, так для этого нужно было использовать прерывание, а я про него забыл, и тоже, принимал эти 10-20 пакетов, потом кранты - ничего не принимает!
Может не ваш случай, но вспомнилось похожее...
Go to the top of the page
 
+Quote Post
VHEMaster
сообщение Feb 4 2016, 20:19
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 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
adnega
сообщение Feb 4 2016, 20:25
Сообщение #10


Гуру
******

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



Цитата(VHEMaster @ Feb 4 2016, 23:19) *
А в какой именно момент нужно вставлять этот фрагмент?

Когда пакет нужно отправить. Все куда надо заносим, а после этого выполняем этот фрагмент.
Go to the top of the page
 
+Quote Post
VHEMaster
сообщение Feb 4 2016, 23:45
Сообщение #11


Участник
*

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



Проблема решилась. Дело в том, что я лез туда, куда не нужно было. Вместо tcp.h я начал использовать sockets.h и всё стало работать хорошо.
Go to the top of the page
 
+Quote Post

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

 


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


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