STM32F4 Discovery, usb endpoint IN2 funktioniert nicht

Gast #2658793
Lesenswert?

hallo zusammen,

ich habe versucht auf dem STM32F4 Discovery Board CDC und HID zusammen 
zum laufen zu bringen, die geräte wurden erkannt und funktionierten auch 
fast!
maus gut, seriell out (pc->stm) gut, nur seriell stm32->pc funktioniert 
nicht. die daten wollen einfach nicht raus. nach langem hin und her 
mußte ich feststellen, dass es an dem endpoint IN2 liegt. alles 
zurückgebastelt und cdc einzeln betrieben, endpoint 1 für in und out 
verwendet -> alles gut.
endpoint 2 für in und out verwendet -> daten wollen nicht raus. gleiches 
mit HID einzeln versucht, genau das gleiche! alle in endpunkte (stm->pc) 
größer 1
scheinen nicht zu funktionieren. nach langem debuggen mußte ich 
feststellen dass der fifo des EP2 nicht leer wird. "diepint.b.xfercompl" 
ist immer 0 für endpunkte > 1. dies läßt sich ganz einfach mit dem 
standard DEMO nachvollziehen indem man HID_IN_EP auf 0x82 setzt. die 
maus funktioniert nicht mehr! ich geh mal davon aus, dass es sich um ein 
bug von st handelt.
oder hat da jemand ne andere idee oder sogar ne lösung ? wer hat schon 
mal in-endpunkte 2 oder 3 erfolgreich verwendet ?
Gast #2659075
Lesenswert?

hallo,

vielen dank für die antwort.

der code ist orginal demo vom discovery, alles hübsch von vorne bis 
hinten mit defines, schön ordentlich, so wie es sich gehört.

wer ein hid oder cdc oder sonst was mit usb auf dem STM32F4 Discovery am 
laufen hat möge doch bitte mal seinen XX_IN_EP auf 0x82 stellen und 
schauen obs noch geht.

meine glaskugel hab ich auch schon gefragt, konnte mir leider auch nid 
wirklich helfen.

hier mal etwas code, denke da sieht man deutlich, dass der endpoint 
descriptor in ordnung ist. wie gesagt, mit 0x81 gehts mit 0x82 nicht, 
egal ob cdc oder hid.


#define HID_IN_EP                    0x82 // geht nicht
//#define HID_IN_EP                    0x81 // geht
....
 /******************** Descriptor of Mouse endpoint 
********************/
  /* 27 */
  0x07,          /*bLength: Endpoint Descriptor size*/
  USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
  HID_IN_EP,     /*bEndpointAddress: Endpoint Address (IN)*/
  0x03,          /*bmAttributes: Interrupt endpoint*/
  HID_IN_PACKET, /*wMaxPacketSize: 4 Byte max */
  0x00,
  0x0A,          /*bInterval: Polling Interval (10 ms)*/

...

static uint8_t  usbd_cdc_Init (void  *pdev, uint8_t cfgidx) {

    DCD_EP_Open(pdev, HID_IN_EP, HID_IN_PACKET, USB_OTG_EP_INT);

....

}
Gast #2663743
Lesenswert?

Du zeigst einen HID-Endpunkt und eine CDC-Init() Funktion. Ob denn dass 
zusammen passt?

Was steht denn im Datenblatt? Gibts den EP2 überhaupt? Wird der auch auf 
dem Board verwendet? Ist der in der Firmware implementiert? Hast Du mal 
einen Link zu den Datenblättern? Kannst Du mal die Descriptoren 
anhängen, dass man damit auch etwas anfangen kann?

Gruß Potter
Gast #2663878
Lesenswert?

Hallo,

richtig, die CDC-Init() und HID-Endpunkt passen augenscheinlich nicht 
zusammen. Dies ist noch ein Relikt aus vorangegangenen Versuchen. Hat 
aber mit dem eigentlichen Problem nix zu tun.

Laut Datenblatt werden 4 Endpunkte unterstützt. Die Firmware ist auch 
für mehrere Endpunkte ausgelegt.


Datenblatt des STM32F407:

http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/DM00037051.pdf

Beschreibung des STM32F4DISCOVERY:

http://www.st.com/internet/evalboard/product/252419.jsp

Hier gehts direkt zum Source Code:

http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4discovery_fw.zip

Grüße, Peter
#3360038
Lesenswert?

Ich hatte ein ähnliches Problem und bin auf der Suche nach einer Lösung 
u.a. hier gelandet, den entscheidenden Hinweis habe ich aber hier 
gefunden:

https://my.st.com/70dc966b

Kurz gesagt musste ich in usb_conf.h die Zeilen

#define TX1_FIFO_FS_SIZE 128
#define TX2_FIFO_FS_SIZE 0

durch

#define TX1_FIFO_FS_SIZE 64
#define TX2_FIFO_FS_SIZE 64

ersetzen, damit endpoint 0x82 funktioniert (die genauen Werte für die 
FIFO-Größe hängen wohl von einigen anderen Dingen ab, z.B. maximum 
packet size).

Schöne Grüße,
Markus

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