Teknisk dybdeanalyse av lesepenn USB HID og HID over GATT, inkludert deskriptoroppsett, OS-driveratferd, latensbudsjetter og OEM-integrasjon.

Publisert: sep 23, 2020 - 65 Visninger

Lese penn USB HID og HID over GATT: Kablet og trådløs Human Interface Design

Målgruppe: OEM/ODM-maskinvareintegratorer, innebygde firmware-ansvarlige og merkevareansvarlige produktledere som må vurdere om en smart lesepenn bør presentere seg som en standard USB HID, en Bluetooth HID-over-GATT-enhet, eller begge deler, og hvilke avveininger dette valget skaper for driveromfang, OS-kompatibilitet og kostnader til feltservice.

Når en sluttbruker trykker en smart lesepenn mot en utskrevet side og vertsdatamaskinen reagerer på under 80 ms, bedømmes den opplevde kvaliteten til produktet etter en transportprotokoll brukeren aldri ser. Lesepennen i seg selv er bygget på vår 11-modell-plattform (B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6). Elleve SKU-er, to fabrikkaper, 86 firmware-revisjoner, 230+ distributører, 47 land siden 2023, og hver eneste av dem må fungere sømløst med minst tre human-interface device-stakker: Windows HID over USB, macOS HID over USB, Android HID over GATT (HOGP) og iPadOS HID over GATT. Å gjøre feil her er den raskeste måten å gjøre en CE/FCC/UKCA-kompatibel penn til et returproblem.

Denne veiledningen går gjennom hva USB HID faktisk ser ut som inni en lesepenn, hva HID over GATT (HOGP) betyr for den samme silisiumen, hvordan de to transportene deler ett enkelt deskriptorkart, og de tekniske avgjørelsene en ODM-kunde må låse før verktøybygging. Vi jobber med vår produksjonsfirmware (B1/B2 på 2.4.7, F8 på 3.1.2, K7/KF1 på 1.9.5, L5 på 4.2.0, P2 på 2.0.3, Q6/Q8 på 3.3.1, T2/Y6 på 2.6.4), vår standard BOM (Nordic nRF52840 eller Realtek RTL8763E MCU-familier, avhengig av modell) og vår faktiske sertifiseringsportefølje (CE/RED/EMC/LVD, FCC, UKCA, EN 71-1/2/3, ASTM F963, RoHS, REACH, samt regionale merker PSE/KC/GNOM/SFDA/SNI/NOM/INMETRO/RCM).

1. Hvorfor en lesepenn bør være HID, ikke en egendefinert bulk-endpoint

En lesepenn er, fra vertens perspektiv, en inndataenhet pluss et lite lyduttak. Brukeren forventer at tekst-til-tale-utgangen havner i en media-klasse-sink, og at ethvert «trykk» registreres som et museklikk eller et tastetrykk, ikke som en privat SDK-hendelse. Hvis firmwaren eksponerer en leverandørspesifikk bulk-endpoint, ryker tre ting:

  1. Verten trenger en egendefinert driver. På Windows 11 betyr dette en INF, en CAT-signatur og en innsending til Microsoft Hardware Dev Center. På macOS betyr det en kext eller en DriverKit-utvidelse. På ChromeOS betyr det en egen utvidelses-ID. På iPadOS er det uaktuelt uten MFi.
  2. HID-stakkene vet allerede hvordan de skal enumerere, hot-plugge, suspendere, gjenoppta og balansere batteri. En egendefinert stakk må reimplementere alt dette.
  3. Lydutgang krever da et eget USB Audio 1.0/2.0-grensesnitt, som dobler deskriptoren og legger til enda en driverlast. På en penn med BOM på $3.80–$14.50 er dette uakseptabelt.

Ved å mappe OID-tappehendelsen til en HID-tastaturusage (eller en leverandørdefinert consumer-control-usage) og strømme-TTS til en USB Audio- eller HID-Notification-strøm, oppfører den samme pennen seg som to standardgrensesnitt på én enkelt sammensatt enhet. Vi har sendt 47 000+ enheter i denne konfigurasjonen siden 2023, og returandelen knyttet til «ikke gjenkjent av vert» ligger under 0,6 % på tvers av de elleve SKU-ene.

Kjøpertips: Hvis salgsmateriellet ditt lover «plug-and-play på Windows, macOS, ChromeOS, Android og iPad», er den eneste realistiske måten å holde dette løftet å eksponere pennen som en sammensatt HID-enhet over USB og HOGP over Bluetooth. Enhver leverandør som sier de kan gjøre dette med en proprietær driver, selger deg en supportkontrakt.

2. Grunnleggende om USB HID inni pennen

USB HID-klasspesifikasjonen (HID 1.11 med usage tables 1.5) definerer én enkelt endpoint-type som frakter rapporter i begge retninger. Inni pennen ser deskriptortreet omtrent slik ut:

Lag Formål Typisk størrelse
Enhetsdeskriptor VID/PID, bcdUSB, bDeviceClass = 0 (sammensatt) 18 bytes
Konfigurasjonsdeskriptor Strøm, antall grensesnitt 9 bytes
Grensesnitt 0 (HID) Tastatur + leverandørusage for OID-trykk 9 + 9 + 7 bytes
Grensesnitt 1 (HID) Consumer Control for play/pause/spor 9 + 9 + 7 bytes
Grensesnitt 2 (Audio) Høyttalerstrømming, TTS-avspilling avhengig av klasse
HID Report Descriptor Det faktiske usage-kartet (se TC-058) 80–180 bytes
Strengdeskriptor indeks 1–4 Produsent, produkt, serienummer, språk 4 + N bytes

Pennens MCU-firmware bygger dette treet ved enumerering. På vår Q6/Q8-plattform tar deskriptormontering 4,3 ms etter USB RESET. På L5 (som bruker en ekstern USB PHY) tar det 6,1 ms. Begge er godt innenfor USB 2.0-spesifikasjonens 100 ms-budsjett fra tilkobling til enumerering.

Pennen annonserer seg som en sammensatt enhet med bDeviceClass = 0x00 og bDeviceSubClass = 0x00, og bruker Interface Association Descriptor (IAD) for å gruppere HID-grensesnittene. Dette er konfigurasjonen Windows 10/11 forventer for en flerfunksjonsenhet med én HID-stakk og én lydstakk.

3. HID over GATT (HOGP) — Bluetooth-speilet

HOGP er definert av Bluetooth SIG i spesifikasjonen HID over GATT Profile (vedtatt 2013, revidert 2021). Den bruker ikke den klassiske Bluetooth HID-profilen (som ligger oppå L2CAP over BR/EDR). I stedet tunnelerer den HID-rapporter gjennom GATT-notifications og indications oppå LE.

Kartleggingen er enkel:

USB HID-konsept HOGP-ekvivalent
HID Report Descriptor Lest fra én enkelt karakteristikk (UUID 0x2A4B)
Input Report (enhet → vert) Notification på 0x2A4D
Output Report (vert → enhet) Write Without Response på 0x2A4C eller Write på 0x2A4D
Feature Report Read/Write på 0x2A4D
Protocol Mode-karakteristikk 0x2A4E (Report Protocol vs Boot Protocol)

Pennens firmware beholder ett kanonisk deskriptorkart. Når transporten er USB, eksponeres deskriptoren over HID-endpointen. Når transporten er BLE, serveres de samme deskriptorbytene av HID Report Descriptor-karakteristikken (0x2A4B), og den samme rapportnyttelasten (typisk 8-byte boot-stil tastaturrapporter pluss en 16-byte leverandørdefinert tap-rapport) sendes på HID Report-karakteristikken (0x2A4D) via notifications.

På F8 (RTL8763E, BLE 5.1) er varslingsintervallet konfigurerbart mellom 7,5 ms og 4 s. Vi leverer F8-firmware med 15 ms tilkoblingsintervall, 0 dBm TX, 1 Mbit PHY, som gir en effektiv 6,4 ms ende-til-ende-latens fra pennespiss-berøring til tastetrykk på verten. Det er tallet distributørene våre ser i klasserom, og det er tallet vi måler på hvert produksjonsparti ved hjelp av en Saleae-logikkanalysator på F8s testpunkter.

4. Dele deskriptorkartet på tvers av transportlag

Den desidert vanligste feilen vi ser fra kunder som kommer med en ikke-USB-penn og ber oss om å bare «legge til Bluetooth», er at de beholder to deskriptorkart. Dette dobler QA-matrisen og skaper en type feil der den kablede pennen fungerer på en skoledatamaskin, mens den trådløse pennen oppfører seg feil på den samme Chromebooken.

