Wie verwendet ein Mikrocontroller-Entwicklungsboard ein USB-Kabel, um serielle Daten zu übertragen?

Ich versuche, jeden Abschnitt der Datenreise von einem Mikrofon über einen Mikrocontroller zu einem PC-Terminal zu verstehen.

Nachdem ich etwas über serielle Datenübertragung gelesen habe, ist mir jetzt klar, dass eine Echtzeit-Audiodatenübertragung über eine serielle Schnittstelle nicht möglich ist, da die maximale Datenübertragungsrate bei etwa 115 kb/s liegt. Ich würde jedoch trotzdem gerne etwas über die serielle Datenübertragung in wissen ein Mikrocontroller.

Ich habe ein Elektretmikrofon, das an einen analogen Eingang eines stm32 nucleo-144-Entwicklungsboards mit einem stm32F746ZG-Mikrocontroller ( https://os.mbed.com/platforms/ST-Nucleo-F746ZG/ ) angeschlossen ist, und das Entwicklungsboard ist mit einem verbunden PC über ein USB-Kabel.

Mein Verständnis ist, dass das Audiosignal vom Adc auf dem Mikrocontroller-Chip abgetastet wird, diese neuen digitalen Daten dann über einen der Advanced Peripheral Busse (APB) in den Speicher verschoben werden und dann über den Advanced High-Performance Bus (AHB) kommen zurück aus dem Speicher und geht über APB und AHB in einen UART im Mikrocontroller und danach in einen (RS-232 / RS-485) -Leitungstreiber (weiß nicht, ob sich dieser im Mikrocontroller auf der Entwicklungsplatine befindet). Die Spannung wird erhöht und danach bin ich verloren.

Laufen die Daten einfach entlang der TX-Leitung vom Leitungstreiber zum USB-Anschluss auf der Entwicklungsplatine? Und werden diese dann als USB-Daten oder als serielle Daten über eine der USB-Datenleitungen übertragen?

Nichts verwendet „eine der USB-Datenleitungen“; Die Datenleitungen sind ein differentielles Paar und USB-Daten verwenden immer beide.
Die Situation, die Sie beschreiben, klingt eher unwahrscheinlich. Welches STM32F4-Entwicklungsboard hat RS232? Und warum willst du es verwenden? Warum möchten Sie außerdem Audio an ein "Terminal" senden? Es gibt weitaus bessere Standardmethoden, um Audio in einen PC zu bringen. USB und verschiedene virtuelle serielle Schemata können Sie nachlesen - der Zweck von Stack Exchange-Sites besteht nicht darin, die Dokumentation zu ersetzen, sondern nur Fragen zu beantworten, die nach Konsultation der entsprechenden Dokumentation und Referenzen verbleiben .
UART und USB sind zwei verschiedene Dinge.
Ich bin mir nicht ganz sicher, was Sie fragen. Fragen Sie, was im Mikrocontroller für die Datenübertragung an Ihren PC verantwortlich ist? Diese Antwort finden Sie im Datenblatt des Pakets des SoC. Suchen Sie am Anfang des Datenblatts nach einem Blockdiagramm.
Ich frage mich, wie kommen serielle Daten tatsächlich über ein USB-Kabel auf den PC? werden die seriellen Daten auf USB gewandelt?
Ich dachte, der Stack-Austausch sei dazu da, Menschen zu helfen. Ich habe auf dieser Website viele Fragen gesehen, die mit der Konsultation der entsprechenden Dokumentation hätten beantwortet werden können. Ich habe keine Dokumentation gefunden, die geholfen hat, weshalb ich hier nachgefragt habe.
Ich denke, das Problem ist, dass nicht genau klar ist, was Sie fragen. Wie werden serielle Daten über ein USB-Kabel übertragen? USB ist bereits ein serieller Bus.
Viele Entwicklungsboards täuschen einen seriellen Kanal über USB vor, ist 5gat
STM32 verwendet weder RS232 noch RS485, wie sendet es dann serielle Daten? entschuldige meine Unwissenheit, ich bin Anfänger. Vergessen Sie die Audiosituation, die ich beschrieben habe, es ist nur ein Beispiel, um mein Verständnis zu verbessern, ich möchte nur lernen, wie sich Daten auf dem Entwicklungsboard bewegen
Ich meine serielle Daten mit den Protokollen RS-232 oder RS-485
RS-232/485 sind keine Protokolle, sondern Leitungspegel, bei denen Sie die MCU sprengen würden. Sie definieren Leitungspegel und Steckerbelegungen. keine Protokolle. Ein sehr häufiger Fehler, den Leute machen, wenn sie versuchen, die Punkte zwischen dem Protokoll und den Spannungspegeln/Anschlussbelegungen zu verbinden. Ich habe noch kein STM32-Entwicklungsboard mit RS-232-Anschlüssen oder Leitungspegeln gesehen, sie verwenden stattdessen die Debug-MCU als virtuellen COM-Port. und das ist auch ein verwirrender/irreführender Begriff, com port.
Bei den größeren Nucleo-Boards ist der Teil perforiert, sodass Sie ihn nach Belieben abbrechen können. Das ist im Grunde ein Stlink-Debug-Board plus einige andere Funktionen. Nicht alle, scheint nur die Hälfte zu sein, aber einige bieten auch einen virtuellen COM-Port über USB. Aber es liegt an den 3,3-V-Pegeln, nicht an RS-232C, zwischen dem Debug-Board und dem Ziel-MCU. Sie können auch einen FTDI-USB- / seriellen Chip kaufen (ihre Chips sind normalerweise multifunktional, z. B. ein FT2232). Breakout-Board verwenden einen Host-Treiber (Linux richtet ihn standardmäßig auf diese Weise ein) als UART, dann mit Jumper-Drähten zu einem der anderen Uarts auf dem Ziel-MCU.
Sie können dasselbe mit einem virtuellen USB-UART/COM-Port tun, der an einen der Ziel-MCU-UARTs angeschlossen ist, und der Host sieht dies durch Schichten der Betriebssystemverschleierung als seriellen/UART-Port, den Sie mit einem dummen Terminalprogramm, Minicom, verwenden können , Teraterm, Hyperterm usw., um mit dem MCU zu interagieren. Zugegeben, Sie müssen die MCU programmieren.
Ein weiterer fehlender Teil hier ist, dass, obwohl es Stlink-Unterstützung in dieser Debug-MCU gibt, es noch eine weitere Funktion gibt, und das heißt, es wird als virtuelles Wechsellaufwerk/Media/thumb_drive angezeigt und Sie kopieren einfach Ihre Flash-Image-.bin-Datei auf dieses Laufwerk und die Debug-MCU verwendet SWD und setzt die Kontrolle über das Teil zurück, um den Flash im Teil für Sie zu programmieren, Sie müssen nicht über einen Debugger über Stlink einsteigen und eine Reihe von Befehlen ausführen.
Ich habe VIELE STM32-Nucleo-Boards, die alle das gefälschte Thumb-Drive-Ding und eine Version von Stlink-Unterstützung haben. Nur einige bieten eine virtuelle serielle/uart-Schnittstelle zum Ziel-MCU. Bei größeren Boards wie diesem können Sie die SWD-Jumper ziehen und mit Jumperdrähten den Debugger verwenden, um mit anderen Boards/Chips zu kommunizieren, einschließlich Nicht-ST-Cortex-ms. Die kleineren Debug und Target sind auf einer Platine integriert und Sie können dies nicht tun, diese Signale liegen auf der Platine und nicht an externen Pins. Die Sache mit dem Kopieren der Datei war älter als mbed, wurde aber Teil ihrer Vorgehensweise. und es ist ein sehr nettes Feature.
Das erste, was Sie tun, wenn Sie ein Nucleo-Board erhalten, ist das Firmware-Updater-Tool (Java läuft also auf verschiedenen Betriebssystemen) und die Debugger-Firmware zu aktualisieren. Auf einigen Systemen verhält es sich nicht immer gut. Manchmal können Sie das Teil einmal und dann programmieren muss das Board aus- und wieder einstecken.
@old_timer, Danke, mein Verständnis wächst mit deinem Input

Antworten (1)

Die serielle Schnittstelle ist eigentlich ein virtueller COM-Port , der über die USB-Schnittstelle kommuniziert. Ihr Mikrocontroller muss den seriellen Eingang / Ausgang nicht zwischen normalen Logikpegeln und den höheren RS-232-Spannungen umwandeln ... die Logiksignale vom UART gehen direkt zur USB-Schnittstelle. Die Software auf dem Host-Computer muss in der Lage sein, den virtuellen seriellen Anschluss zu erkennen und den entsprechenden Treiber bereitzustellen, damit er für die Host-Software wie ein altmodischer serieller Anschluss aussieht.

Je nachdem, welcher USB-Anschluss verwendet wird, kann überhaupt kein tatsächlicher UART beteiligt sein. Die Verwendung desjenigen, der den integrierten Debugger durchläuft, könnte eine Standardeinstellung für Experimente sein, wäre jedoch weniger üblich, wenn wir ein potenzielles Anwendungsprodukt erstellen, das USB verwendet.
Jetzt verstehe ich, danke
Sie können einen virtuellen COM-Port über die USB-Schnittstelle des Mikrocontrollers erstellen?
Bedeutet dies, dass die Geschwindigkeit der Datenübertragung nicht auf 115 kb/s begrenzt ist?
USB (breiter als das CDC-Profil, das einen virtuellen COM-Port verfügbar macht) kann viel höhere Datenraten als 115 kbps unterstützen ... wie 480 Mbit / s, aber Sie müssen mehr Software schreiben, um diese Art von Durchsatz zu erzielen. Davon abgesehen kann sogar CDC 2 Mbit / s erreichen, wenn die MCU dies unterstützen kann, iirc. sony.com/electronics/support/articles/00024571
@A.Davies Sie stellen jetzt neue Fragen, und die Antworten hängen davon ab, ob Sie nach einem bestimmten Mikrocontroller oder nach USB im Allgemeinen fragen. Sie sollten wahrscheinlich eine neue Frage erstellen und weitere Details angeben.
OK werde ich tun
es ist definitiv nicht RS-232. Die Nucleo-Boards haben wie die meisten ST-Entwicklungsboards eine Debug-Schnittstelle (einen anderen ST-Teil) und den Ziel-MCU. die rx/tx (ttl-pegel) sind zwischen dem debug und dem ziel-mcu auf der platine verbunden, manchmal durch lötbrückenbrücken. Das Debug-Board stellt den virtuellen seriellen Port auf der USB-Seite seinem physischen UART zur Verfügung, der dann mit dem Ziel-MCU verbunden ist, sodass Sie den Ziel-MCU-UART auf dem Host sehen. Schauen Sie sich die Schaltpläne an.
signals from the UART go directly to the USB interfaceIch fürchte, es ist falsch. Von UART empfangene Daten werden über das spezielle Programm an das USB-Peripheriegerät übertragen. UART-Signale sind nicht mit USB verbunden.
@P__J__ - das hängt vom verwendeten Connector ab. Das Fragesteller-Board hat einen direkten USB-Anschluss, den sie wahrscheinlich nicht verwenden, und es hat einen Anschluss an einen Debugger-Chip, der die Fähigkeit hat, die Signale des tatsächlichen Uart des Zielchips zu sammeln und weiterzuleiten.
Übrigens hat ein virtueller COM-Port eine "serielle Baudrate" nur im Sinne eines Konfigurationshinweises für jeden UART, der ein tatsächliches serielles Signal erzeugt. Wenn kein tatsächlicher UART beteiligt ist, ist die befohlene Baudrate bedeutungslos und wird ignoriert, Daten fließen so schnell wie sie bereitgestellt werden und können verschoben werden - Sie könnten 300 Baud befehlen und tatsächlich ein Megabit erreichen.