Wie HID Endpoint mit 128 Byte beim ATMEGA32U4

Gast #3452911
Lesenswert?

Hallo,

ich habe ein HID Projekt mit einem ATMEGA32U4 gemacht.
Das ganze basiert auf dem Teensy Projekt.
Ich habe 3 Endpoints (0, out und in).
Zur zeit übertrage ich (out/in) 51Byte.
Jetzt will ich das ganze auf 101 Byte erweitern.

Klingt erst mal ja nicht wild.
Auf Windows Seite die Anzahl von 50 auf 120 ändern.
Und auf dem Prozessor das ganze auch ändern und den USB Buffer auf 128 
(Doppelter Puffer  ->0x46) ändern.

Tja nur leider bekomme ich jetzt immer einen Windows Error 995.
Den bekomme ich aber auch wenn ich im Debugger das langsam mache.
Auch meine Timeout-Zeiten habe ich zum Testen mal verzehnfacht.

Die Byte Anzahl ist es nicht, das ergibt einen Anderen Fehler.

Hat jemand das Problem auch schon mal gehabt?
Hat jemand mal mit den 128 Bit Buffer gearbeitet?

Uli
#3452993
Lesenswert?

Das kann nicht funktionieren, denn ein USB Endpoint ist auf 64 Byte 
beschränkt.

Wenn der Durchsatz von 64000 Byte/s (64 Byte in 1 ms) zuwenig ist, musst 
Du auf Bulk Endpoints umsteigen. Die sind auch nur 64 Byte groß, können 
aber mehrmals im 1ms USB Frame übertragen.

Das erfordert einen Treiber für Windows, aber es gibt auch WinUSB und 
Libusb.

Die 128 Byte beziehen sich auf Doppelpufferung, damit man das nächste 
Frame schon reinschreiben kann während das alte noch gesendet wird.
Gast #3453189
Lesenswert?

Wikipedia hats:
Interrupt-Transfers
Bei Low-Speed können pro Abfrage bis zu 8 Byte, bei Full-Speed bis zu 64 
Byte und bei High-Speed bis zu 1024 Byte übertragen werden.

Tja uns ich habe Full-Speed was dann wohl oder übel 64 Byte sind.
Gast #3453948
Lesenswert?

Jim Meba schrieb:
> Das kann nicht funktionieren, denn ein USB Endpoint ist auf 64 Byte
> beschränkt.

Das stimmt zwar, aber das ist nicht das Problem, da man bei HID nämlich 
Reports versendet und diese können durchaus größer sein als 64 Bytes. 
Bei 101 Bytes müsste dann die Firmware den Report auf zwei Transaktionen 
aufteilen, was aber zusätzliches Handling verlangt, welches wiederum in 
den meisten HID-Stacks nicht implementiert ist.
Das Gleiche gilt dann auch auf PC Seite. Es ist auch hier ein 
Unterschied, ob ich versuche 64 Bytes und 37 Bytes zu empfangen oder ob 
ich 101 Bytes auf einmal annehmen möchte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren