USB HID komunikace

Milan Kořínek xp.robotika na gmail.com
Středa Říjen 29 19:42:34 CET 2014


Zdravím,
já si zrovna taktéž hraji s USB, ale svoje zařízení (Atmel Cortex M3) 
mám nakonfigurované jako Vendor Specific Class s knihovnou na PC 
libusbK, takže neznám moc dobře specifika u HID zařízení.

> - delka paketu z/do EP1 je omezena na 64B nebo muze byt vetsi?
> - EP1 je v popisu HID uvaden jako IN interrupt ale evidentne je 
> pouzivan i pro prenos dat PC->MCU a funguje to,  je to tak OK? Je 
> celkem prakticke, ze se ve windows komunikuje beznymi souborovymi 
> funkcemi a ne pres SET_FEATURES

U HID zařízení se používá pouze jeden interrupt EP (respektive dva IN a 
OUT, každý pro jeden směr). Obecně u tohoto typu EP je maximální 
velikost omezena podle rychlosti USB (LS (Low-speed): 8B, FS: 64B, HS: 
1024), tedy délka paketu určitě nemůže být větší jak těch 64B pro FS, 
ale skutečná velikost pro uživatelská data je odlišná podle použitého 
HID report deskriptoru.

> - v config deskriptoru je nastaven polling interval na 32ms, to 
> znamena, ze odchozi data z EP1 MCU si PC vyzada jen 1x za 32ms? Jde to 
> bez problemu snizit treba na 2 nebo 1 ms a pobezi to maximalni moznou 
> rychlosti?

Tento parametr specifikuje nejvyšší možnou periodu přístupu ke zařízení. 
Tedy nastavíte-li 32ms, pak to bude méně až v nejhorším případě to bude 
právě těch 32ms - obdobně pro 1ms.
Podrobněji je to rozepsáno v USB specifikaci 
(http://www.usb.org/developers/docs/usb20_docs/), kapitola 5.7.4 
Interrupt Transfer Bus Access Constraints

> - v deskriptoru je seriove cislo vzate ze serioveho cisla MCU, 
> skutecne jde najednou zapojit vic stejnych zarizeni, ale to seriove 
> cislo neni nikde primo zjistitelne v PC? Nejaka API funkce vrati jen 
> path pro otevreni souboru, kde to cislo evidentne bude soucasti ale je 
> nejak divne zakodovano...

Mělo by to jít. Podle Googlu by to mohla být funkce 
HidD_GetSerialNumberString() 
http://msdn.microsoft.com/en-us/library/windows/hardware/ff539683(v=vs.85).aspx

> - jak byste vybrali VID/PID pro takovou nejakou neglobalni aplikaci? 
> Ne uplne na hrani ale max. par prototypu, kde by pripadna kolize 
> nebyla problem - v prikladu je VID 0x0483 - jak zjistit kdo to 
> vlastni? PID si predpokladam pak muzu zvolit libovolne nahodne.
>

Pro oficiální zařízení se musí o VID zažádat a PID si lze zvolit dle 
libosti již samotného výrobce (http://www.usb.org/developers/usbfaq#12). 
Například Atmel umožňuje použití jejich VID a PID za určitých podmínek. 
Podívejte se na stránky STM, jak to je ve vašem případě.

Milan


Další informace o konferenci Hw-list