Hallo zusammen,
ich habe ein blödes Problem, bei dem ich nichtmal weiß wie ich es
richtig debuggen kann. Ich habe einen STM32F7 mit USBLC6-Filter und
Spannungsteiler für VBus (nach Vorgaben aus einem der ST-Manuals), und
daran quasi direkt die Adern eines USB Kabels. Die Leiterbahnen sind
insgesammt etwas unter 1cm lang, und ich habe beim Layout auf die
korrekte Impedanz geachtet bzw. die Leiterbahnbreiten danach berechnet.
Wenn ich in CubeMX die Clocks, USB FS und CDC-Device konfiguriere,
kompiliere und den uC damit programmiere, wird jedoch von Windows kein
Gerät erkannt. Wenn ich mit Wireshark und USBPcap die "Verbindung"
aufzeichne, sehe ich beim Einstecken des USB-Steckers nur folgendes:
1 | Frame 1: 28 bytes on wire (224 bits), 28 bytes captured (224 bits)
|
2 | USB URB
|
3 | [Source: 2.2.1]
|
4 | [Destination: host]
|
5 | USBPcap pseudoheader length: 27
|
6 | IRP ID: 0xffffc900be0d22f0
|
7 | IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
|
8 | URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
|
9 | IRP information: 0x01, Direction: PDO -> FDO
|
10 | URB bus id: 2
|
11 | Device address: 2
|
12 | Endpoint: 0x81, Direction: IN
|
13 | URB transfer type: URB_INTERRUPT (0x01)
|
14 | Packet Data Length: 1
|
15 | [bInterfaceClass: Unknown (0xffff)]
|
16 | Leftover Capture Data: 10
|
Und das ist dann alles. Ich würde mich sehr über Hinweise freuen wie ich
das Problem überhaupt angehen könnte. Bisher habe ich nur verschiedene
Konfigurationen in CubeMX bzw. dem Code getestet, die physikalische
Verbindung mehrfach überprüft, die Datenleitungen mal vertauscht,
sichergestellt, dass der VBus-Pin High ist wenn der Stecker eingesteckt
ist, und weiß nicht mehr richtig weiter. Das Problem ist, dass die
Enumeration etwas im Verborgenen des uCs gemacht wird, und sobald ich
versuche per SW-Debugger die USB-Register auszulesen stürzt der Debugger
ab.
Falls mir da jemand einen Tipp geben könnte wäre ich sehr dankbar.