Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА:

Вопросы по плате Марсоход3 9 года 11 мес. назад #6421

alman пишет: Два дня борьбы с UART - "коту под хвост" :angry:


Я столкнулся с аналогичной проблемой Марсохода3. Я сделал SoC внутри MAX10, в составе которой есть блок UART; вывел RX и TX этого UART на соответствующие пины микросхемы FTDI, установленной на Марсоход3 --- не заработало. Тогда, чтобы не терять время, я вывел RX и TX на гребёнку для модулей расширения, а уже к гребёнке подключил внешний шнурок USB-UART --- такое решение отлично работает.
Спасибо сказали: alman

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Вопросы по плате Марсоход3 9 года 11 мес. назад #6422

А проект, который был изначально зашит в максе уже все поубивали?
Напомню, после включения платы на экране монитора появляется " матрас" фреймбуфера, а
копировать в него можно командой "Copy"через ком-порт на скорости 12мбит и как-раз в режиме 8N1.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Вопросы по плате Марсоход3 9 года 11 мес. назад #6424

И все же, хотелось бы разобраться с проблемой. Для начала хотелось бы понять полученные результаты. Итак, я использую PLL для деления частоты в 2 раза. Беру вот этот синхронизатор - www.fpga4fun.com/CrossClockDomain1.html и пропускаю через него вход FTDI_BD0, а выход вешаю на FTDI_BD1.
При этом терминал позволяет работать на скорости 2400 и 4800, меньшую я не проверял, а начиная с 9600 перестаёт работать. 2400 тоже не плохая скорость, поэтому я решил посмотреть что приходит в порт.




drive.google.com/file/d/0Bzo8HAmNqHgAamJ...akU/view?usp=sharing

Это результат нажатия четырёх пробелов.

В соответствии с протоколом 8N1, пробел это следующая последовательонсть бит - 0 0000 0010 1

На диаграмме мы видим
19 2 6 xxx
19 2 6 xxx
19 3 5 xxx
19 3 5 xxx

Эти данные можно интерпретировать так - длительность нулей, длительность единиц, длительность нулей, после которых опять единица.

Т.е. закономерность просматривается, но возникают вопросы - вот эти цифры это количество тактов на частоте 50 МГц, между которыми происходит переключение сигнала RXD. И это количество тактов не соответствует скорости 2400.

На всякий случай тестовый проект -

Вложенный файл:

Имя файла: CrossDomain.zip
Размер файла:25 KB
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от alman.

Вопросы по плате Марсоход3 9 года 11 мес. назад #6425

umarsohod пишет: А проект, который был изначально зашит в максе уже все поубивали?
Напомню, после включения платы на экране монитора появляется " матрас" фреймбуфера, а
копировать в него можно командой "Copy"через ком-порт на скорости 12мбит и как-раз в режиме 8N1.


Изначальный проект не трогал. Отправил на Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. письмо с ссылкой на короткое видео с тестом платы. Может быть подскажете что к чему.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Вопросы по плате Марсоход3 9 года 11 мес. назад #6456

Я немного переделал тест FTDI COM-порта - оставил PLL, но не делю частоту, а чуть сдвинул фронт сигнала. Результат - один бит занимает 6 тактовых сигналов на частоте 100МГц. Из графика SignalTap однозначно декодируются принятые байты.

Все же мне кажется что работает какой-то протокол, возможно D2XX. На сайте FTDI две версии драйверов VCP (Virtual COM Port) и D2XX. Но разные страницы на сайте (VCP и D2XX) ведут на загрузку одного и того же драйвера. (Тут я уже запутался)

В общем, предполагаю что используется какой-то синхронный протокол с разделение времени и некоторый интервал отведён для UART. Сейчас ещё попытаюсь поэксперементировать с драйверами. И похоже что источник такого поведения связан вот с этим:

FTDI Порт A




FTDI Порт B



Работа ведётся с портом B, а у него не включен режим VCP. Т.е. решение проблемы может быть в драйверах или, как вариант, переписать модуль UART под этот протокол с разделением времени.

Кстати, если кто смотрел тестовый проект, то там есть вариант срабатывания теста по таймауту. Я не могу понять почему успеваю нажать несколько клавиш до его срабатывания.
						state_length <= state_length + 1'b1;
						
						if( (counter != 0) && (state_length > 26040) ) 
							begin
								hit <= 1'b1;
								counter <= 0;
							end

Этот фрагмент работает если состояние на линии RXD не изменилось. В одну секунду он выполняется 100 000 000 раз. По идее, он должен срабатывать сразу после нажатия клавиши, но срабатывает после приблизительно одной-двух секунд. Вот это мистика, которую я не могу объяснить. Разве что схема синхронизируется меньшей частотой, а не 100MHz.

Есть один момент, чтобы TimeQuest не ругался, я создал файл с расширением sdc, добавил в проект и прописал в нём следующую строку:

create_clock -name {QUARTZ} -period 10.000 -waveform { 0.000 5.000 } [get_ports {CLK100MHZ}]

Вроде бы так описываются констрейны? И уже саму схему тактирую сигналом QUARTZ. А если выкинуть из проекта PLL, то SignalTap не может поймать клок.

Есть у кого-нибудь какие-нибудь идеи как запустить COM порт?

Наконец, ещё некоторое неудобствво по сравнению с Марсоходом-2. При заливке SOF в Марсоход-2 не нужно обрывать терминальную сессию. В случае Марсоход-3 нужно закрыть терминал, иначе SOF файл не зальётся в ПЛИС. Мелочь, но не очень удобно.
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от alman.

Вопросы по плате Марсоход3 9 года 11 мес. назад #6457

Разобрался наконец. Чудес не бывает. Проблема была в неправильно описанном констрейне. Проблему помог локализовать отчёт .fit.rpt - тактовый сигнал был назначен на неправильную ногу. Удивительно вообще что схема как-то тактировалась и работала - если бы не равботала, то быстрей бы нашёл. После исправления всё заработало как ожидалось. Извините за ложную тревогу.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 1.680 секунд
Работает на Kunena форум