Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 147 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10
Автор Сообщение
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-апр-22 15:58 
Не в сети

Зарегистрирован: 2018-апр-17 16:34
Сообщения: 9
Добрый день!
Корячусь тут с Ethernet модулем :? и возникли вопросы:
1. При включенном Ethernet модуле какое потребление должно быть у контроллера ? у меня набегает 220 мА с учетом светодиодов на разъеме. (а общее динамическое потребление по дате 300 мА, получается остальные периферийные модули модули особо не по включаешь)
2. Пока оживил Ethernet с помощью базового примера из PACKа ...PACK\Keil\MDR1986BExx\1.51\Examples\MDR1986VE1T\Ethernet... может кто нибудь поделиться устойчиво работающим примером для работы по TCP/IP, именно в части приема и отправки пакетов данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-апр-22 17:04 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
FRIZ писал(а):
Добрый день!
Корячусь тут с Ethernet модулем :? и возникли вопросы:
1. При включенном Ethernet модуле какое потребление должно быть у контроллера ? у меня набегает 220 мА с учетом светодиодов на разъеме. (а общее динамическое потребление по дате 300 мА, получается остальные периферийные модули модули особо не по включаешь)

220 мА - это МК + Eth PHY, который запитывается отдельно или только сам МК?
У меня ~120..~130 мА при работающих Ethernet, SPI, EBC, DMA, RTC, обычном таймере и нескольких GPIO на частоте 144 МГц.
Но это без потребления Eth PHY.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-апр-23 08:51 
Не в сети

Зарегистрирован: 2018-апр-17 16:34
Сообщения: 9
Dmitry_S писал(а):
220 мА - это МК + Eth PHY, который запитывается отдельно или только сам МК?
У меня ~120..~130 мА при работающих Ethernet, SPI, EBC, DMA, RTC, обычном таймере и нескольких GPIO на частоте 144 МГц.
Но это без потребления Eth PHY.


220мА это МК + разъем с трансформаторами. У меня все питается от одного источника вторичного питания и потребление на нем выходит именно такое, а на платке кроме МК и штыревых разъемов больше ничего нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-июл-21 10:27 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 32
Завел стек lwip под freertos, наблюдаю интересную картину. При прошивке и запуске через отладчик J-Link EDU (причем необязательно в IDE, достаточно прошить любой утилитой, тем же J-Flash Lite) программа стартует и работает, причем надежно. Тестировал несколько часов (пока просто пинги, чтобы проверить работу с Ethernet на низком уровне), все нормально и надежно, связь не отваливается. Но стоит выключить питание, отключить J-Link (или не отключать, просто сделать ресет), проходит только 3-4 пинга, после чего сеть падает и больше не пингуется.

При этом остальная часть программы работает - в фоновой задаче DMA гоняет туда-сюда маленький буфер с данными, потом проверяется правильность копирования данных и зажигается/гасится светодиод. При приеме Ethernet-пакетов DMA не используется - работа идет в линейном режиме.

Сначала подумал, что влияют значения в регистре MDR_ETHERNET1->G_CFGl: DBG_mode = 11, DBG_XF_EN = DBG_RF_EN = 1. Сбросил в 0 при инициализации, ничего не поменялось.

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

UPD
Полная непонятка. Дошло до того, что если в утилите J-Link Commander сделать connect, потом дать команду r (reset и halt), а потом g (go) - тоже все работает. А вот если нажать ресет кнопкой - глючит. ??? Платы LDM-HELPER-MB501 + LDM-HELPER-K1986VE1QI
Еще заметил (как симптом), при работе без отладчика винда как-то больше гадит в сеть, хотя казалось бы, где тут логика...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-июл-21 22:16 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 104
Убедитесь, что в своей программе подали тактирование на все используемые периферийные блоки в регистре MDR_RST_CLK->PER_CLOCK. Отладчик при программировании может включать тактирование, а ваша программа нет. Тогда будет наблюдаться ситуация, что с отладчиком все работает, а без него нет. Похожа на вашу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-июл-22 12:50 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 455
Откуда: ПКК "Миландр"
Попробуйте вставить задержку перед инициализацией PHY. После сброса ему необходимо порядка 16мс для выхода в рабочий режим. Когда загружается отладчик, то возможно он обеспечивает достаточную задержку.

