Как я делал 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 я взял плату Марсоход с ПЛИС 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 продукта.

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



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

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

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

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

    Более подробная информация есть на сайте платы Марсоход.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 51

    • UFO just landed and posted this here
        0
        А там достаточно понятно всё расписано, просто текста много.
          0
          С нуля ли? Мне до сих пор непонятно, есть ли на этой плате USB контроллер и что конкретно было сделано на FPGA.
            +5
            да, с нуля.
            на плате есть только один чип Альтеры CPLD с 240 логическими элементами.
            Никаких других контроллеров на плате нет. Вы можете убедиться в этом посмотрев схему платы а так же исходные тексты USB приемника и передатчика.
          +2
          Судя по использованной микросхеме, это первая версия USB-протокола. Для второй понадобится что-то посерьезней CPLD. А тут уже и USB3 все чаще мелькает на горизонте. В любом случае — мои аплодисменты! Представляю, как китайцы тебе за схему и прошивку благодарны :)
            +1
            Вторая версия протокола включает в себя первую.
              0
              Но не наоборот.
                +4
                капитан очевидность не дремлет!
                  0
                  капитан очевидность уже надоел…
            +2
            Очень интересно и познавательно, захотелось взять паяльник и что-нибудь спаять)))
              +3
              Готов купить самодельное устройство с одним светодиодом и одной кнопкой, чтоб я мог программно писать и читать оттуда :)
                +2
                Страшно спросить — а зачем?)))
                  +5
                  Наверное бомбу сделать =)
                    +12
                    Ну почти :) нужно сделать большую красную panic кнопку :) Потом программно биндить ее на что нибудь. Например на F5 в IDE или кнопка экстренного сворачивания порнофильма :)
                      +5
                      Тогда уж кнопка «Маски шоу»
                        +1
                        Ну это уж как запрограммируешь потом. Думаю такой девайс можно и массово продавать разным фирмам :)
                        • UFO just landed and posted this here
                      • UFO just landed and posted this here
                        +2
                        USB-бомба. Только в России.
                    • UFO just landed and posted this here
                        0
                        Давно уже нагуглил эту штуку, в офлайн магазинах правда не видел. Но меня смущает одно, смогу ли я ней программно подцепиться.
                        • UFO just landed and posted this here
                            0
                            900 рублей?! Да они офигели… Легче arduino с usb купить (500 руб) и самому сделать. Оно вроде программируется достаточно просто…
                              0
                              usb мышка гораздо дешевле обходится, с большим функционалом :)
                              Да и продавцы вряд ли смогут сказать смогу ли я программно подцепиться к этому девайсу…
                              • UFO just landed and posted this here
                          0
                          Ключевой вопрос — за сколько? =)
                            0
                            Предлагайте ;)
                              0
                              Не уверен, что смогу предложить что-то дешевле 500 рублей — просто невыгодно. Да еще и слать из Москвы в Казань. Так лучше наверное Вам самому сделать что-то подобное на arduino, либо из старой клавиатуры + выключателя =)
                          0
                          А почему не ATUSB*? Оно проще сильно, правда, там с нуля эмуляцию не сделать. В целом круто, да.
                            +17
                            А почему не расписано по шагам, более подробно? Думаю многим было бы интересно
                              +3
                              Я, впринципе, работал с USB через FTDI'шный чип. Если интересно — могу попробовать написать поподробнее об этой железяке.
                              • UFO just landed and posted this here
                                  0
                                  Точно не скажу, но судя по статье на википедии — да, FT232.
                                0
                                А объясните, зачем это понадобилось делать?

                                Для промышленного выпуска вы вряд ли сильно будете лепить дорогостоящие CPLD или FPGA — а делать свой чип вы вряд ли будете, если у вас тираж устройства меньше миллионов штук. Да и то, если будете — то для того, чтобы вам сделать его дешевле, чем аналогичные решения от FTDI или встроенные в контроллеры AVR / PIC.

                                Open source реализация стека USB? Так их и так вагон и маленькая тележка. Про V-USB, который, кстати, GPLv2, вы уже сами сказали. Есть еще USBtiny, IgorPlug и т.п. — более чем уверен, что вы их все знаете. В проектах OpenCores перечислены несколько USB-реализаций. Зачем делать n+1-ую? Только для того, чтобы на CPLD?
                                  +24
                                  Думаю, всё дело в том, что это интересно.
                                    –3
                                    По мне так чем изобретать велосипед интересней замутить самостоятельный девайс используя уже готовый усб интерфейс.

                                    Как заготовка для творчества и альтернатива arduino- Propeller Proto Board USB
                                    Стоит 30 баксов. На плате распаян FTDI USB, проц с 8-ю ядрами, EEPROM и куча места под установку компонентов.
                                    Есть туча готовых объектов с реализациями различных интерфейсов, дабы сосредоточится на логике создаваемого устройчтва, а не на написании велосипедов.
                                      +12
                                      Есть куча готовых заводов, фабрик, пароходов. Можно сосредоточиться на плевании в потолок.
                                        0
                                        Если создание чего-то нового для вас плевание в потолок, тогда да.
                                          +2
                                          Наоборот. Плевание в потолок — это создание чего-то нового — мокрого рисунка на потолке, например.
                                          Если что-то готовое стоит 30 баксов — значит кто-то научился его делать, сделал и продаёт.
                                        0
                                        Часто бывает интересно и полезно разобраться в том КАК нечто работает, а уже потом применять готовое решение.
                                        Зачастую помогает найти куда как более эффективное и эффектное применение.
                                          –3
                                          Когда готовое решение с исходниками, то разобраться как оно работает можно не повторяя чужих ошибок.
                                  • UFO just landed and posted this here
                                    • UFO just landed and posted this here
                                        +1
                                        Снимаю перед вами шляпу.
                                        Хочу теперь сам попробовать такое сотворить.
                                          0
                                          Автор молодец! Такие статьи воодушевляют на вершение подвигов!
                                          Действительно, паяльник в руки хочется взять! Спасибо!
                                            +1
                                            Еще на плате есть 4 кнопочки — теперь я могу программно читать из устройства их состояние.

                                            А как отследить нажатие кнопки в момент её нажатия? В бесконечном цикле читать чтоли? Устройство не может само инициировать отправку пакета?
                                            • UFO just landed and posted this here
                                            • UFO just landed and posted this here
                                                –1
                                                Ндя. Прогресс блин.

                                                Параллельный порт (25-контактов), у которого 2 контакта на планке замыкались = кнопка, а припаянный с резистором светодиод на ещё 2 других контакта = лампочка, кажется верхом гениальности и технологичности. И таких 8 выходов и штук 6 входов.

                                                И к чему идёт развитие техники?
                                                • UFO just landed and posted this here
                                                  0
                                                  :) Здесь так и напрашивается выражение «глаза боятся, а руки делают»!

                                                  Only users with full accounts can post comments. Log in, please.