Hallo, seit einiger Zeit versuche ich mich am USB_OTG_FS vom STM32F446R/V/Z. Ich möchte einen normalen Zugang über z.B. ein Terminal haben, und dabei die SPL oder Registerprogrammierung über CMSIS verwenden. Geht aber leider nicht.
Der D+ vom USB wird über die 5V Vcc vom USB-Port selbst hochgezogen (1.5k). Das Board ist ein Eigenbau mit 8MHz HSE, wo verschiedene MCU drauf laufen können. Der USB darauf funktioniert mit SPL-OTG-Treibern von ST beim STM32F405, STMF401, STM32F429, STM32F407 und am STM32F103 oder STM32F042 mit unterschiedlichen Treibern (auch mit dem Code von W.S.). Aber nicht beim STM32F446.
Verwende ich die HAL und CubeIDE/MX, läuft auch der STM32F446 USB problemlos. Sowohl getaktet über PLLQ (mit SystemCoreclock 168MHz, PLLM 8, PLLN 336, PLLP 2, PLLQ 7) als auch über PLLSAI (SystemCoreclock 180MHz, PLLSAIM 8, PLLSAIN 192, PLLSAIP 4).
Im Netz/Datenblatt habe ich gelesen, dass VBUS-sensing abgeschaltet werden soll. Das habe ich nach RM390 in OTG_GCCFG (Offset 0x38) mit Bit21 auch getan. Mit den Registern OTG_GUSBCFG (Offset 0x0C) habe ich experimentiert und Force Device (Bit30) gesetzt sowie HNP_CAP (Bit9) und SRP_CAP (Bit8) abgeschaltet. Außerdem Timings geändert, und die Enumeration testweise über einen GPIO-Pin verzögert. Auch den Trick verwendet, per GPIO PA12 OutputMode den D+ für >50ms auf low zu ziehen, und dann neu enumerieren zu lassen.
->Nichts geht. Irgendwo wird in der HAL etwas richtig gemacht, was in den OTG-Treibern von ST nicht passiert.
Hat jemand von euch schon einen STM32F446 mit USB über die SPL am Laufen oder weiss, was da besonders beachtet werden muss?