目前新购买的计算机上,串口(uart,rs-232)已经难觅踪迹。但作为开发调试人员,串口 依然广泛的被使用着,例如嵌入式开发,交换机配置等。
RAW模式与非RAW模式
RAW模式简单的来说,就是发送端发动的二进制码原封不动的被接收端接收。
若干年前使用Windows下的 串口调试助手 对单片机串口进行调试就是使用的RAW模式, 单片机发送的数据被原封不动的发送给PC端,PC端发送的数据也同样原封不动的发送回 单片机。
在Linux查看可用的串口
串口在Linux中被认为是一个普通的字符终端设备(tty),因此串口的设备文件命一般为 /dev/ttyX ,其中的X依据不同的串口类型会为2个到若干个字符。
想要在Linux下查看可用的串口,一般的方法为使用 dmesg 命令来查看Linux的日志,从 中找到串口的connect和disconnect信息,来确定具体的设备文件名。
在系统中执行如下命令:
dmesg | grep tty
在我的系统中(Debian 8),样例输出如下:
[ 0.000000] console [tty0] enabled [ 0.552960] 00:01: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A [ 3.019752] systemd[1]: Starting system-getty.slice. [ 3.019769] systemd[1]: Created slice system-getty.slice. [ 7.034310] usb 1-9: pl2303 converter now attached to ttyUSB0 |
可以看到我系统里有两个物理的串口,一个是 ttyS0 ,另一个是 ttyUSB0 ,其中 ttyS0 是我电脑主板上的原生串口, ttyUSB0 是一根USB转串口线。
有时候电脑可能已经运行了很久, dmesg 已经无法看到最初的信息,那么可以使用如下 命令来查询
ls -l /sys/class/tty
这条命令会列出电脑中所有的tty设备,包括虚拟机的tty设备。
我系统中的样例输出为:
lrwxrwxrwx 1 root root 0 Dec 20 13:18 console -> ../../devices/virtual/tty/console lrwxrwxrwx 1 root root 0 Dec 20 13:18 ptmx -> ../../devices/virtual/tty/ptmx lrwxrwxrwx 1 root root 0 Dec 20 13:18 tty -> ../../devices/virtual/tty/tty Here, we ommit some virtual tty devices. lrwxrwxrwx 1 root root 0 Dec 20 13:18 tty8 -> ../../devices/virtual/tty/tty8 lrwxrwxrwx 1 root root 0 Dec 20 13:18 tty9 -> ../../devices/virtual/tty/tty9 lrwxrwxrwx 1 root root 0 Dec 20 13:18 ttyS0 -> ../../devices/pnp0/00:01/tty/ttyS0 lrwxrwxrwx 1 root root 0 Dec 20 13:18 ttyS1 -> ../../devices/platform/serial8250/tty/ttyS1 lrwxrwxrwx 1 root root 0 Dec 20 13:18 ttyS2 -> ../../devices/platform/serial8250/tty/ttyS2 lrwxrwxrwx 1 root root 0 Dec 20 13:18 ttyS3 -> ../../devices/platform/serial8250/tty/ttyS3 lrwxrwxrwx 1 root root 0 Dec 20 13:18 ttyUSB0 -> ../../devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.0/ttyUSB0/tty/ttyUSB0 |
在最后我们能看到一些不是 virtual 的tty设备,其中一眼能分辨出来的是USB串口,此外 还有四个tty设备, ttyS0 , ttyS1 , ttyS2 和 ttyS3 ,这四个设备我们需要逐个来 试(抱歉,这里我也不知道怎么确定时哪一个,因为有些系统中platform下的串口也可能 为实际的物理串口)。
设置串口为RAW模式
在Linux下系统的tty模式为非RAW模式,如果要调试单片机这种嵌入式设备,则需要将串口 设置为RAW模式。
对tty的操作使用 stty 命令。
设置串口波特率到9600:
stty -F /dev/ttyX 9600
设置串口为RAW模式:
stty -F /dev/ttyX 115200
也可以在同一条命令中同时这是波特率和RAW模式:
stty -F /dev/ttyX 115200 raw
注意:我在Mac电脑上使用stty时,发现其命令行参数 -F 需要用 -f 来替换。