Jste zde

Softwarová implementace USB pro mikrokontroléry AVR

AVR-USB je čistě firmwarová implementace USB rozhraní verze 1.1 (low-speed) určená pro mikrokontroléry AVR od firmy Atmel. Software běhá na jakémkoliv AVR procesoru který má alespoň 2 kB Flash paměti, 128B RAM a zvládá takt min. 12 MHz. Žádný UART, časovač, Capture/Compare jednotka nebo jiný speciální hardware není třeba (pouze jeden zdroj přerušení). AVR-USB je volně šířen pod licencí GNU GPL, alternativně pod komereční licencí.

USB-AVR

Srovnání s mikrokontroléry s HW implementací USB:

  • Mikrokontroléry AVR je všeobecně snazší získat.
  • Většina MCU s hardwarovou podporou USB je dostupná pouze v provedení SMD, což je značný problém pro domácí výrobu.
  • AVR-USB obsahuje uživatelsky definovatelné identifikátory (Vendor-ID, Product-ID).
  • Pro AVR je zdarma dostupný ANSI-C kompiler (GNU gcc) a vývojové prostředí pod OS Windows (WinAVR).
  • AVR jsou rychlejší a levnější než většina MCU s integrovaným řadičem USB.
  • Obslužný firmware zabírá cca 1500 B paměti programu.
  • Vyžaduje větší výpočetní výkon. 
  • Zabírá 2 vstupy přerušení.

Srovnání se samostatnými USB řadiči:

  • Nedochází k navyšování ceny.
  • Jednodušší deska plošných spojů, méně chyb.
  • SW implementace zabírá pouze 2 - 3 vývody z MCU.
  • Samostatné USB řadiče je obtížnější sehnat.

Srovnání s jinými SW implementacemi:

Podobný firmware pro MCU řady AVR je dostupný i na internetových stránkách Igora Čečka. AVR-USB má i oproti tomuto několik výhod:

  • Upravitelné části kódu jsou psány v ANSI-C a dají se jednoduše modifikovat.
  • Modulární koncept: dá se jednoduše importovat do již existujících zařízení.
  • Výrazně menší velikost výsledného kódu..
  • Rychlejší: Veškeré kódování/dekódování (USB vyžaduje NRZI kódování) je real-time.
  • Možnost přizpůsobení standardů je dobře zdokumentována (popis omezení a potenciálních problémů).
  • Dostupné jak zdarma pod licencí GNU GPL tak pod komereční licencí.

Vlastnosti:

  • Podporuje USB 1.1 (low-speed), mimo řízení chyb v komunikaci a některých elektrických specifikací.
  • Ukázkové projekty demonstrují zařízení a implementaci ovladačů na operační systémy Linux, Mac OS X a Windows.
  • Přenosové celky (pakety) až do velikosti 254 B.
  • Volně použitelné USB identifikátory (Vendor-ID a Product-ID).
  • Přizpůsobitelné sekce kódu jsou psány v C a jsou dobře okomentovány
  • Pro základní funkce je zapotřebí pouze 1400 B - 1500 B kódu
  • Můžete si zvolit mezi licencí Open Source nebo licencí komereční [1].

Download:

Každá nová verze AVR-USB firmwaru je přiložena k referenční implementaci projektu PowerSwitch. Pokud tedy chcete získat nejnovější ovladače stáhněte si dokumentaci k tomuto projektu [2]. Pokud chcete vyvíjet zařízení s ovladači pod Windows, stáhněte si také dokumentaci k zařízení Automator [3]. Tento projekt demonstruje jak ve Windowsech věstavěné ovladače HID mohou být použity pro přenos libovolných dat.

Hardware:

Následující schéma ukazuje referenční připojení mikrokontroléru k rozhraní USB ze kterého je též celý obvod napájen.

Obecné zapojení

Diody D1 a D2 jsou levnou náhražkou 3,3 V regulátoru napájecího napětí, jako je třeba obvod LE33.

Dále si popíšeme dva vybrané produktu z projektu USB-AVR a to zařízení PowerSwitch a HIDKeys.

PowerSwitch