Еще, как и сказал Professor Chaos, FLM включает тактирование всех блоков, что тоже составляет некоторую разницу в отличие от обычного запуска:
Код:
int Init (unsigned long adr, unsigned long clk, unsigned long fnc)
{

  PER_CLOCK = 0xFFFFFFFF;
  CPU_CLOCK&=~(1<<8); 
  return (0);
}

Для отладки можно попробовать сделать тоже самое.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-июл-22 15:20 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 32
С тактированием все в порядке, все перепроверил.
Vasiliy писал(а):
Попробуйте вставить задержку перед инициализацией PHY.

У меня инициализация Ethernet начинается с настройки регистра MDR_RST_CLK->ETH_CLOCK. Затем MDR_ETHERNET1->PHY_Control, затем ожидаю бита Ready в регистре PHY_Status:
Код:
while ((MDR_ETHERNET1->PHY_Status & ETH_PHY_STATUS_READY) == 0);

Добавил между инициализацией ETH_CLOCK и PHY_Control задержку на 2500000 тактов (с запасом) - вроде заработало без отладчика, сижу тестирую. Благодарю за помощь!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-июл-24 22:25 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 32
Дополнительно обнаружил, что если писать в регистр PHY_Control режим работы MODE[2:0] одновременно с записью бита nRST и адреса PHYADD[4:0], модуль сбоит аналогичным образом - первые несколько пакетов проходят нормально, затем связь обрывается намертво.

А если сначала записать nRST и PHYADD[4:0], а следующей операцией - режим работы MODE[2:0], то работа интерфейса в выбранном режиме устойчивая. Это связано с описанием бита Reset в внутреннего регистра 0 (основного регистра управления) PHY в таблице 482 на стр. 400 ("Рекомендуется не изменять остальные биты данного регистра во время его установки.")?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-июл-25 09:41 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 455
Откуда: ПКК "Миландр"
Довольно часто блоки (и не только наши) требуют сначала настройки, а только потом перехода в активный режим. Потому что при включении на линию, как например с битом nRST, блок PHY уже должен отработать все заданные в него настройки. Надо представлять, что не всегда блок может за один такт и включиться и настроить в себе что-то. При переходе в рабочий режим блок PHY уже должен ток вырабатывать на трансформаторы, начинать посылать импульсы, когда ему настраивать дуплексность и прочие режимы работы? Таких нюансов инициализации может быть множество, все не опишешь. Поэтому нами предоставляется библиотека SPL, в которой авторы уже набили все шишки и предложили рабочий код, который запускает блок Ethernet "правильно".

С нашей стороны есть рекомендация, проводить моделирование функционала сначала с помощью библиотеки, чтобы убедиться что задача решается. А затем проводить оптимизацию, или писать свою реализацию работы с блоком. При реализации своего кода работы с блоками необходимо ориентироваться на реализацию в SPL, либо на примеры которые есть на форуме и которые работают с блоком на регистровом уровне.

С битом "Reset в внутреннего регистра 0" ситуация аналогичная, необходимо задуматься о том, что будет делать блок, если ему пришло сразу две команды: одна Reset- сброситься, вторая - выставить биты. На мой взгляд биты Reset и Enable всегда необходимо ставить отдельно, может быть за редким исключением.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-ноя-05 15:57 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 32
Что реально обозначает флаг ETH_PHY_FLAG_CARRIER_SENSE в регистре PHY_Status (по спецификации бит 2 - LED2)? Чем от него отличается флаг ETH_PHY_FLAG_CRS (бит 5 - CRS) - только инверсией или чем-то еще? Его чтение вообще не дает никакого результата.

В основном цикле программы опрашиваю флаг ETH_PHY_FLAG_CARRIER_SENSE с периодом примерно 20 мс, чтобы вывести на индикатор сетевого обмена (светодиод). Наблюдаю следующее поведение:
1. При скорости 10 Мбит/с данный флаг ведет себя в соответствии с тем, что ожидается - сбрасывается и при приеме, и при передаче пакетов.
2. При скорости 100 Мбит/с поведение отличается - флаг правильно отображает состояние при приеме пакетов (например, пинги) и никак не отображает передачу пакетов. Я понимаю, что передача одиночных пакетов на такой скорости занимает очень малое время, за которое опросить флаг можно не успеть, но правильно отображать заведомо более мелкие входящие пакеты это почему-то не мешает.

