2020/7/31

bookmarks : tty 做 serial 傳輸,特殊字元問題

古老的問題,又再次遇到。
使用 serial port , tty device 做傳輸的時候,測試時,想用 echo. cat 做基本傳送測試。
常常會遇到 自動送出 0x0d, 或是送出0x0d 時,被加入一個 0x0d 的現象。
這是因為 linux tty 是 terminal 裝置,所以遇到特殊的控制字元時,會自動做特殊轉換。 轉換。

就用 stty 來設定,叫他不要自動轉換舊可以..

看看現在tty 的設定狀況:
# stty -F /dev/ttyS1
speed 9600 baud; 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; flush = ^O; min = 1; time = 0;
-brkint -imaxbel
變更,不要處理 nl, cr 的轉換
# stty -F /dev/ttyS1 -onlcr

ref:


這一篇 說,直接指定 raw mode 舊可以:
# stty -F /dev/ttyS1 raw

另外,echo command 也會自動加上 0x0d,不要他送的話,要加上 -n option:
# echo -n abc

附帶,要送非 ascii,也就是用 hex code 來寫,要用 -e
# echo -en '\x12\x34'

沒有留言:

張貼留言