Як я робив 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 продукту.

Програму для роботи з пристроєм звичайно довелося писати.

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

Разом, моє простий пристрій зайняло в чіпі CPLD 215 логічних елементів.

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

Більш детальна інформація є на сайті плати Марсохід.

Це цікаво: