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