What is the difference between /dev/ttyUSB and /dev/ttyACM? Samuel Tardieu, 2013-03-05

Was ist der Unterschied zwischen / dev / ttyUSB und / dev / ttyACM?

Haben Sie sich jemals gefragt, warum einige USB-Geräte / dev / ttyUSB0 (oder 1 oder n) und andere / dev / ttyACM0 (oder 1 oder n) verwendet haben, wenn sie an den Host-Computer angeschlossen sind, während sie als UART zu fungieren scheinen? Geräte (RS-232-like) über USB in beiden Fällen? Haben Sie sich gefragt, warum USB-Firmwares für Mikrocontroller immer Namen wie / dev / ttyACM0 und niemals / dev / ttyUSB0 haben?

Was bedeutet ttyACM?

Die Forumorganisation für USB-Implementierer hat beschrieben, wie sich Geräte, die der Communications Device Class (CDC) entsprechen, dem USB-Host präsentieren sollen. Das Forum für USB-Implementierer gab auch an, wie sich CDC-Unterklassen verhalten sollen, auch für Geräte, die dazu bestimmt sind, über das öffentliche Telefonnetz (PSTN) miteinander zu kommunizieren. Diese werden als Modems bezeichnet, da die Daten auf der Sendeseite eine Modulationsoperation durchlaufen, die die Bits in analoge Signale umwandelt, die über Telefonleitungen übertragen werden können, und dann auf der Empfangsseite eine Demodulationsoperation, um das analoge Signal wieder in zu konvertieren die ursprünglichen Bits.

Um mit dem Modem zu diskutieren, muss der Host-USB-Treiber eines der vorhandenen Steuerungsmodelle verwenden. Beispielsweise steuert das Direct Line Control-Modell, wie Daten zwischen dem Host und dem Modem über eine Audio-Class-Schnittstelle ausgetauscht werden, wobei der Host die Modulation, Demodulation, Datenkomprimierung (wie V.42bis) und Fehlerkorrektur (wie z wie V.42). Dieses Modell wird von einigen USB-Softmodems verwendet, die sehr billig sind, da sie meist einen DSP-Chip und einige Verstärkungs- und Leitungsanpassungsschichten enthalten.

Ein anderes Steuermodell, das zu Recht als abstraktes Steuermodell oder ACM bezeichnet wird, lässt die Modemhardware die analogen Funktionen ausführen und erfordert die Unterstützung des ITU V.250-Befehlssatzes (in früheren Versionen auch Hayes genannt), entweder im Datenstrom oder als separater Kontrollstrom durch die Kommunikationsklassenschnittstelle. Wenn die Befehle mit den Daten im Datenstrom gemultiplext werden, muss eine Escape-Sequenz wie Hayes 302 (auch bekannt als "1 Sek. +++ 1 Sek.") Oder TIES (an die sich niemand erinnert) dem Host erlauben, das Modem anzuschließen Befehlsmodus.

Bei der Entwicklung eines USB-fähigen eingebetteten Mikrocontrollers, der Daten über USB mit einem Computer austauschen muss, wird versucht, eine standardisierte Kommunikationsmethode zu verwenden, die von praktisch jedem Betriebssystem gut unterstützt wird. Aus diesem Grund entscheiden sich die meisten Leute für die Implementierung von CDC / PSTN mit ACM (haben Sie bemerkt, dass der Linux-Kerneltreiber für / dev / ttyACM0 den Namen cdc_acm trägt?), Weil dies die einfachste Methode zum Austauschen von Rohdaten ist.

Aber was ist mit dem obligatorischen V.250-Befehlssatz? Es wird in solchen Geräten fast nie implementiert, aber da der Host keinen Grund hat, spontan V.250-Befehle selbst zu generieren, muss das Gerät diese niemals beantworten. Das eingebettete Gerät als Modem vorzutäuschen, ist der einfachste Weg, mit ihm zu kommunizieren, obwohl es wahrscheinlich niemals eine Modulations- oder Demodulationsaufgabe ausführen wird. Linux wird nicht wissen, dass das Gerät lügt, und es wird als / dev / ttyS0 angezeigt.

Was bedeutet ttyUSB?

Diese Anbieter haben sich dafür entschieden, den Host-Computer nicht damit zu belügen, dass sich die Chips als USB-Modems ankündigen, wenn dies nicht der Fall war. Jeder Anbieter definierte seine eigenen (normalerweise proprietären) Protokolle mit Befehlen, mit denen Funktionen der Chips gesteuert werden können, z. B. das Einstellen der Baudrate oder das Steuern zusätzlicher Signale, die zur Implementierung der Hardware-Flusssteuerung verwendet werden.

Diese Anbieter haben sich entschieden, den Host-Computer nicht zu belügen, dass sie Chips als USB-Modems ankündigen, wenn dies nicht der Fall war. Jeder Anbieter definierte seine eigenen (normalerweise proprietären) Protokolle mit Befehlen, mit denen Funktionen der Chips gesteuert werden können, z. B. das Einstellen der Baudrate oder das Steuern zusätzlicher Signale, die zur Implementierung der Hardware-Flusssteuerung verwendet werden.