Перейти к содержанию
    

Настройка Ethernet для GD32F407 на основе проекта STM32

Добрый день!

Столкнулся с проблемой переноса проекта STM32 с драйвером Ethernet на основе HAL библиотек под GD32F407. Физический уровень настраивается нормально, Link есть, скорость могу переключать программно, но при попытке пингануть устройство ответа нет. На стороне контроллера вообще тишина, данные в буфер не попадают. В проекте настроен прием с использованием DMA. Может кто подскажет, какие есть отличия в настройках драйвера для GD32 от STM32? Или кто-то может поделиться рабочим вариантом драйвера на основе HAL библиотеки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для GD32F450 нужно было выключать аппаратную проверку контрольной суммы входящих пакетов (описано в errata), возможно для GD32F407 так же.

Стек FreeRTOS-Plus-TCP работал нормально на GD32F450, если взять за основу прокладку для STM32 между аппаратной частью и библиотекой и чуток доработать.

Прокладка между стеком FreeRTOS-Plus-TCP и периферийной библиотекой от GD. Вариант реализации zero copy драйвера.

NetworkInterface.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, deni сказал:

Для GD32F450 нужно было выключать аппаратную проверку контрольной суммы входящих пакетов (описано в errata), возможно для GD32F407 так же.

Стек FreeRTOS-Plus-TCP работал нормально на GD32F450, если взять за основу прокладку для STM32 между аппаратной частью и библиотекой и чуток доработать.

Прокладка между стеком FreeRTOS-Plus-TCP и периферийной библиотекой от GD. Вариант реализации zero copy драйвера.

NetworkInterface.zip 26.87 кБ · 1 загрузка

Спасибо, посмотрю и поэкспериментирую с настройками! У меня правда проект без ОС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день, deni спасибо большое за выложенный порт. Попробовал применить его (использую GD32F470, MII, внешний кварц, DP83848), изменений не вносил (тестировал как с ipconfigZERO_COPY_RX_DRIVER 1, ipconfigZERO_COPY_TX_DRIVER 1, так и без них). Однако столкнулся с проблемой, следующего характера: ping хаотично то есть, но нет. Тестировал на UDP пакетах, также пакеты теряются в хаотичном порядке (может пакетов 20 пропустить, т.е. не связанно с ошибкой расчёта контрольной суммы, далее передаются без потерь, потом вновь может пропустить N-кол-во пакетов) при этом ответ на ping может отсутствовать в то время когда upd пакеты передаются нормально. Возможно, не всё верно настраиваю enet_system_setup() - разрешаю ENET_IRQ, настраиваю gpio, и инициализирую:  enet_init_status = enet_init(ENET_AUTO_NEGOTIATION, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_BROADCAST_FRAMES_PASS) (с флагом ENET_NO_AUTOCHECKSUM разницы в работе не было).  Наблюдалось ли у вас подобное поведение? Или можете поделиться своей версией enet_system_setup?   

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...