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

помогите правильно приготовить ethernet в GD32F107

Установлен на замену STM32. Через некоторое время обмен останавливается. Программа для STM отлажена.

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


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

1 hour ago, viakon said:

Программа для STM отлажена.

Слишком много избыточной информации, глаза разбегаются. Нужна конкретика.

И сократите эти полотнища кода до вменяемых размеров, чтобы вмещались в пост, пользуйтесь тегом spoiler.

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


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

https://habr.com/ru/post/682172/

Почитайте, описаны некоторые косяки  особенности GD применительно к Ethernet, правда для другой серии, но вдруг поможет.

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


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

читал я эту статью, не мой случай.  на PHY у меня идет 25МГц с MCO и  берется не с PLL, а с тактового генератора. Так что микроконтроллер и PHY должны быть синхронны. И проблема у меня не потере пакетов, а в том что МАС виснет. Устройство пропадает из сети, нет пакетов от него (они генерятся устройством раз в 5 сек), нет пинга, нет приема пакетов на устройстве. Замена на STM32 помогает, все начинает стабильно работать. Т.е. дело именно в GD32.

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


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

А кто вам сказал, что они программно совместимы?

Я не сравнивал конкретно эту модель, но в других довольно много отличий.

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


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

 то что совместимость не 100% это очевидно. Но ведь, какое-то время устройство работает нормально. Потому и прошу помощи от тех кто уже прошел по этим граблям

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


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

похоже встает передача. В таблице дескрипторов на передачу, все заняты. 

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


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

переделал функцию ETH_TxPkt_ChainMode() в соответствии с примером из библиотеки от gigadevice.
 сделал так

Спойлер

/* When Tx Buffer unavailable flag is set: clear it and resume transmission */
  if (ETH->DMASR & (ETH_DMASR_TUS | ETH_DMASR_TBUS))
  {
    /* Clear TBUS ETHERNET DMA flag */
    ETH->DMASR = ETH_DMASR_TUS | ETH_DMASR_TBUS;
    /* Resume DMA transmission*/
    ETH->DMATPDR = 0;
  }

 

раньше анализировался только флаг TBUS, стм-ке этого хватало. Пока тестирую, но вроде помогло

Изменено пользователем viakon

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


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

интересная особенность. на 10мбит DMA останавливается на передачу, на 100мбит по приему. Пока сделал рестарт МАС при возникновении останова. 

Как бы мне только ДМА перезапускать?

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


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

5 часов назад, viakon сказал:

Как бы мне только ДМА перезапускать?

Может лучше разобраться и устранить причины останова? До того, как начинать мастерить костыли...

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


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

В том то и дело что не понятно. останавливается DMA причина не ясна. В DMASR все хорошо, но DMA не работает.

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


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

DMA часто самопроизвольно останавливается из-за:

1. Обращения по недопустимому адресу (за пределами памяти или в область памяти, не поддерживающую DMA (не имеющую соединения с DMA-контроллером в матрице шин)).

2. Невозможности доступа к шине в течение N тактов арбитража (так как шина к этой памяти занята другими bus-masters, а у нашего bus-masters - слишком низкий приоритет).

3. Ухода в сон (режим пониженного потребления) того региона памяти, с которым работает DMA.

4. etc.

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


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

Такое впечатление что GD32 плохо работает с 10мбит полудуплекс. при подключении 100м фулл дуплекс. Передача не останавливается. Пока помимо рабочих пакетов, пингую железку два раза в миллисекунду, отвечает на все пинги

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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