Když USB 2.0 nestačí

Pokud člověk tvoří periferní zařízení, které má za úkol po kabelu komunikovat s PC, USB je jasná volba. O USB 1.0 (Full speed) lze dnes zakopnou na každém lepším mikrokontroléru. Co když ovšem chceme vytvořit nějakou periferii s potřebou mnohem rychlejší komunikace – řekněme USB kameru? Profesionální webkamery často používají vlastní zákaznické (ASIC) obvody, které samozřejmě nejsou pro obecné použití a tedy nás příliš nezajímají. Zamýšlený řadič by měl být univerzální, programovatelný a tedy zahrnovat nějaký mikrokontrolér. Pokud se člověk spokojí se skromnějším přenosovým pásmem USB 2.0 lze vybírat ze spousty zajímavých univerzálních řadičů USB periferií (zejména od TI a Cypress), lze například sáhnout po celkem populárním Cypress CY7C68013 (jeho programovatelné jádro tvoří stará dobrá Intel 8051). Pokud je ovšem potřeba přenést zásadně víc dat, nastává čas pro USB3.0. Přestože světu již nějakou dobu vládne novější USB3.1, řadičů pro USB3.0 periferie není stále nijak přehnaný výběr. Velmi zajímavými programovatelnými řadiči USB 3.0 periferií jsou obvody z rodiny Cypress EZ-USB FX3. Obvody této rodiny jsou mimo jiné populární právě v oblasti USB3.0 digitálních kamer.

Jde samozřejmě o vysokorychlostní obvod s BGA pouzdrem. Domácímu bastlení je tedy poněkud unfriendly a jedinou možnost jak si s takovým obvodem pohrát dávají nejrůznější vývojářské kity. Dnes se tedy podíváme na oficiální vývojářský kit obvodu CYUSB3014 a samozřejmě mrkneme podrobněji i na obvod samotný.

USB 3.0

USB 3.0 představuje třetí generaci standardu USB. Podobně jako při přechodu z USB 1.0 na USB 2.0 i tento upgrade standardu přidáší především vyšší přenosové rychlosti – teoreticky až 5 Gbit/s (625 MB/s). Změny ovšem zdaleka nejsou jen o pouhém zvýšení kmitočtu přenosu. USB 3.0 totiž přináší kompletně přepracovanou fyzickou vrstvu komunikace. Zatímco USB 2.0 komunikuje pomocí jednoho obousměrného poloduplexního datového spoje, USB 3.0 se dočkalo dvou nezávislých, asynchronních komunikačních kanálů. Komunikace je tedy v plně duplexním režimu a to s sebou přináší celou řadu výhod.

USB lanes
USB kanály

Díky přítomnosti samostatného vysílacího a přijímacího kanálu lze nyní vést komunikaci efektivněji. USB 3.0 se nezdržuje poolingem (neustálými dotazy od hosta) a tak může být větší část přenosového pásma využita na přenos užitečných dat a mnohem menší část padne na režii přenosu. Ze stejného důvodu je USB 3.0 komunikace také energeticky efektivnější. Slave zařízení může díky asynchronní komunikaci lépě řídit svůj spánkový režim (slave se už nemusí budit každou 1ms aby odpověděl hostu jen to, že existuje). USB 3.0 dále přináší velkorysejší možnosti přenosu napájecího výkonu. To se projevuje zejména na USB 3.0 kabeláži, která má výrazně zvětšený průřez na napájecích vodičích. Díky nekompatibilitě fyzické vrstvy původního USB 2.0 a nového USB 3.0 (a zároveň potřebě zpětné kompatibility mezi oběma) zahrnuje USB 3.0 v sobě standardně i komunikační kanál původního USB 2.0.

CYUSB3014

