\ Cíl úlohy

Cíl úlohy

Vymezení schopností

Úlohu rozdělíme na dvě kategorie, které se budou lišit svým přístupem k problému implementace rozhraní USB:
  1. modulární program pracující v co nejobecnější rovině. Bude obsahovat podprogramy pro přijetí a kompletní dekódování paketu, odeslání paketu, vyřízení enumerace, výpočet CRC. Vstupem a výstupem budou čistá data, bez NRZI a bit stuffingu, která budou čtena a ukládána do SRAM. Parsování USB paketů bude korektní a nebude v rozporu se specifikací.
  2. minimalistický program se schopností přijmout a odeslat maximálně připravený paket, včetně NRZI, bit stuffingu a hodnot obou diferenciálních vodičů. Vstup i výstup bude čten i psán do jedné oblasti SRAM (málo paměti). Program bude obsahovat funkce pro dekódování paketu (NRZI, bit stuffing), ale nebude pracovat real-time. Enumerace nebude zdaleka počítat se všemi alternativami, které předepisuje USB specifikace. Vzhledem k tomu, že dekódování paketu a jeho parsování je časově náročná operace, bude se pracovat se surovými daty a parsování se bude provádět kontrolou pouze určitých sekcí. Hodnota ostatních dat nebude kontrolována. Enumerace se provede bez všech volitelností (String descriptory, vícenásobné endpointy, ...). V žádném případě nebude kontrolováno CRC příchozích paketů.

Cíl semestrální práce

Cílem semestrální práce je navrhnout a zkonstruovat hardware a naprogramovat software pro procesor ATmega128 a vytvořit tím demonstrační USB zařízení. Vlastnosti a schopnosti zařízení budou následující:
  • USB low-speed zařízení s endpointem 0
  • vstup: tlačítko, výstup: LED
  • enumerace s pevně danými deskriptory, bez kontroly CRC
  • přenos dat pouze kontrolní rourou do endpointu 0
  • bez režimu spánku
  • operační frekvence 15MHz
  • vlastní zdroj napětí
  • ovladače zařízení Thesyscon
Na základě poznatků ze semestrální práce bude možné konstruovat složitější zařízení. Jejich rozpracování bude náplní diplomového semináře a diplomové práce.

Ukázkové aplikace

Následující aplikace jsou pouze ukázkou možného využití USB řadiče v AVR mikrokontroléru. Mohou být realizovány jako odvozeniny demonstračního zařízení, avšak jejich přesnější popis není obsahem této práce.
  1. jednosměrná jednoduchá periferie - A/D převodní, sériový vstup/výstup, blikač, PWM, šifrovací klíč.
    Při použití ATtiny13 s vnitřním RC oscilátorem nebo miniaturním generátorem se zařízení může vměstnat do USB konektoru. Zažízení bude napájeno ze sběrnice. Jeho schopnosti nebudou rozšiřitelné, program bude napsán a optimalizován na konkrétní úlohu.
  2. nabíječka mobilního telefonu nebo AAA baterií - užitečné zařízení monitorující proud a teplotu a informující uživatele o průběhu nabíjení. Nabíječka může fungovat samočinně (i bez USB komunikace), pouze využije napájecí napětí sběrnice (do 500mA).
  3. univerzální I/O - řeší dnešní potřebu vývojářů na jednoduché vstupně-výstupní zařízení, které je přístupné z operačního systému Windows XP, má k dispozici jednoduché knihovny a umožňuje podle potřeby paralelně číst a zapisovat programátorem zvolená data. Použití ATmega8 zaručuje dostatek vstupně-výstupních portů, ale provoz je omezen na 15MHz, v důsledku čehož bude USB řadič zabírat více místa ve flash paměti. Použití ATtiny2313 dovoluje provozovat zařízení na 18MHz. Zdrojem hodinového signálu může být krystal (18MHz - vysoké pouzdro nebo 15MHz - nízké pouzdro) nebo subminiaturní programovatelný generátor.
  4. vývojová deska - pro experimenty a složité aplikace je nejvýhodnější zkonstruovat vývojovou desku pro výkonný procesor ATmega128 s řadou periferií a možností rozšířit paměťový prostor na externí SRAM. Operační frekvence je omezena na 15MHz, ale velikost flash bohatě překračuje potřeby řadiče USB. Je též možné použít USB jako součást bootloaderu a nahrávat přes něj program při přeprogramovávání procesoru. Napájení může být kombinované - buď ze sběrnice nebo externím napáječem. Obě možnosti můžou být zohledněny v Interface Descriptoru.
  5. Mass Storage Device - vrchol pohodlí pro každého programátora je komunikace se zařízením prostřednictvím standardních prostředků. V případě, že se zařízení bude identifikovat jako člen třídy Mass Storage Device (Velkokapacitní zařízení) se souborovým systémem FAT32, bude k obsluze zařízení stačit otevření a zápis do souboru (například input.txt). Zařízení bude tento soubor chápat jako vstupní rouru. Naprosto odpadá problém s programováním ovladačů zařízení, protože ovladače třídy Mass Storage Device jsou standardní součástí operačních systémů. Zařízení bude přenositelné i na OS Linux a i na jiné platformy.
  6. HID - Human Interface Device. Zařízení této třídy poskytuje data v přesně definovaném formátu. Nejprve sděluje, které proměnné jakých typů jsou k dispozici ke čtení nebo zápisu a pak na základě speciálních třídně-specifických požadavků (class-specific requests) s těmito daty operuje. Přestože se jedná o dostatečně obecně definovanou třídu zařízení, je přesto nutné napsat vlastní verzi ovladačů zařízení, které vytvářejí pro zařízení specifický interface. V OS Linux není tento postup nutný, existují volné ovladače, které umožňují číst a zapisovat proměnné HID voláním knihovních funkcí. HID specifikace bohužel nepatří mezi úsporné a jednoduché a od toho se odvíjí i nutnost použít alespoň ATmega8, mají-li všechny descriptory ležet ve SRAM.