ttyUSB0 的串列流控制問題
這與我大約一個月前創建的先前執行緒有關,該執行緒已得到回答。
今天,我嘗試在執行 Ubunutu 20 的筆記型電腦上設置串列控制台登錄提示,並使用 Belkin F5U409 USB 串列適配器。我遇到了同樣的問題,更大的文本輸出最終會分解成亂碼。但是,此時間設置
stty ixon
不會解決該行為。有關問題的範例輸出,請參見下文。就上下文而言,我用來通過 RS232 連接到 Ubuntu 筆記型電腦的電腦是 EPSON PX-8。在 PX-8 上,我使用名為 TEL.COM 的終端仿真軟體。關於我在 PX-8 上配置的終端參數,請參見下文。
我正在使用 systemd 在 USB0 上啟用控制台
systemctl start serial-getty@ttyUSB0.service
。我需要使用 systemd 配置流量控制嗎?除了 stty 我還需要為 ttyUSB0 配置參數嗎?我試圖在另一台執行 Debian 10 的筆記型電腦上進行設置,但得到了相同的行為。
PX-8 上的 TEL.COM 設置:
Baud: 9600, Char Bits: 8, Parity: NONE, Stop Bits: 2, RTS: ON, Flow Control: ON
當我嘗試輸出命令歷史記錄時出現此問題的範例:
albert@t450:/$ history 1 sudo rasp-config 2 sudo raspi-config 3 sudo nano /boot/cmdline.txt 4 tail /boot/cmdline.txt 5 sudo shutdown -r now 6 sudo vim ~/boot/cmdline.txt 7 cd /./boot 8 dir 9 sudo vim cmdline.txt 10 sudo vim config.txt 11 sudo shutdown -r now 12 dfgdf 13 vim 14 sudo vim cmdline.txt 15 cd /./boot 16 sudo vim cmdline.txt 17 sudo shutdown -r now 18 cd /./boot 19 sudo vim cmdline.txt 20 sudo shutdown -r now 21 ping 8.8.8.8 2 xprt TEM=Vvj9s9ds9j3oin so nat1 machine x Rom =vos cngas-2goses9g3 -xtiet n n5 -s oiy y
Ubuntu機器上的stty配置:
albert@t450:/$ stty -a speed 9600 baud; rows 40; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
請注意,所有這些參數都在 stty 中設置:
ixon ixoff stop = ^S start = ^Q; cs8 cstopb -parenb
Belkin F5U 1 09 似乎是一款設計相當老舊的設備,因此具有相同 usb vendor:device id的 F5U **4 09 可能是相似的。**在這種情況下,由於 id 而選擇的 Linux 驅動程序是mct_u232.c。我們可以在.h 文件中讀取Flow control:
除了 DTR/RTS 設置之外,沒有實現任何流控制特定請求。兩個信號都被丟棄,因為沒有流量控制,但被斷言用於硬體或軟體流量控制。
所以在這個驅動中似乎沒有實現XON/XOFF軟體流控,是通過嗅探Windows98下發出的usb命令導出的。也許硬體本身不提供這個功能。
您可以嘗試在使用者級別實現流控制,但這不太可能足夠,因為輸入和輸出上可能會有一個 fifo,因此當 XOFF 到達使用者級別時,可能仍然有太多字元已經在無法取消的先進先出。也許 PX-8 提供了可用於打包數據的其他協議?
通過連接額外的調製解調器線路 RTS 和 CTS(引腳 7 和 8 用於 9 針 DB9,4 和 5 用於 DB25),您仍然可以使用硬體流控制。如果您將 PX-8 連接為電腦而不是終端,則可能需要交換這些。你也需要
stty crtscts
,也許-clocal
.或者,由於製造商提供了足夠的文件,Linux 可以更好地支持其他串列 USB 設備,例如流行的 FTDI 系列。FTDI 驅動程序似乎具有在設備中設置 XON 和 XOFF 字元的程式碼,這將允許硬體對 XOFF 字元的接收做出快速響應,而無需等待字元到達核心。認可。FTDI 晶片存在非法複製品,因此請嘗試購買信譽良好的品牌以確保完全兼容。