PowerSwitch je vlastně takový převodník USB na 8bitový paralelní výstup doplněný o výstupní relé. Což ho předurčuje např. k zapínání a vypínání elektrických obvodů nebo spotřebičů. Zařízení PowerSwitch je ovládáno z příkazové řádky pomocí stejnojmenného nástroje, a to pod systémem Unix (Linux), nicméně jsou dostupné i zdrojové kódy a dynamická knihovna s ovladači, takže je možné si tento nástroj zkompilovat i pod Windows a to např. pomocí nástroje minGW [4]. Kromě tohoto kompileru je již všechno obsaženo v balíčku s projektovou dokumentací [2].

Klikněte pro zvětšení

PowerSwitch je zároveň referenční implementace firmwaru AVR-USB. Pokud budete chtít požít AVR-USB ve svém vlastním projektu, stáhněte si dokumentaci PowerSwitch a použijte ovladač z něj. Zařízení PowerSwitch může být velmi užitečné samo o sobě. Možnosti použití jsou vskutku vysoké a záleží jen na fantazii konstruktéra. Na rozdíl od převodníků USB na sériové nebo paralelní rozhraní, kterých je dostatek, není tento typ hardwaru dostupný v normálních obchodech.

Použití PowerSwitche:

Po napájení všech součástek, naprogramování mikrokontroléru a nainstalování nástroje pro řízení z příkazové řádky, spusťte program PowerSwitch. Nejednodušší popis práce se zařízením PowerSwitch pravděpodobně poskytne následující příklad::

Pro zapnutí výstupu 3 napište:
powerSwitch on3

Pro vypnutí výstupu 0, použijte:
powerSwitch off 0

Například pro vypnutí výstpu 3 na 5 vteřin (např. pro resetování připojeného počítače), napište:
powerSwitch off 3 5

Pokud potřebujete znát současný stav všech výstupů, jednoduše použijte:
powerSwitch status

Jest-li že preferujete grafické rozhraní, podívejte se na stránky o programu gPowerSwitch (autorem je pan Krzysiek [5]). Jedná se o grafickou nástavbu programu pro příkazouvou řádku a implementuje ty samé funkce.

HIDKeys - USB HID

Jedná se de facto o jednoduchou USB klávesnici se 17tlačítky. Výhodou této konstrukce je, že bylo navrženo jako zařízení ve třídě HID.

Klikněte pro zvětšení

Co je HID?

Zkratka HID (Human Interface Device) by se dala volně přeložit jako zařízení pro komunikaci uživatele s PC. Velkou výhodou hardwaru této třídy je to, že ovladač pro jeho řízení je již obsažen v jadře operačního systému. Je potřeba si uvědomit, že ovladač slouží jenom k tomu aby si hardware "rozuměl" s OS, ale již nic neříká o tom jak se dál naloží se získanými daty. Toto popisuje speciální informační soubor, který říká co je to za zařízení, k čemu slouží a co se má provést když.... (v operačním systému Windows je to například soubor s příponou inf).

Závěr:

Pokud hodláte do svých zařízení implementovat rozhraní USB, dnešní článek vám měl nabídnout trochu jinou cestu jak na to. Hardwarová implementace USB již dnes není neobvyklá i v malých MCU. Ale osobně si myslím, že pro spoustu vývojářů může být softwarové provedení USB vcelku zajímavé a pokud hodláte vyvíjet zařízení ve třídě HID je určitě jednodušší upravit nějaký informační soubor pro popis zařízení (*.inf), než si psát kompletní ovladače sám. Jest-li že s rozhraním USB začínáte a nechcete se přílišně zabývat detaily, doporučujeme se podívat jako první na dokumentaci k projekt PowerSwitch. V něm je komunikace po USB nejjednodušeji pochopitelná.

Odkazy a Download:

  1. Výběr licence
  2. Dokumentace k projektu PowerSwitch
  3. Dokumentace k projektu Automator
  4. Kompilační nástroj pro OS Windows - MinGW
  5. Stránky o programu gPowerSwitch
  6. Dokumentace k projektu HIDKeys
Hodnocení článku: 

Komentáře

Je to hezky projekt a vrele doporucuji - hlavne ten rychly vyvoj aplikace v C-cku.

Igor Češko