GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gibt es eine Möglichkeit zu überprüfen, welche Baudraten auf einem seriellen Gerät unterstützt werden?

Kleines Bash-Skript:

Aus der Antwort von Sägemehl gibt es meine Lösung:

for bauds in $(
    sed -r 's/^#define\s+B([1-9][0-9]+)\s+.*/\1/p;d' < \
        /usr/include/asm-generic/termbits.h ) ;do
    echo $bauds
    stty -F /dev/ttyS0 $bauds && echo Ok.
done  2>&1 |
    pr -at2

Wird auf meinem Host gerendert:

50                              Ok.
75                              Ok.
110                             Ok.
134                             Ok.
150                             Ok.
200                             Ok.
300                             Ok.
600                             Ok.
1200                                    Ok.
1800                                    Ok.
2400                                    Ok.
4800                                    Ok.
9600                                    Ok.
19200                                   Ok.
38400                                   Ok.
57600                                   Ok.
115200                                  Ok.
230400                                  Ok.
460800                                  Ok.
500000                                  Ok.
576000                                  Ok.
921600                                  Ok.
1000000                                 Ok.
1152000                                 Ok.
1500000                                 Ok.
2000000                                 stty: /dev/ttyS0: unable to perform
2500000                                 stty: /dev/ttyS0: unable to perform
3000000                                 stty: /dev/ttyS0: unable to perform
3500000                                 stty: /dev/ttyS0: unable to perform
4000000                                 stty: /dev/ttyS0: unable to perform

Das heißt, aber das bedeutet nicht, dass es funktionieren wird!

Sie müssen sie mit Ihrem Kabel und Ihrem Gerät testen...


Sie können die Baudrate des Geräts mit dem Befehl "stty" auf der Konsole überprüfen:

$ stty < /dev/tty..      (where tty... is the device file you are listening)  

Ausgabe:

speed 9600 baud; line = 0;
-brkint -imaxbel

Sie können die Baudrate auch mit dem folgenden Befehl ändern:

$ sudo stty -F /dev/tty... 9600    (or whatever baud rate number)

Sie scheinen zwei verschiedene Fragen zu stellen.

Gibt es eine Möglichkeit zu überprüfen, welche Baudraten auf einem seriellen Gerät unterstützt werden?

Die Antwort würde abhängen von (1) den Fähigkeiten der Hardware, d. h. UART/USART/SCC, und dem Teilerbereich, den der Gerätetreiber im Baudratengenerator verwenden kann; konsultieren Sie das Gerätedatenblatt; (2) die Frequenz des Taktgebers/Oszillators, der mit der seriellen Anschlussvorrichtung verbunden ist; konsultieren Sie die Board-Dokumentation.

Gibt es eine Möglichkeit zu überprüfen, welche Baudraten unter Linux unterstützt werden?

Die eine der definierten Baudraten in include/asm-generic/termbits.h für c_cflag Mitglied der Terminal-Steuerstruktur ist die typische Methode, die der Gerätetreiber der seriellen Schnittstelle (d. h. UART/USART) für den Baudraten-Konfigurationswert empfängt.

#define  B0     0000000         /* hang up */
#define  B50    0000001
#define  B75    0000002
#define  B110   0000003
#define  B134   0000004
#define  B150   0000005
#define  B200   0000006
#define  B300   0000007
#define  B600   0000010
#define  B1200  0000011
#define  B1800  0000012
#define  B2400  0000013
#define  B4800  0000014
#define  B9600  0000015
#define  B19200 0000016
#define  B38400 0000017

#define    BOTHER 0010000
#define    B57600 0010001
#define   B115200 0010002
#define   B230400 0010003
#define   B460800 0010004
#define   B500000 0010005
#define   B576000 0010006
#define   B921600 0010007
#define  B1000000 0010010
#define  B1152000 0010011
#define  B1500000 0010012
#define  B2000000 0010013
#define  B2500000 0010014
#define  B3000000 0010015
#define  B3500000 0010016
#define  B4000000 0010017

Treiber für serielle Ports haben normalerweise keine Möglichkeit, zu melden/anzukündigen, welche dieser Baudraten tatsächlich unterstützt/konfigurierbar/implementiert werden. Es gibt einen Capabilities-Wert für Attribute wie FIFO und Sleeping, aber nicht für Baudraten. Ein Treiber könnte ein ioctl() definieren aufrufen, um (nicht standardmäßige) Baudraten zu konfigurieren, obwohl dies Programme, die es verwenden, nicht portabel machen würde.


Linux
  1. So überprüfen Sie, welche Apache-Module in Linux aktiviert/geladen sind

  2. Gibt es eine Möglichkeit zu überprüfen, ob symbolische Links auf ein Verzeichnis verweisen?

  3. Gibt es eine Möglichkeit, 64-Bit-time_t in 32-Bit-Programmen unter Linux zu erhalten?

  4. Gibt es eine Möglichkeit, ein Cargo-Projekt umzubenennen?

  5. Warum gibt es unter Linux so viele /dev/tty?

Wie überprüfe ich, welche Apache-Module aktiviert/installiert sind?

Wie überprüfe ich, welche SysRq-Funktionen aktiviert sind?

Gibt es eine Möglichkeit, LD_PRELOAD und LD_LIBRARY_PATH unter Linux zu blockieren?

Wie kann ich überprüfen, welche Terminaldefinitionen verfügbar sind?

Gibt es Alternativen zur Verwendung von `udev`?

Gibt es einen anderen Grund dafür, dass auf dem Gerät kein Speicherplatz mehr vorhanden ist?