Я где-то читал, что создатели первой спецификации USB намеревались сделать этот стандарт простым для аппаратной реализации за счет усложнения программного обеспечения.
Таким образом, целью было максимально удешевить производство и сделать USB-устройства очень доступными.
Сейчас можно сказать, что производителям чипов это удалось, но действительно ли этот стандарт так легко реализовать на железе? Боюсь, ответ не очевиден.
Допустим, мне нужно сделать свое собственное простое USB-устройство.
Какие у меня есть варианты? Есть несколько вариантов: 1. Использование внешних специальных микросхем, например преобразователей USB-to-Serial. Каждый может использовать последовательный порт. Компания FTDI производит такие микросхемы.
Это FT232R USB-UART и FT245R USB-FIFO. Использование этих микросхем существенно упрощает разработку устройства, но несколько увеличивает его стоимость.
2. Использование микроконтроллеров со встроенным USB-интерфейсом.
Такие микросхемы производит, например, компания Atmel (например, микросхема AT90USB82).
Хорошее решение требует знания системы команд AVR и микропроцессора AVR в целом.
3. Использование микроконтроллеров AVR с программной эмуляцией интерфейса USB. Это знаменитая библиотека V-USB. Следует отметить, что выбирая любой из этих трех путей, мы существенно упрощаем себе жизнь и фактически остаемся в неведении: «Трудно ли реализовать USB аппаратноЭ» Здесь под реализацией «аппаратно» я имею в виду низший уровень проектирования — схемотехнику.
Захотелось проверить саму возможность реализации USB дома.
Это оказалось очень сложно, но получилось!
Для реализации USB я взял Доска марсохода с ПЛИС Altera EPM240T100C5 (240 логических элементов).
Ее схема Здесь .
Среда разработки Altera Quartus II v9. Написаны на языке Verilog: модуль получатель И передатчик Ядро USB — это модуль, который решает, когда и что отправлять.
Все пакеты и дескрипторы располагались во встроенной флэш-памяти чипа CPLD. Для своего устройства я взял idVendor=0x9FB от Altera (надеюсь меня простят?) и idProduct=0x60A5 (на ровном месте).
Драйвер для Windows я не писал — я взял пример драйвера BULKUSB.SYS из Microsoft Windows Driver Developer Kit и просто скомпилировал его.
А вот INF-файл пришлось изменить - укажите свой идентификатор производителя и идентификатор продукта.
Конечно, мне пришлось написать программу для работы с устройством.
Он может прочитать один байт с устройства и записать один байт на устройство.
На плате марсохода 8 светодиодов — теперь я могу их зажигать программно.
Еще на плате есть 4 кнопки — теперь я могу программно считать их состояние с устройства.
Немного, да? А ведь эта штука реально может заменить, например, параллельный или последовательный порт — можно подключить какую-нибудь самодельную «лампу настроения» или что-то еще.
Доступны все исходные коды программ, драйверов и проектов для CPLD. возьми здесь .
В общей сложности мое простое устройство заняло CPLD в чипе 215 логические элементы.
Конечно, я не слишком следовал стандарту USB — не делал контрольную сумму полученных пакетов и не переключал проверку четности.
Тем не менее, тесты показали вполне стабильную работу устройства в течение длительного времени.
Более подробную информацию можно получить по адресу Сайт борта марсохода .
Теги: #Марсоход #плата с открытым исходным кодом #CPLD #altera #altera #plis #PLIS #plis #Я занимаюсь пиаром
-
Как Я Открывал Dota League. Часть 1
19 Oct, 24 -
Торренты, Skype И Безопасность
19 Oct, 24 -
Чем Занимаешься В Эти Праздники, Хабраюзер?
19 Oct, 24 -
Клавадикт
19 Oct, 24