Передача ведется непрерывно в обоих случаях. От настроек full-duplex/half-duplex поведение не зависит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-ноя-06 16:11 
Не в сети

Зарегистрирован: 2017-май-31 15:10
Сообщения: 50
Откуда: АО "ПКК Миландр"
_Desh_ писал(а):
Что реально обозначает флаг ETH_PHY_FLAG_CARRIER_SENSE в регистре PHY_Status (по спецификации бит 2 - LED2)? Чем от него отличается флаг ETH_PHY_FLAG_CRS (бит 5 - CRS) - только инверсией или чем-то еще? Его чтение вообще не дает никакого результата.

В основном цикле программы опрашиваю флаг ETH_PHY_FLAG_CARRIER_SENSE с периодом примерно 20 мс, чтобы вывести на индикатор сетевого обмена (светодиод). Наблюдаю следующее поведение:
1. При скорости 10 Мбит/с данный флаг ведет себя в соответствии с тем, что ожидается - сбрасывается и при приеме, и при передаче пакетов.
2. При скорости 100 Мбит/с поведение отличается - флаг правильно отображает состояние при приеме пакетов (например, пинги) и никак не отображает передачу пакетов. Я понимаю, что передача одиночных пакетов на такой скорости занимает очень малое время, за которое опросить флаг можно не успеть, но правильно отображать заведомо более мелкие входящие пакеты это почему-то не мешает.

Передача ведется непрерывно в обоих случаях. От настроек full-duplex/half-duplex поведение не зависит.

ETH_PHY_FLAG_CRS - сам флаг, а ETH_PHY_FLAG_CARRIER_SENSE инверсная его копия сделанная с задержкой для индикации. Отследить флаг, вероятно, Вы не успеваете. Чтобы передать, даже максимальный пакет размером 1518 байт со скоростью 10 Мбит/с, необходимо порядка 1,2 мс.
CRS при приёме и передаче работает только в Half Duplex. В Full Duplex отрабатывает только на приём. Уточните, пожалуйста, в каких режимах блока PHY Вы проверяли. То есть какое значение поля MODE[2:0] регистра PHY_Control у Вас в первом и втором случае?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet на 1986ВЕ1Т
СообщениеДобавлено: 2019-ноя-06 17:31 
Не в сети

Зарегистрирован: 2014-окт-10 18:12
Сообщения: 32
Artem1 писал(а):
ETH_PHY_FLAG_CRS - сам флаг, а ETH_PHY_FLAG_CARRIER_SENSE инверсная его копия сделанная с задержкой для индикации. Отследить флаг, вероятно, Вы не успеваете. Чтобы передать, даже максимальный пакет размером 1518 байт со скоростью 10 Мбит/с, необходимо порядка 1,2 мс.
CRS при приёме и передаче работает только в Half Duplex. В Full Duplex отрабатывает только на приём. Уточните, пожалуйста, в каких режимах блока PHY Вы проверяли. То есть какое значение поля MODE[2:0] регистра PHY_Control у Вас в первом и втором случае?

Пробовал следующие режимы:
1 режим - 10 Мбит/с half-duplex, стабильно наблюдаю свечение светодиода и при передаче, и при приеме.
2 режим - 100 Мбит/с full-duplex, наблюдаю свечение только при приеме.
3 режим - сейчас потестил 100 Мбит/с half-duplex, при приеме свечение есть, при передаче тоже есть.

Насчет успеваю/не успеваю, тем не менее опрос ETH_PHY_FLAG_CARRIER_SENSE как-то успевает. Если не просто зажигать светодиод, а переключать с тем же периодом опроса 20 мс, пока флаг в активном состоянии, даже успевает поморгать.

Собственно, Вашему сообщению такое поведение соответствует, просто в спецификации это не описано. Ответ на свой вопрос я получил, благодарю за помощь.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 147 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10

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


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

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


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

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