Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-дек-10 07:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: 2018-апр-28 15:20 
Не в сети

Зарегистрирован: 2018-янв-19 07:44
Сообщения: 42
Бьюсь весь день - результата ноль. Не выдаётся по Ethernet ничего. Не могу понять чего не хватает. Частоты и режимы выставил, заполняю FIFO - ничего.
Использую оба порта, но пока смотрю на одном (на другом то же самое).
На момент непосредственно перед заполнением FIFO регистры имеют следующее содержимое:
CLOCK_STATUS=0xE
PLL_CONTROL=0x904
HS_CONTROL=0x5
CPU_CLOCK=0x106
ETH_CLOCK=0x79000000
Регистры контроллера после инициализации:
Вложение:
eth.png
eth.png [ 11.27 КБ | Просмотров: 774 ]

Линк есть, PHY работает. В FIFO записываю сначала слово длины пакета в байтах, потом словами пакет, потом слово 0.
Пробовал включать BigEndian, добавлять в FIFO дополнительные данные после пакета - никакого эффекта.
В чём может быть проблема? На морде процессора написано 1510.


Последний раз редактировалось Dimonira 2018-май-08 08:12, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-03 09:59 
Не в сети

Зарегистрирован: 2018-янв-19 07:44
Сообщения: 42
Сегодня смотрел приём. Приём есть, но почему-то кривой. Пакеты в сети смотрю WireShark-ом. В сети вижу пакет NBNS размером 92 байта.
Пакет принимается контроллером. Сначала из FIFO читаю "поле состояния приема пакета", из него получаю размер пакета - 96 байт (вместо 92), далее вычитываю все 96 байт и смотрю содержимое в буфере приёма - первые 4 байта идёт какая-то хрень (видимо, как раз лишние), далее вижу все 92 байта пакета, какими они видны в WireShark.
Откуда взялось лишнее слово, это Errata 0021 что ли? Непонятно где ревизию процессора узнать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-03 13:58 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 194
Откуда: ПКК "Миландр"
Возможно поможет информация отсюда:
Про блок Ethernet - https://startmilandr.ru/doku.php/prog:ethernet:notes
Трафик в PC, сверьте настройки, проект рабочий - https://startmilandr.ru/doku.php/prog:e ... traffic_tx

Ревизию можно узнать по errata, стр. 6 - Сводная таблица ошибок. Столбцы - это год и неделя с которой начат выпуск ревизии. Все что с 36-й недели 2014 года - это вторая ревизия. С этой даты ошибка 0021 ("до 144МГц работать только в линейном режиме") исправлена.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-03 14:03 
Не в сети

Зарегистрирован: 2018-янв-19 07:44
Сообщения: 42
Vasiliy писал(а):
Ревизию можно узнать по errata, стр. 6 - Сводная таблица ошибок. Столбцы - это год и неделя с которой начат выпуск ревизии. Все что с 36-й недели 2014 года - это вторая ревизия. С этой даты ошибка 0021 ("до 144МГц работать только в линейном режиме") исправлена.

У меня на процессоре написано 1510. Значит этой ошибки нет? Тогда не понимаю в чём дело.
Оказывается, хоть я лишнее слово в начале пакета и убрал, первое слово в пакете тоже бывает некорректным 50/50.
Почитаю, может и найду что-нибудь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-04 13:21 
Не в сети

Зарегистрирован: 2018-янв-19 07:44
Сообщения: 42
Vasiliy писал(а):
Возможно поможет информация отсюда:
Трафик в PC, сверьте настройки, проект рабочий - https://startmilandr.ru/doku.php/prog:e ... traffic_tx

Сам проект не запускал (у меня пак для кейла последний, не тот), но процедуры перенёс.
Передача и приём в SPL сделаны по DMA. При попытке передачи зацикливается на ожидании запуска DMA.
А вообще стало ещё хуже, теперь часто отладчик встаёт в произвольном месте, после нескольких раз валится в Hard Fault exception.
Как же я устал бороться с этим процессором...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-04 14:49 
Не в сети

Зарегистрирован: 2018-янв-19 07:44
Сообщения: 42
Vasiliy писал(а):
Трафик в PC, сверьте настройки, проект рабочий - https://startmilandr.ru/doku.php/prog:e ... traffic_tx

Установил требуемый пак, скомпилировал, запустил, проект не работает аналогично: зацикливается на HardFault_Handler.
Что это может означать? Процессор того?
-------------------------------------------------
Оказалось, что ошибка HardFault возникает из-за того, что открыто окно Memory, в котором я задал адрес буфера приёма. Keil пытается его обновлять и, видимо, происходит клинч, который вызывает HardFault. Если уйти с отображения окна на другое окно (другую вкладку), то вроде HardFault не происходит. Пример начал как-то работать, я задал приём широковещательных сообщений, начало что-то приниматься. По крайней мере в приёмном буфере никаких лишних байтов перед началом фрейма нет. На счёт выдачи не понял, вроде что-то должен выдавать, но в WireShark ничего нету.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-04 15:31 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 194
Откуда: ПКК "Миландр"
Чтобы началась выдача необходимо из PC передать в пакете количество ответных фреймов и их длину. Для этого используется программа Ostinato. Чтобы с ней не разбираться, проще модифицировать код, чтобы пакеты слались из МК непрерывно с какой-нибудь задержкой.

