Es gibt einige wenige STM32 die crystal-less USB unterstützen. Die ziehen ihren internen 48MHz Quarz auf "Ziel Frequenz" und nehmen dabei den Host als Referenz.
Im allgemeinen braucht du aber exakt 48MHz. Sonst ist das Zufall.
https://community.silabs.com/s/article/usb-clock-tolerance?language=en_US
Hier meinen die, man bräuchte+-0.25% für usb full-speed.
Das wären 47.88 als untere Grenze.
Wenn ich deine 47.92 noch mit 100ppm schmücke, dann bist du da draußen.
Ich würde da Mal anfangen...
Übrigens, ich hatte Mal ein ähnliches Problem, als ich unabsichtlich den internen 8mhz RC Oszillator statt des externen tcxo verwendet hatte. Ging am Tisch meist, aber eben nicht immer. Nachdem ich impedanzen gemessen, Rechner getauscht,... hatte, habe ich am Schluss den takt gemessen (den kannst du auf einen Pin rausrouten), und nach einer 2 Zeilen Änderung im Code waren alle Probleme verschwunden.
Selbiges Spiel kenne ich übrigens von Ethernet. Hatte da Mal unabsichtlich einen mems Oszillator bestückt... Hat mich auch einige Zeit gekostet diesen dummen fehler im BOM zu finden.
73