МАРСОХОД

Open Source Hardware Project

FPGA & CPLD Блогchips

САПР Altera Quartus II / Quartus Prime, язык Verilog HDL, ПЛИС Cyclone III, Cyclone IV, MAX II, MAX10.
Платы разработчика серии Марсоход, Марсоход2, Марсоход3.


Сложности разработки USB хоста для проекта USBTerm.

mouse+Marsohod3bis

Мне для проекта USBTerm нужен USB11 хост, так как к моему тонкому клиенту я собираюсь подключить USB мышь и USB клавиатуру. В принципе, я думал, ничего особо сложного там быть не должно. Я ведь уже когда-то занимался USB проектами: когда-то делал и простое USB устройство в плате Марсоход, и USB трекер из платы Марсоход2. В общем, тема мне довольно знакомая, хоть и не любимая.

Почему не любимая? Слишком уж сложен USB протокол. Даже для USB11 низкоскоростных устройств слишком все сложно и запутанно. Если пытаться сделать машину состояний по обслуживанию этого протокола, то получается очень много состояний, много условий, вариантов движения данных, правила очередности пакетов. В общем не просто это. Вот зарылся я с головой в реализацию хоста и потратил на это очень много времени. Прямо неприлично много.. Жаль.

Ну вот попытаюсь рассказать, что и как я делаю.

Копирование экрана виртуальной машины на терминал USBTerm



Только что прошел еще один очень важный этап в своем проекте USBTerm.

Поскольку я собираюсь отображать на своем графическом терминале экран виртуальной машины VMWare, то мне принципиально важно понять, как я это буду делать. И вообще, возможно ли это в принципе.

Как работает видеоадаптер проекта USBTerm

Хочу поподробнее рассказать, как работает видеодаптер, используемый в проекте USBTerm.

Мы уже не раз писали про всякие видеоконтроллеры на нашем сайте, вот хотя бы некоторые из статей:

Здесь же, в этой статье, я хочу сделать акцент на расчет пропускной способности и согласования записи и чтения в видеопамяти.

Итак, видеорежим.
Я делаю, так называемый HD-Ready: 1280x720 60Hz, 16 бит на пиксел, выход HDMI платы Марсоход3.
Выбор этого режима не случаен. Этот режим поддерживается большинством современных телевизоров и мониторов и у него не такие уж и высокие частоты. Спецификацию беру из VESA стандарта:

vesa

Тактовая частота для вывода пикселов 74,250 МГц. Это в общем-то не очень высокая частота для ПЛИС, но поскольку пикселы будут кодироваться для HDMI в сигналы TMDS (Transition-Minimized Differential Signaling), то выходная частота будет уже в 5 раз выше, то есть 370 МГц - это уже довольно много.

Передача видео кадров в плату Марсоход3


Вот закончил очередной этап моего проекта USBTerm. На этом видео показано, как видеофайл декодируется на ноутбуке c с помощью программы FFMPEG, а отображается на плате Марсоход3.

Новогодние слайды на плате Марсоход3bis

Продолжаю работать над проектом USB терминала в плате Марсоход3bis.

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

Оно у меня так еще неделю назад работало, но как-то не очень стабильно, да и очень сложно тогда получилось. Контроллер SDRAM, который я взял на opencores когда-то давно по умолчанию работает с 32-х бинтыми данными не зависимо от шины SDRAM. Видимо из-за того, что автор контроллера использовал его с wishbon bus. Мне же сейчас в этом проекте 32 бита данных не очень удобно. Я использую 16-ти битный видео режим high-color ( R5-G6-B5 ). Микросхема SDRAM у меня на плате Марсоход3bis одна и так же 16-ти битная. Пришлось немного исправлять контроллер.

Еще трудность с которой столкнулся - неудобство с burst mode. Я микросхему памяти программирую на пакетное чтение слов данных из памяти SDRAM, по 8 слов за один запрос на чтение. Burst mode / пакетная передача существенно повышает производительность памяти. Но на запись это не очень удобно. Вспомнил, что SDRAM можно запрограммировать в режим одиночной записи и пакетного чтения. Переделал проект и стало гораздо надежней и проще.

Ну и, конечно, сделал в Visual Studio программу, которая из командной строки берет имя файла изображения (bitmap или jpeg) и считывает и посылает на плату.

ПОлучилось прямо новогоднее настроение.

Весь проект можно взять на GitHub https://github.com/marsohod4you/UsbHwThinClient4Vm

Конечно, еще не все работает идеально. Запись пока работает не очень быстро - нужно разбираться почему. Может просто более длинными пакетами нужно писать в плату? Буду смотреть.

Еще проблемка - иногда на экране нет нет да и появится непрорисованная линия - где-то редко почему-то глючит запись. Нужно разбираться.

 

 


facebook  GitHub  YouTube  Twitter
Вы здесь: Начало