CYUSB3014 je univerzální programovatelný USB3.0 řadič. Řadič zahrnuje také podporu USB2.0 a USB OTG (On-The-Go) v roli hostitele i v roli periferie. Hlavní zajímavostí řadiče je ovšem plnohodnotné integrované 200MHz ARM jádro ARM926EJ (architektura ARMv5TEJ), které má k dispozici 512KB SRAM. Právě programovatelné ARM jádro ve spolupráci s 58 GPIO piny (s konfigurovatelnými napěťovými úrovněmi) a podporou široké škály klasických sběrnic (UART, SPI, I2C, I2S) dělá z obvodu velmi univerzální nástroj. K CYUSB3014 lze snadno připojit CCD či CMOS obrazový senzor, ale také například externí RAM paměť, jakýkoliv další mikrokontrolér, Arduino, Raspberry Pi a mnoho dalšího. Rychlost GPIO je až 100Mhz a právě vysoká toggling speed je klíčová pro připojení rychlých paralelních sběrnic obrazových senzorů. Zdrojem hodinového signálu pro CYUSB3014 může být externí zdroj 19.2, 26, 38.4 či 52 MHz. Při 19.2Mhz se ovšem CYUSB3014 spokojí i se svým interním oscilátorem a externě je třeba připojit pouze krystal. Vysokorychlostní data, která tečou z GPIO pinů do USB rozhraní samozřejmě nemusí být zdržována v ARM jádru, ale mohou využít propracovaný DMA řadič.

CYUSB3014
CYUSB3014

CYUSB3KIT-001

Vývojářský kit nese označení CYUSB3KIT-001 a vyrábí ho sám Cypress. Deska zajišťuje čipu CYUSB3014 napájení (pomocí několika LDO TPS76801). Z integrovaného obvodu také rozvádí GPIO linky na GPIO headery (Samtec Expansion Connector) a poskytuje zdroj hodin (19.2MHz krystal). Deska dále obsahuje konvertor logických úrovní MAX3378 a řadič RS232 linky MAX13235 – oba obvody zajišťují RS232 komunikaci s CYUSB3014, fyzicky realizovanou prostředníctvím klasického 9-pin D-Sub konektoru. Na desce je také dutinkový konektor pro připojení externího napájení a pak samozřejmě samotný USB3.0 konektor v provedení microUSB.

Cypress package
Cypress EZ-USB FX3 CYUSB3KIT-001

Vývoj softwaru pro CYUSB3014

Všechny nástroje potřebné pro vývoj firmwaru řadiče CYUSB3014 lze nalézt na webu Cypressu. Před stažením je třeba se zdarma zaregistrovat. Je zde dostupná jak dokumentace tak i samotné SDK (EZ-USB FX3 SDK). Firmware je standardně psán v jazyku C (ANSI C). Pro pohodlé psaní softwaru nabízí SDK upravené IDE Eclipse. Kompilování a debugging je prováděn pomocí toolchainu Sourcery CodeBench Lite. Výstupem po zkompilování (a zlinkování) je standardní *.elf binární soubor. Ten je následně pomocí toolu elf2img převeden na image paměti *.img, který již může být nahrán do RAM paměti CYUSB3014 – opět pomocí toolu, který je ve formě pluginu součástí Eclipse. Fyzicky lze nahrání firmwaru realizovat pomocí rozhraní JTAG (vyžaduje speciální HW debugger – např. Segger J-Links) nebo pomocí samotného USB spojení PC s vývojovým kitem. V CYUSB3014 v takovém případě zajištuje USB komunikaci připravený Boot loader. V PC je ovšem potřeba naistalovat příslušný ovladač (je opět součástí SDK, ale je třeba ho naistalovat ručně). SDK zahrnuje rovněž několik vzorových projektů. Vzorové projekty jsou nastavené tak, aby proces převodu na *.img prováděla Eclipse automaticky (post-build event), také includují příslušné knihovny, obsahují vlastní makefile a mnoho dalšího custom nastavení pro cross kompilování na arm926ej-s. Nové projekty je proto zásadně snazší stavět na kopii již nexistujícího, vzorového projektu. Lze se tím vyhnout mnoha problémům.

Asi by se slušelo na závěr přidat malý tutoriál “Jak rozblikat LEDku na řadiči USB3.0” (takový Hello world elektroniků), přesně takový tutoriál je ovšem součástí CYUSB3KIT-001 User Guide na webu Cypressu. Pročež se s vámi rozloučím jen fotkou blikající LEDky na řadiči USB3.0.

LED na GPIO 54 řadiče USB3.0

2 Comments on Když USB 2.0 nestačí

Napsat komentář: Robotista Zrušit odpověď na komentář

Vaše emailová adresa nebude nikde zveřejněna.


*