Warum hat USB Start-of-Frame-Pakete?

Ich entwickle eine Hochgeschwindigkeits-USB-Firmware für den STM32F746VG , und auf Seite 1411 (unter Abschnitt 37.16.3, Schritt 2) wird mir mitgeteilt, dass ich den Start von Frame-Interrupts aktivieren soll.

Ich weiß, dass USB-Hosts im Hochgeschwindigkeitsmodus alle 125 uS ein Start-of-Frame-Paket senden, aber warum sollte sich mein Gerät um SOF-Pakete kümmern, abgesehen von der Zeitmessung? Was könnte ich möglicherweise in einer Interrupt-Service-Routine tun, die bei jedem Start eines Frame-Pakets ausgelöst wird?

Sie werden wissen, wann Sie es tatsächlich brauchen werden :) Es ist ein Synchronisationssignal, wie bei jeder asynchronen Kommunikation.
Das ist sein Hauptzweck? Es scheint dann seltsam, dass das Datenblatt mir sagt, dass ich den SOF-Interrupt aktivieren "muss".
Nun, ich werde nicht zu tief in das Datenblatt eintauchen, aber ich könnte mir vorstellen, dass der Host-Controller die Datenübertragung auslöst, sobald SOF erkannt wird. Dafür braucht es also einen Interrupt. Es ist wie bei DMA-Übertragungen, bei denen Sie manchmal die auslösenden Interrupts aktivieren müssen, obwohl Sie sie nicht explizit behandeln werden.

Antworten (1)

Ich glaube, der ursprüngliche Beginn des Frame-Interrupts von 1 ms (1 kHz) sollte Geräten ein billiges, aber genaues Timing geben. Die Genauigkeitsspezifikation dafür ist ziemlich eng.

Wenn Sie kein genaues Timing benötigen oder Ihren eigenen Kristall haben, müssen Sie nicht wissen, wann USB-Frames starten. Der Host initiiert alle Transaktionen, auch wenn Sie senden, sodass Ihre Hardware und Firmware auf diese Weise wissen, wann was zu tun ist.

Ich habe eine Reihe von USB-Geräten erstellt und die Start-of-Frame-Erkennung bisher überhaupt nicht verwendet. Wenn Sie eine vorgefertigte Bibliothek verwenden, verwendet die Bibliothek SOF möglicherweise für ein internes Timing oder um zu wissen, wann sie den Haushalt führen muss. Wenn die Bibliotheksdokumentation besagt, dass Sie SOF benötigen, dann benötigen Sie SOF.

@johnny_boy Bitte akzeptiere die erste Antwort nicht so schnell. Es hält andere davon ab, sich an der Konversation zu beteiligen, da der „Akzeptieren“-Bonus bereits vergeben ist. 24 Stunden sind eine angemessene Zeit, um zu sehen, ob weitere Antworten auftauchen.
@AdamLawrence Danke für den Rat. Denken Sie, ich sollte die aktuelle Antwort nicht akzeptieren und sehen, ob als Ergebnis andere gute Antworten erscheinen, oder ist es dafür zu spät?
@johnny_boy Ich würde es nur für deine nächste Frage im Hinterkopf behalten.