Vår standardarkitektur er:

[OID event source] -> [Vendor report assembler] -> {USB HID-endepunkt | GATT 0x2A4D}
                                                       ^               ^
                                                       |               |
                                                  [Descriptor map] --'
                                                  (single source of truth)

Vendor-rapportmontøren tar den 16-byte store OID-hendelsesnyttelasten (side-ID 4 byte, kode 4 byte, språk 1 byte, sekvens 2 byte, dwell 2 byte, flagg 1 byte, reservert 2 byte) og pakker den inn i enten en oppstartsrapport for tastatur (når Protocol Mode = Boot) eller en leverandørdefinert rapport (når Protocol Mode = Report). Den samme bytestrømmen sendes ut på USB-endepunkt EP1 IN eller BLE-karakteristikk 0x2A4D.

E2E Latency (ms), lower is better

5. Strøm- og batterikonsekvenser

HID over GATT krever at pennen opprettholder en tilkobling. På en 700 mAh B1 blir tilkoblingsintervall, slave-latens og tilkoblingshendelsens lengdebudsjett til et stabilt strømforbruk på 1,4 mA på F8-radioen vs 0,0 mA i USB-suspendering. Våre kjøretidstester (TC-047) viser:

Modell Batteri USB HID (lyd spilles av) BLE HOGP (lyd spilles av) Inaktiv, BLE tilkoblet
B1 700 mAh 5,0 t 4,6 t 38 t
B2 800 mAh 5,5 t 5,0 t 42 t
F8 600 mAh 4,5 t 4,0 t 32 t
K7 800 mAh 6,0 t 5,5 t 48 t
KF1 800 mAh 6,0 t 5,5 t 48 t
L5 1200 mAh 8,5 t 7,8 t 64 t
P2 500 mAh 4,0 t 3,6 t 28 t
Q6 900 mAh 6,5 t 6,0 t 52 t
Q8 1000 mAh 7,0 t 6,4 t 56 t
T2 2500 mAh 14,0 t 13,0 t 110 t
Y6 2000 mAh 11,0 t 10,2 t 90 t

For skoledistribusjoner som driftes 6 timer om dagen, er T2 og Y6 de eneste modellene som holder en hel skoledag på BLE uten å lades på nytt. For en leveranse på 12 000 enheter til en gulfstat som vi sendte i fjor, utgjorde 80 % av ordren T2, spesifikt av denne grunnen. De resterende 20 % var Y6 som reserveenheter til personalrommet.

6. Multi-Host-paring og re-paringsatferd

En lesepenn må huske mer enn én vert fordi den typiske brukeren flytter seg mellom en stasjonær klasseroms-PC, en lærers bærbare PC og et personlig nettbrett. Fastvaren vår lagrer opptil 8 parede enheter (LE) og opptil 4 USB-opprettelseskontekster (vertssidens bussadresse). Når en penn opprettes av en ny USB-vert, oppretter den ikke HID-grensesnittet på nytt – den bruker den bufrede konfigurasjonen, noe som reduserer gjenopprettingstiden fra ~95 ms til ~12 ms.

På BLE-siden bruker vi rettet annonsering ved tilkobling til en kjent enhet (vi hopper over den generelle oppdagelsesfasen på 1,28 s), noe som sparer ~700 ms ved gjenoppkobling. Kostnaden er at pennen må vite hvilken enhet som er «gjeldende», noe vi lagrer i ikke-flyktig minne med en slitasjeutjevnet skriving (se TC-032 for policyen for NAND-slitasjeutjevning).

7. Samsvar- og sertifiseringsomfang

En lesepenn som annonserer en radio og en USB-protokoll må testes mot:

Region Standard Hva den dekker
EU EN 301 489-1 / -17, EN 300 328, EN 62479 EMC, RF, SAR
US FCC Part 15B (USB-stråling), Part 15C (BLE) Utilsiktet + tilsiktet radiator
CA ISED RSS-Gen, RSS-247 Canadisk radio
JP MIC (tidligere TELEC), ARIB STD-T66 BLE i 2,4 GHz
KR KC RF, KC EMC Korea
AU/NZ RCM, AS/NZS 4268 Australia/NZ
IN WPC, ETA India
GCC TDRA / ESMA Saudi-Arabia / De forente arabiske emirater
BR Anatel Brasil

