Главная страница Электронные самоделки Как я делал USB устройство

Календарь:

Как я делал USB устройство Печать E-mail
(23 голоса)
Автор: Administrator   
19.10.2010 17:00

 

Где-то когда-то я читал, что создатели первой спецификации USB намеревались сделать этот стандарт простым для реализации в железе за счет усложнения программного обеспечения. Таким образом цель была максимально удешевить производство и сделать 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 устройство

Для своей реализации USB я взял плату Марсоход с ПЛИС Altera EPM240T100C5 (240 логических элементов). Ее схема вот.
Среда разработки Altera Quartus II v9.

Были написаны на языке Verilog: модуль приемника и передатчика, ядро USB — модуль решающий когда и что посылать. Все пакеты и дескрипторы были размещены во встроенной флеш памяти чипа CPLD.

Для своего устройства я взял idVendor=0x9FB компании Альтера (надеюсь они меня простят?) и idProduct=0x60A5 (с потолка).

Драйвер для Windows я не писал — взял из комплекта Microsoft Windows Driver Developer Kit пример драйвера BULKUSB.SYS и просто откомпилировал его. А вот INF файл пришлось менять — указывать свои ID производителя и ID продукта.

Программу для работы с устройством конечно пришлось писать.

Как я делал USB устройство

Она может читать из устройства один байт и писать в устройство один байт. На плате Марсоход есть 8 светодиодов — теперь я могу их зажигать програмно. Еще на плате есть 4 кнопочки — теперь я могу программно читать из устройства их состояние. Немного, правда? Но эта штука уже реально может заменить, например, параллельный или последовательный порт — можно подключить какую нибудь самодельную «лампу настроения» или еще что-то.

Все исходные тексты программ, драйвера и проект для CPLD можно взять здесь.

Итого, мое простое устройство заняло в чипе CPLD 215 логических элементов.

Конечно, я не слишком следовал стандарту USB — я не делал проверку контрольных сумм принятых пакетов или проверку четности toggle. Тем не менее испытания показали вполне стабильную работу устройства в течении длительного времени.

 

 

Пользовался я своим старым цифровиком длительное время, но недавно он сломался. Это послужило выбором нового фотоаппарата, свой выбор остановил на фотоаппаратах панасоник. Фотографии сделанные данными цифровиками являются очень качественными. Советую купить фотоаппарат panasonic.

 

Добавить комментарий

Защитный код
Обновить

 

Подписка

Статистика