Linuxのシリアルデバイスでサポートされているボーレートを確認する方法はありますか?
/sys/class/tty/ttyS0
ディレクトリを調べましたが、このタイプの情報をリストしているものは何もありません。
あなたは2つの異なる質問をしているようです。
シリアルデバイスでサポートされているボーレートを確認する方法はありますか?
答えは、(1)ハードウェアの機能(UART/USART/SCC)、およびデバイスドライバーがボーレートジェネレーターで使用できる除数の範囲によって異なります。デバイスのデータシートを参照してください。 (2)シリアルポートデバイスに接続されているクロック/オシレータの周波数。ボードのドキュメントを参照してください。
Linuxでサポートされているボーレートを確認する方法はありますか?
端末制御構造のc_cflagメンバーに対してinclude/asm-generic/termbits.h
で定義されているボーレートの1つは、シリアルポート(つまりUART/USART)デバイスドライバーがボーレートに対して受け取る一般的な方法です。構成値。
#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
シリアルポートドライバには通常、これらのボーレートのどれが実際にサポート/設定可能/実装されているかを報告/宣伝する手段がありません。 FIFOとスリープ状態のような属性には機能値がありますが、ボーレートにはありません。ドライバーはioctl()呼び出しを定義して(非標準の)ボーレートを構成できます。ただし、それを使用するプログラムは移植性がなくなります。
コンソールの「stty」コマンドを使用して、デバイスのボーレートを確認できます。
$ stty < /dev/tty.. (where tty... is the device file you are listening)
出力:
speed 9600 baud; line = 0;
-brkint -imaxbel
次のコマンドを使用して、ボーレートを変更することもできます。
$ Sudo stty -F /dev/tty... 9600 (or whatever baud rate number)
おがくずの答え から、私の解決策があります:
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
私のホストでレンダリングします:
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
つまり、これはそれが機能するという意味ではありません!
あなたはあなたのケーブルとあなたのデバイスでそれらをテストしなければなりません...