В предыдущей статье я рассказывал, как делал USB хост, как симулировал его с помощью тестбенча. Сейчас я встроил его уже в реальный проект квартуса. Сделал интеграцию verilog модуля usb11ctrl.v в свой проект USBTerm для среды Altera Quartus.
Это фото показывает весь ужас разработки USB11 хоста на плате Марсоход3bis.
- сама плата Марсоход3bis подключена к ноутбуку кабелем USB2 для скоростной передачи данных в плату (отрисовка изображений на экране и команды в USB11 хост) и передачи данных из платы в ноутбук (результат исполнения USB команд на шине);
- так же, к плате подсоединен программатор MBFTDI для программирования ПЛИС и отладки проектов в среде Quartus SignalTap;
- к плате, через разъем HDMI, подключен монитор (на самом деле телевизор) для отображения изображений переданных из ноутбука в плату;
- на плату Марсоход3bis установлен шилд разъемов для подключения USB мыши и (в будущем) клавиатуры;
- для контроля и отладки контроллера USB используется аппаратный USB анализатор - устройство подслушивающее весь USB трафик и показывающей его на ноутбуке; подключается по третьему кабелю USB к ноутбуку.
На ноутбуке приходится использовать сразу три среды для разработки:
Во-первых, конечно, среда MS Visual Studio. Здесь я пишу тестовую программу usb_mouse_poll, которая будет опрашивать USB хост в плате Марсоход3bis.
Во-вторых, конечно, отладчик ПЛИС проектов Altera SignalTap. Вот здесь выше видно захваченные в ходе отладки пакеты USB.
В-третьих, конечно, программное обеспечение USB анализатора Ellisys Visual USB. Вот они - мои USB пакеты на шине! Без USB анализатора сделать что-то было бы довольно трудно..
Ну и вот результат на видео демонстрации:
Программа usb_mouse_poll опрашивает USB хост платы Марсоход3bis. Как только USB мышь подключена, программа программирует мышь: делает сброс на шине, активизирует ее, делает чтение первых 8-ми байт Device Descriptor, назначает адрес SetAddress() и выбирает конфигурацию SetConfiguration(), затем читает из мыши состояния кнопок и движение по осям X и Y. Передает события от мыши на декстоп ноутбука.
Значительная часть работы связанная с USB в принципе выполнена. Теперь, можно сконцентрироваться на разработке именно ПО тонкого коиента. По моей задумке терминал USBTerm будет подключаться к виртуальной машине VMWare и отобразать ее состояние как второе рабочее место к персональному компьютеру.
Все исходники проекта, включая исходники для Quartus и Visual Studio - на github https://github.com/marsohod4you/UsbHwThinClient4Vm
Подробнее...