Если используется режим с FIFO, то в SPL из офф. пака содержится ошибка. Не вызывается процедура инициализации DMA, который используется в режиме FIFO.

Обновить библиотечные файлы можно отсюда - https://github.com/StartMilandr/Pack_VEx

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-07 15:12 
Не в сети

Зарегистрирован: 2018-янв-19 07:44
Сообщения: 42
Vasiliy писал(а):
Чтобы началась выдача необходимо из PC передать в пакете количество ответных фреймов и их длину. Для этого используется программа Ostinato. Чтобы с ней не разбираться, проще модифицировать код, чтобы пакеты слались из МК непрерывно с какой-нибудь задержкой.

Если используется режим с FIFO, то в SPL из офф. пака содержится ошибка. Не вызывается процедура инициализации DMA, который используется в режиме FIFO.

Обновить библиотечные файлы можно отсюда - https://github.com/StartMilandr/Pack_VEx

Я как раз пытаюсь использовать режим с FIFO. У меня установлен неофициальный пак 1.4.2. Использовал MDR32F9Qx_eth из примера 3.1-Ethernet_TrafficTX-master, которые якобы исправлены (для DMA что-то добавлено). Ничего не вышло - при приёме фрейма висит на ожидании запуска DMA.
Попробовал заменить MDR32F9Qx_eth на немного отличающиеся из Pack_VEx (там два канала DMA зачем-то), но поведение то же самое.
Про DMA я пока не изучал, видимо теперь придётся. Не знаю что ещё не хватает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-07 15:32 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 194
Откуда: ПКК "Миландр"
Проект уже запускали не раз, обычно работает.

Буферы для DMA расположены в области памяти 0х20100000 (задается скаттер файлом)?
Подробнее тут - https://startmilandr.ru/doku.php/prog:d ... %B53%D1%82

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-07 16:25 
Не в сети

Зарегистрирован: 2018-янв-19 07:44
Сообщения: 42
Vasiliy писал(а):
Проект уже запускали не раз, обычно работает.

Буферы для DMA расположены в области памяти 0х20100000 (задается скаттер файлом)?
Подробнее тут, параграф "Буферы и скаттер-файл" - https://startmilandr.ru/doku.php/prog:dma:dma_spi_txrx

Нашёл ошибку! При внимательном чтении исходников SPL про DMA, выяснилось, что надо было в скаттер файле оставить именно название "EXECUTABLE_MEMORY_SECTION".
А то я поменял, сделал покороче. Как говорится, лучшее - враг хорошего. Оказалось, что это жёстко вписано в исходники. Приём заработал правильно! Передачу ещё не пробовал.
Ещё я добавил строчку в конец функции ETH_DMAPrepare() в файле MDR32F9Qx_eth.c (из папки BugFix примера 3.1-Ethernet_TrafficTX-master):
Код:
DMA_Init(DMA_Channel_SW2, &DMA_InitStr);

Не знаю, почему её там не было (где-то я её видел), ведь DMA_Channel_SW2 используется как раз при передаче.
Осталось понять назначение следующих дефайнов из MDR32F9Qx_config.h:
DMA_Channels_Number (задано 32) и DMA_AlternateData (задано 1, т.е. DMA_AlternateDataEnabled)
Что надо задать, если у меня пока DMA только на приём и передачу по Ethernet?

ЗЫ. Оказалось, что для того, чтобы в Keil окно Memory не влияло на выполнение под отладчиком, надо нажать кнопку с замочком, чтобы замок закрылся а информация в окне стала disable. После остановки на точке останова снова жму замочек, он открывается и информация безболезненно обновляется. Век живи, век учись :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-07 17:07 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1183
Откуда: Тула
Dimonira писал(а):
ЗЫ. Оказалось, что для того, чтобы в Keil окно Memory не влияло на выполнение под отладчиком, надо нажать кнопку с замочком, чтобы замок закрылся а информация в окне стала disable. После остановки на точке останова снова жму замочек, он открывается и информация безболезненно обновляется. Век живи, век учись :lol:

Хм... Тоже нужно попробовать. Возможно как-то повлияет и на другие спецэффекты viewtopic.php?p=19321#p19321

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не хочет выдавать порт Ethernet
СообщениеДобавлено: 2018-май-08 08:09 
Не в сети

Зарегистрирован: 2018-янв-19 07:44
Сообщения: 42
Передача тоже пошла, хотя и не сразу. Оказалось, что в содержимом фрейма я укладывал свой MAC-адрес неправильно (старшие с младшими наоборот). Вероятно (но не уверен), что поскольку в регистрах контроллера MAC-адрес был указан верно, а в самом фрейме он был наоборот, передача не шла. После перестановки байтов MAC-адреса в фрейме передача пошла. Наконец-то можно проверить работу DHCP.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB