Миландр
https://forum.milandr.ru/

Проблемы с Ethernet
https://forum.milandr.ru/viewtopic.php?f=47&t=4375
Страница 2 из 3

Автор:  Ann [ 2021-сен-09 11:44 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

StartMilandr писал(а): *
...Нужно было подать стабильную частоту 80Мгц от внешнего генератора на пины HSE0, сам HSE0 включить в режиме PY_PASS, чтобы пропустить 80МГц на MAX_CLOCK и соответственно на блок PHY. Но ядро работает только до 64МГц, поэтому нужно было использовать делитель, чтобы 80МГц не попало на ядро. Вроде как-то так мы это запускали когда к РС подключали...


Помогите, пожалуйста, разобраться, где ошибка.
CLKCTRL_HSEconfig(CLKCTRL_HSE0_CLK_BYP);

while (CLKCTRL_HSEstatus(CLKCTRL_HSEn_STAT_HSE0_RDY) != SUCCESS) {}

CLKCTRL_CPU_PLLconfig(PLL0, CLKCTRL_PLLn_CLK_SELECT_HSE0div1, PLL_DIVQ_Q_16, 4); // 20 MHz, (3<N<75)

while (CLKCTRL_CPU_PLLstatus(0) != SUCCESS) {}

CLKCTRL_MAX_CLKSelection (CLKCTRL_MAX_CLK_HSE0div1);
На входе сейчас 80 МГц, программные настройки частот приведены выше. Отладчик доходит до строчки проверки pll, и там крутится в ожидании успешного окончания настройки. А его нет.

Пожалуйста, подскажите, что упущено.

Заранее спасибо.

Автор:  AndOrFin [ 2021-сен-09 13:13 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

Не надо 80МГц на PLL подавать.

Автор:  Artem1 [ 2021-сен-09 14:15 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

Ann писал(а): *
StartMilandr писал(а): *
...Нужно было подать стабильную частоту 80Мгц от внешнего генератора на пины HSE0, сам HSE0 включить в режиме PY_PASS, чтобы пропустить 80МГц на MAX_CLOCK и соответственно на блок PHY. Но ядро работает только до 64МГц, поэтому нужно было использовать делитель, чтобы 80МГц не попало на ядро. Вроде как-то так мы это запускали когда к РС подключали...


Помогите, пожалуйста, разобраться, где ошибка.
CLKCTRL_HSEconfig(CLKCTRL_HSE0_CLK_BYP);

while (CLKCTRL_HSEstatus(CLKCTRL_HSEn_STAT_HSE0_RDY) != SUCCESS) {}

CLKCTRL_CPU_PLLconfig(PLL0, CLKCTRL_PLLn_CLK_SELECT_HSE0div1, PLL_DIVQ_Q_16, 4); // 20 MHz, (3<N<75)

while (CLKCTRL_CPU_PLLstatus(0) != SUCCESS) {}

CLKCTRL_MAX_CLKSelection (CLKCTRL_MAX_CLK_HSE0div1);
На входе сейчас 80 МГц, программные настройки частот приведены выше. Отладчик доходит до строчки проверки pll, и там крутится в ожидании успешного окончания настройки. А его нет.

Пожалуйста, подскажите, что упущено.

Заранее спасибо.
Входная частота PLL от 2 до 16 МГц.

Также некорректно настраивается сам блок.
Необходимо выполнять условие:
𝐹𝐼𝑁𝑇 = 𝐹𝐼𝑁∗(𝐾𝑁𝑃𝐿𝐿)/(𝐾𝑄𝑃𝐿𝐿+1)
Частота FINT, полученная после умножения 𝐹𝐼𝑁 на 𝐾𝑁𝑃𝐿𝐿 и деления на (𝐾𝑄𝑃𝐿𝐿+1), должна быть в диапазоне от 75 до 150 МГц.
Далее частота 𝐹𝐼𝑁𝑇 участвует в формировании выходной частоты PLL:
FOUT = FINT/(DV+1)

Автор:  Ann [ 2021-сен-09 14:55 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

Спасибо большое за указание ошибок.
Действительно, настройки pll некорректны.

Автор:  Ann [ 2021-сен-09 15:17 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

И, тем не менее, снова прошу помощи.
1. Правильно ли были произведены настройки всех частот для запуска ethernet?
StartMilandr писал(а): *
...Нужно было подать стабильную частоту 80Мгц от внешнего генератора на пины HSE0, сам HSE0 включить в режиме PY_PASS, чтобы пропустить 80МГц на MAX_CLOCK и соответственно на блок PHY. Но ядро работает только до 64МГц, поэтому нужно было использовать делитель, чтобы 80МГц не попало на ядро. Вроде как-то так мы это запускали когда к РС подключали...

Мой код в соответствии с вышеизложенными рекомендациями:
CLKCTRL_HSEconfig(CLKCTRL_HSE0_CLK_BYP);  // режим Bypass 

while (CLKCTRL_HSEstatus(CLKCTRL_HSEn_STAT_HSE0_RDY) != SUCCESS) {}

CLKCTRL_MAX_CLKSelection (CLKCTRL_MAX_CLK_HSE0div1);  // 80МГц на max_clock

CLKCTRL_CPUclkPrescaler(CLKCTRL_CPU_CLK_CPUclk2); // делитель, чтобы на ядро 80 МГц не попали
На входе сейчас 80 МГц.


2. Отладчик доходит до while, и там и остаётся. Что не так? Почему режим не устанавливается?

Заранее спасибо.

Автор:  StartMilandr [ 2021-сен-09 16:18 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

Надо проверить:
1 - что амплитуда сигнала 80МГц равна Ucc
2 - на тот ли пин подана амплитуда

Автор:  Ann [ 2021-сен-10 10:45 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

StartMilandr писал(а): *
Надо проверить:
1 - что амплитуда сигнала 80МГц равна Ucc
2 - на тот ли пин подана амплитуда
Синус, амплитуда 3.3 В, подано туда же, куда ранее приходило 10МГц, т.е. на hseo_in.

Автор:  Ann [ 2021-сен-10 10:48 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

CLKCTRL_HSEconfig(CLKCTRL_HSE0_CLK_BYP);  // режим Bypass 

while (CLKCTRL_HSEstatus(CLKCTRL_HSEn_STAT_HSE0_RDY) != SUCCESS) {}

Уважаемые разработчики! Почему режим Bypass на микроконтроллере 1986ВЕ8Т не устанавливается? Почему программа под отладчиком зависает на проверке работоспособности hse0?
В одной из тем рекомендовали отменить эту проверку, но если её отменить, отладчик вылетает совсем.
Пожалуйста, подскажите, что нужно дописать/переписать, чтобы заработало.

Заранее спасибо.

Автор:  StartMilandr [ 2021-сен-10 11:11 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

Имхо надо меандр подать...
- Когда на внутренний генератора HSE подается частота от внешнего резонатора, то этот внутренний генератор делает из входящего синуса с амплитудой ~100мв меандр с той же частотой и амплитудой Ucc. Выходной "компаратор" отсчитывает заданное количество переключений меандра на выходе и выставляет бит Ready.
- Когла HSE включается в режиме ByPASS, то он как генератор отключается (не делает из "микросинуса" меандр), а просто пропускает сквозь себя внешнюю частоту. Но выходной "компаратор" так-же должен насчитать заданное дизайном количество переключений, чтобы выставить бит Ready.

Ucc у вас 3,3 вольта?

Автор:  Ann [ 2021-сен-10 14:17 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

StartMilandr писал(а): *
Имхо надо меандр подать...
- Когда на внутренний генератора HSE подается частота от внешнего резонатора, то этот внутренний генератор делает из входящего синуса с амплитудой ~100мв меандр с той же частотой и амплитудой Ucc. Выходной "компаратор" отсчитывает заданное количество переключений меандра на выходе и выставляет бит Ready.
- Когла HSE включается в режиме ByPASS, то он как генератор отключается (не делает из "микросинуса" меандр), а просто пропускает сквозь себя внешнюю частоту. Но выходной "компаратор" так-же должен насчитать заданное дизайном количество переключений, чтобы выставить бит Ready.

Ucc у вас 3,3 вольта?
3.3.

Всё заработало! Спасибо Вам огромное!

Автор:  Ann [ 2021-ноя-18 15:02 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

Здравствуйте! Помогите, пожалуйста, понять, в чем дело.

Есть простая программа для 1986ВЕ8Т, передающая и принимающая в прерывании пакеты через ethernet. Причём даже не через внешний разъём, а внутри (ETH_Loopback_Mode = ENABLE). Пока программа запускается из внутренней памяти, все в порядке. Но если подключить 1645РУ4АУ и запустить программу оттуда, прерывание срабатывает один раз, а на втором после попадания в обработчик прерывания крутится в строчке:
 while (MDR_ETHO->R_HEAD == MDR_ETHO->R_TAIL) {}


Внешняя память подключена корректно (программа с прерыванием по таймеру, запускаемая из внешней памяти, отрабатывает без ошибок). Проблема именно в Ethernet. И в прерывании. Потому что если передавать и принимать пакеты в вечном цикле, как это сделано в примере, всё работает дольше. Но в конце концов, тоже останавливается в указанной выше строке кода.
Подскажите, пожалуйста, что это может быть.

Заранее спасибо.

Автор:  AndOrFin [ 2021-ноя-18 17:00 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

Надо код смотреть. Эта строка говорит о том, что новых пакетов нет.
А если вы висите в этой строке, то не исполняется код который следующий пакет должен послать (раз уж Loopback режим). Соответственно цикл и висит.
Проблема в логике программы.

Автор:  vasili [ 2021-ноя-18 17:39 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

Ann писал(а): *
...Пока программа запускается из внутренней памяти, все в порядке. Но если подключить 1645РУ4АУ и запустить программу оттуда, прерывание срабатывает один раз, а на втором после попадания в обработчик прерывания крутится в строчке:
 while (MDR_ETHO->R_HEAD == MDR_ETHO->R_TAIL) {}
...
1. Какие настройки таймингов для внешней шины? По умолчанию на частоте 40 МГц цикл шины будет порядка 4 мкс.
2. Включен ли КЭШ для внешней шины?
Влияют ли эти параметры на поведение программы?
Если часть кода разместить во внутренней SRAM (например таблица векторов и обработчики прерывания) - это повлияет на поведение программы?
Ann писал(а): *
...Потому что если передавать и принимать пакеты в вечном цикле, как это сделано в примере, всё работает дольше. Но в конце концов, тоже останавливается в указанной выше строке кода...
Если код всего вечного цикла помещается в КЭШ, то при включенном кэш обращений по шине после заполнения кэш вообще не должно быть (или будут минимальными при извлечении констант). При этом программа будет работать с максимальным быстродейсвием.

Автор:  Ann [ 2021-ноя-22 10:44 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

AndOrFin писал(а): *
Надо код смотреть. Эта строка говорит о том, что новых пакетов нет.
А если вы висите в этой строке, то не исполняется код который следующий пакет должен послать (раз уж Loopback режим). Соответственно цикл и висит.
Проблема в логике программы.
Спасибо за ответ.
Код прилагаю ниже.

Программа простая, но, действительно, есть нюанс - в прерывании я отправляю заново пакет, чтобы был непрерывный цикл приема/передачи. В окончательной программе этого, конечно, нет. Здесь же такой код, чтобы отследить ошибку. Без внешней памяти он работал. Казалось, что и с включением 1645РУ4АУ тоже ничего не изменится.

Вложения:
main.rar [4.03 КБ]
8 скачиваний

Автор:  Ann [ 2021-ноя-22 11:11 ]
Заголовок сообщения:  Re: Проблемы с Ethernet

vasili писал(а): *
Если часть кода разместить во внутренней SRAM (например таблица векторов и обработчики прерывания) - это повлияет на поведение программы?
Спасибо большое за ответ!

Размещение части кода во внутренней памяти и включение кэша на поведение программы не повлияло никак.

Кэш не включен.

Внешняя частота 80МГц. Временные настройки контроллера внешней памяти следующие:
DIVOCLK = 6;
WS_HOLD = 6;
WS_SETUP = 6;
WS_ACTIVE =6.

Страница 2 из 3 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/