Forum: Mikrocontroller und Digitale Elektronik stm32f4discovery usb hid


von Thomas W. (ratos)


Lesenswert?

Hallo,

ich versuche gerade mit Hilfe der STM32_USB-Host-Device_Lib_V2.1.0 eine 
USB-Tastatur an meinem stm32f4discovery anzusteuern.
Ich habe bereits erfolgreich ein Projekt auf den µC flashen und 
ausprobieren können. Dabei ist mir aufgefallen, dass die angeschlossene 
Tastatur erkannt wird, weil die Funktionen USBH_USR_Init(), 
USBH_USR_DeviceAttached(), USBH_USR_ResetDevice() und 
USBH_USR_DeviceSpeedDetected(uint8_t DeviceSpeed) aufgerufen werden.
Danach bleibt phost->gState HOST_CTRL_XFER und phost->Control.state 
CTRL_SETUP_WAIT, sodass USBH_USR_EnumerationDone() nie aufgerufen wird.

Ich habe bereits google um eine Lösung bemüht, jedoch ohne Erfolg. 
Deshalb hoffe ich, dass ihr mir helfen könnt. Wenn trotz der 
Beschreibung ein Codeausschnitt benötigt wird bin ich gerne bereit ihn 
zu posten.
Vielen Dank

Thomas

von Thomas W. (ratos)


Lesenswert?

wenn niemand das selbe Problem hat, dann wäre ich über einen 
übersichtlichen (nicht das Beispiel von ST), funktionierenden Code sehr 
erfreut :)

von ansel (Gast)


Lesenswert?

Ist der USB-Takt bzw. die PLL richtig konfiguriert?  Ein Gerät
und dessen Geschwindigkeit wird durch Pullup-Widerstände an den
Datenleitungen erkannt, was auch "funktioniert", wenn der Takt
völlig daneben ist.  Erst bei der Enumeration geht es dann
schief...

von Uwe (Gast)


Lesenswert?

Wieviel Strom zieht denn die Tastatur ?

von ansel (Gast)


Lesenswert?

Noch ein Vorschlag: Da es sich höchstwahrscheinlich um ein low-speed 
device handelt (1.5 MBit/s), kann man relativ leicht an den 
USB-Leitungen mitlesen. Wenn kein Logikanalyzer vorhanden ist, tut's 
auch ein AVR mit 12MHz-Quarz.

Wie es auf den Leitungen ausschauen sollte, ist hier beschrieben:
http://www.beyondlogic.org/usbnutshell/usb1.shtml

von Thomas W. (ratos)


Lesenswert?

Erst einmal vielen Dank für die Antworten.
Die PLL ist mit 48MHz korrekt eingestellt.
Laut Verpackung braucht die Tastatur 50mA bei 5V.

Vor dem mitlesen an den Leitungen gibt es jetzt noch ein anderes 
"Problem":
Ich habe die Versorgungsspannung an der USB-Buchse (CN5 vom Board) 
gemessen. Es liegen nur knapp 3V, also die Versorgungsspannung des µC 
an, obwohl das Board mit einer 5V-Quelle gespeist wird. Nach meinem 
bisherigen Wissen müssen bei USB 5V anliegen, oder irre ich mich da?
Die Tastatur braucht ja auch 5V.

Im Quelltext der USB-Bibliothek steht noch:
"On-chip 5 V VBUS generation is not supported. For this reason, a charge 
pump or, if 5 V are available on the application board, a basic power 
switch, must be added externally to drive the 5 V VBUS line. The 
external charge pump can be driven by any GPIO output. When the 
application decides to power on VBUS using the chosen GPIO, it must also 
set the port power bit in the host port control and status register 
(PPWR bit in OTG_FS_HPRT)."
Aber eigentlich sollte ja hardwaremäßig alles auf dem Discovery-Board 
vorhanden sein (es ist schließlich sogar die Buchse verbaut).

von ansel (Gast)


Lesenswert?

Thomas W. schrieb:
> gemessen. Es liegen nur knapp 3V, also die Versorgungsspannung des µC
> an, obwohl das Board mit einer 5V-Quelle gespeist wird. Nach meinem
> bisherigen Wissen müssen bei USB 5V anliegen, oder irre ich mich da?
> Die Tastatur braucht ja auch 5V.

Ack, bei 3V würde es mich nicht wundern, dass die Tastatur nicht
antwortet.

> Im Quelltext der USB-Bibliothek steht noch:
> "On-chip 5 V VBUS generation is not supported. For this reason, a charge
> pump or, if 5 V are available on the application board, a basic power
> switch, must be added externally to drive the 5 V VBUS line. The
> external charge pump can be driven by any GPIO output. When the
> application decides to power on VBUS using the chosen GPIO, it must also
> set the port power bit in the host port control and status register
> (PPWR bit in OTG_FS_HPRT)."
> Aber eigentlich sollte ja hardwaremäßig alles auf dem Discovery-Board
> vorhanden sein (es ist schließlich sogar die Buchse verbaut).

Ja, als power switch ist auf dem Discovery ein STMPS2141STR verbaut, der
die 5V-Schiene des Discovery-Boards bei 500mA auf CN5 schalten kann.
Sein ¬EN hängt an PC0.  Solange er keinen ¬FAULT anzeigt (PD5 und rote
LED neben CN5), sollte deutlich mehr als 3V messbar sein.

von Thomas W. (ratos)


Lesenswert?

Vielen, vielen Dank, ansel!
Jetzt funktioniert es endlich. Das User Manual genauer anschauen hätte 
mir einiges erspart...
Nur schade, dass man den VBUS-Pin (PA9) auch nicht für andere Dinge 
verwenden kann.
Naja, damit ist das Problem erledigt, vielen Dank nochmal.

Thomas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.