Vi tester USB-stråling i et 3 m semi-anechoic kammer med pennen i både USB 2.0 High Speed og USB 2.0 Full Speed, samt USB Suspend. Vi tester BLE i samme kammer med hoppemodus aktivert. En enkelt ny test koster $1 400 i laboratorieavgifter; ny sertifisering av en eksisterende SKU på en ny radiomodul koster $4 800. Det er derfor HID-radiomodulen vår er låst på plattformnivå (Nordic nRF52840 revisjon 2 eller Realtek RTL8763E revisjon B), og vi fraråder kunder å «bytte til en billigere BLE-brikke» fordi kostnaden for ny testing utligner BOM-besparelsen.

8. Feltfeilmoduser vi faktisk har sett

På tvers av de 47 000+ enhetene som er sendt, fordeler HID-relaterte feltsaker seg slik:

Feilmodus % av HID-saker Løsning
Vert opprettes ikke ved første tilkobling 34 % Oppdater USB-deskriptor, sørg for bcdDevice >= 0x0200
Lydglitch på USB FS, men ikke HS 22% Legg til adaptiv ISO-endepunkt, endre bInterval til 4 ms
HID-rapporter dupliseres på Windows 11 22H2 18% Deaktiver køing av HID-innputtrapport i OS, ingen endring på penn-side
Boot-protokoll ikke annonsert 11% Legg til 0x2A4E Protocol Mode-characteristic med Report som standard
GATT-varsler faller fra hverandre på iPadOS 16 9% Reduser MTU fra 247 til 185, forkort connection interval
Lydruting til feil mottaker 6% Tilbakestill interface-tilknytning ved USB-busreset

Den viktigste lærdommen: hver HID-stakk (Windows, macOS, iPadOS, Android, ChromeOS) tolker «input report queueing» litt forskjellig. Vår produksjonsfirmware sender nå en rapport med null lengde ved busreset, som tvinger hver vert til å tømme køen sin. Den ene endringen reduserte volumet av HID-saker fra 1,9 % av forsendelsene til 0,6 %.

9. ODM-beslutningssjekkliste før verktøy

For en kunde som kommer med sitt eget merke, er dette spørsmålene som må låses før vi åpner en form:

Spørsmål Standard Hvorfor
USB-transport påkrevd? Ja Skole + kontorbruk
BLE-transport påkrevd? Ja Nettbrett-første-markeder
Report-protokoll eller boot-protokoll? Report App-integrasjon
Egendefinert usage page? 0xFF00 Merkevaredifferensiering
Lyd over USB, BLE eller begge? Begge Samsvar + klasserom
iAP2 / MFi påkrevd? Bare hvis iOS-eksklusiv Kostnadsøkning ~$1,20/enhet
Leverandørspesifikk HID usage? Ja OID-hendelseskart

Vi kjører denne sjekklisten i den første scoping-samtalen og fryser den før PCB-layout. Endringer etter layout legger til $4 000–$28 000 i form-omarbeiding pluss 6 ukers forsinkelse i tidsplanen.

10. Eksempel på HID-deskriptor vi leverer på Q6/Q8

En 92-byte HID-rapportdeskriptor for Q6/Q8-plattformen ser omtrent slik ut:

0x05, 0x01,        // Usage Page (Generic Desktop)
0x09, 0x06,        // Usage (Keyboard)
0xA1, 0x01,        // Collection (Application)
0x05, 0x07,        //   Usage Page (Keyboard)
0x19, 0xE0,        //   Usage Minimum (224)
0x29, 0xE7,        //   Usage Maximum (231)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x75, 0x01,        //   Report Size (1)
0x95, 0x08,        //   Report Count (8)
0x81, 0x02,        //   Input (Data,Var,Abs)
0x95, 0x01,        //   Report Count (1)
0x75, 0x08,        //   Report Size (8)
0x81, 0x03,        //   Input (Const,Var,Abs)
0x05, 0x0C,        //   Usage Page (Consumer)
0x09, 0xE9,        //   Usage (Volume Up)
0x09, 0xEA,        //   Usage (Volume Down)
0x09, 0xCD,        //   Usage (Play/Pause)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x75, 0x01,        //   Report Size (1)
0x95, 0x03,        //   Report Count (3)
0x81, 0x02,        //   Input (Data,Var,Abs)
0xC0,              // End Collection
0x06, 0xFF, 0x00,  // Usage Page (Vendor Defined 0xFF00)
0x09, 0x01,        // Usage (OID Event)
0xA1, 0x01,        // Collection (Application)
0x15, 0x00,        //   Logical Minimum (0)
0x26, 0xFF, 0x00,  //   Logical Maximum (255)
0x75, 0x08,        //   Report Size (8)
0x95, 0x10,        //   Report Count (16)
0x09, 0x02,        //   Usage (OID Payload)
0x91, 0x02,        //   Output (Data,Var,Abs)
0xC0               // End Collection

Denne deskriptoren lever i ROM på Q6/Q8-plattformen. På F8 (kun BLE 5.1) leverer vi en 76-byte variant kun med tastatursamlingen, fordi Apple/Android-nettbrett ikke trenger consumer-control-siden for trykkhendelser.

11. Hvordan dette henger sammen med de 7 andre artiklene

[fiks: engelsk-rest] Dette er artikkel TC-057 i klyngen for trådløs og kablet tilkobling. TC-058 går gjennom deskriptoren byte for byte. TC-059 dekker SSP-sammenkoblingsprotokollen som brukes for å sette opp BLE-siden. TC-060 dokumenterer GATT-tjenesten og UUID-kartet for karakteristikker. TC-061 forklarer hvordan varslinger planlegges og strupes (rate-limiting). TC-062 dekker Wi-Fi AP-klargjøring for L5/Y6-modellene som har en 802.11-radio. TC-063 dekker mDNS / DNS-SD-tjenesteoppdagelse for L5-klasseromsscenarioet. TC-064 dekker CoAP for IoT-telemetri med lav overhead fra den samme L5-plattformen.

Fem spørsmål vårt fastvare-supportteam får hver uke om USB HID og HOGP, med svar knyttet til den faktiske produksjonsfastvaren og vår standard BOM.

13. Relatert lesning


Be om tilbud — få raskt svar fra fabrikken

Frequently Asked Questions

Opptrer lesepennen som et standard HID-tastatur eller en egendefinert enhet?
Pennen opptrer som en sammensatt USB HID-enhet med en standard tastatursamling samt en leverandørdefinert bruksside 0xFF00 for 16-byte OID-hendelsespayload. Dette leveres på B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6. Ingen egendefinert INF kreves på Windows 10/11 eller macOS 12+.
Hva er HOGP-rollen til lesepennen på Bluetooth LE?
Pennen er HID-enheten (GATT-server) og verts­enheten – telefon, nettbrett eller bærbar PC – er HID-verten (GATT-klient). Pennen annonserer HID-tjeneste-UUID 0x1812 og leverer Report-karakteristikken 0x2A4D via notifikasjoner. Standard tilkoblingsintervall er 15 ms på F8-fastvare 3.1.2.
Kan pennen bruke samme deskriptor på USB og Bluetooth?
Ja. Vi bruker ett kanonisk deskriptor­kart lagret i ROM og serverer det både som USB HID Report Descriptor (returnert på GET_DESCRIPTOR) og som verdien av 0x2A4B-karakteristikken. Dette er det våre 230+ distributører stoler på for driverløs virkemåte på tvers av plattformer.
Hvorfor ligger lydkanalen på et eget USB-grensesnitt og ikke på HID?
HID er en endepunkt av interrupt-type med begrenset båndbredde. TTS-avspilling kan kjøre på 64 til 256 kbps, noe som overstiger kapasiteten til interrupt-endepunkt. Vi plasserer TTS på et USB Audio 1.0-grensesnitt med adaptivt ISO-endepunkt, bInterval 4 ms, slik vi leverer det på Q6/Q8-fastvare 3.3.1.
Hvordan re-tester dere pennen når vi byttet BLE-brikkprodusent?
Et byte av BLE-brikkesett krever delvis re-sertifisering: FCC Part 15C, EN 300 328, ISED RSS-247, MIC og KC kjøres alle på nytt. Vår erfaring fra 47 000+ enheter viser at laboratorie­kostnaden havner mellom 4 200 og 5 800 USD per region, pluss 4 til 6 uker kalendertid. Vi anbefaler sterkt å låse radiomodulet.
Din handlekurv
Din opplevelse på dette nettstedet blir bedre hvis du tillater informasjonskapsler. Informasjonskapselpolitikk
Chat on WhatsApp