# serial-tester **Repository Path**: Linux-APP-chuckie/serial-tester ## Basic Information - **Project Name**: serial-tester - **Description**: 一款Linux下的串口设备测试程序,支持RS232/RS485/RS422: 1. normal模式,简单的类似于minicom功能,在命令行下即发即收测试,用于简单测试。 2. send only模式,测试发送功能。 3. read only模式,测试串口接收功能。 4. auto模式,自动模式,自动发送接收到的数据 5. loop模式,回环测试,将串口收发短接自动发送接收数据并校验正确性 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 4 - **Created**: 2023-04-30 - **Last Updated**: 2025-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # serial-tester #### 介绍 一款Linux下的串口设备测试程序: 1. 接收测试 2. 发送测试 3. 回环测试 4. 对话测试 5. 压力测试 #### 怎么编译 ```shell $ git clone --recurse-submodules https://gitee.com/Linux-APP-chuckie/serial-tester.git $ cd serial-tester $ make ``` #### 使用说明 ```shell $ LANG=zh_CN.UTF8 ./serial-tester serial-tester V1.1.5,Linux下的串口测试程序,构建于 Sep 9 2023 19:59:38。 在运行本程序前,你可能需要将你的用户名通过命令'sudo usermod -a -G dialout your-account-name' 添加到'dialout'用户组下, 或者通过'sudo'提权运行本程序(sudo ./serial-tester),否则程序无法获取访问串口设备的权限。 USAGE: ./serial-tester [option] [arg], optional mode: normal: 正常模式,类似于minicom基本功能,在控制台下实时收发数据。 recv : 仅接收模式,仅接收数据并打印输出或者保存到文件中。 send : 仅发送模式,发送文件。若未指定发送文件,将会随机生成数据后发送。 loop : 回环模式,接收数据并回送出去同时将接收数据打印输出或者保存到文件中。 stress: 压力模式,自发自收并检测数据正确性,需要将收发短接(仅适用于RS232/RS422模式)。 详情请参阅以下内容。 正常模式,类似于minicom基本功能,在控制台下实时收发数据。 命令格式: normal [选项] [<参数>] --device,-F [<参数>] 指定串口设备,例如'/dev/ttyUSB0'。 --options,-o [<参数>] 设置串口设备参数,参数格式: [baudrate[,data bits[,parity[,stop bits[,hardware flow]]]]],其中: baudrate : 默认值为115200。 data bits: 可选值为5~8,默认为8。 parity : 可选值'o','O','e','E','N','n', 默认为'n'。 stop bits: 可选值为1~2, 默认为1。 hw flow : 硬件流控开关。可选值为'on'/'off',默认为'off'。 --rs485,-R [<参数>] 启用RS485模式,并设置RS485参数。参数格式: [delay before send[,delay after send[,level on sending]]],其中: delay before send: 发送前提前使能RTS的时间,毫秒单位 delay after send : 发送后延迟关闭RTS的时间,毫秒单位 level on sending : 控制发送的RTS电平,可选值0-1。 示例: 1. Normal模式,并设置串口参数为115200,8,n,1 关闭流控: serial-tester normal -F /dev/ttyS0 -o 115200,8,n,1,off 仅接收模式,仅接收数据并打印输出或者保存到文件中。 命令格式: recv [选项] [<参数>] --device,-F [<参数>] 指定串口设备,例如'/dev/ttyUSB0'。 --options,-o [<参数>] 设置串口设备参数,参数格式: [baudrate[,data bits[,parity[,stop bits[,hardware flow]]]]],其中: baudrate : 默认值为115200。 data bits: 可选值为5~8,默认为8。 parity : 可选值'o','O','e','E','N','n', 默认为'n'。 stop bits: 可选值为1~2, 默认为1。 hw flow : 硬件流控开关。可选值为'on'/'off',默认为'off'。 --rs485,-R [<参数>] 启用RS485模式,并设置RS485参数。参数格式: [delay before send[,delay after send[,level on sending]]],其中: delay before send: 发送前提前使能RTS的时间,毫秒单位 delay after send : 发送后延迟关闭RTS的时间,毫秒单位 level on sending : 控制发送的RTS电平,可选值0-1。 --dump,-D [<参数>] 输打印输出模式。可选值:0/none/n,1/ascii/a,2/hex/h。 0/none/n :不打印输出,默认值。 1/ascii/a:打印字符串。 2/hex/h :打印十六进制。 --file,-f [<参数>] 指定文件保存接收数据。 --max-len,-l [<参数>] 指定接收数据的最大长度(字节),<=0 表示一直接收。 示例: 1. 仅接收数据并打印输出到控制台,指定最大接收长度为4K字节: serial-tester recv -F /dev/ttyS0 -o 115200,8,n,1,off -l 4096 -D ascii 2. 仅接收数据并保存到文件中: serial-tester recv -F /dev/ttyS0 -o 115200,8,n,1,off -f recv.txt 仅发送模式,发送文件。若未指定发送文件,将会随机生成数据后发送。 命令格式: send [选项] [<参数>] --device,-F [<参数>] 指定串口设备,例如'/dev/ttyUSB0'。 --options,-o [<参数>] 设置串口设备参数,参数格式: [baudrate[,data bits[,parity[,stop bits[,hardware flow]]]]],其中: baudrate : 默认值为115200。 data bits: 可选值为5~8,默认为8。 parity : 可选值'o','O','e','E','N','n', 默认为'n'。 stop bits: 可选值为1~2, 默认为1。 hw flow : 硬件流控开关。可选值为'on'/'off',默认为'off'。 --rs485,-R [<参数>] 启用RS485模式,并设置RS485参数。参数格式: [delay before send[,delay after send[,level on sending]]],其中: delay before send: 发送前提前使能RTS的时间,毫秒单位 delay after send : 发送后延迟关闭RTS的时间,毫秒单位 level on sending : 控制发送的RTS电平,可选值0-1。 --dump,-D [<参数>] 输打印输出模式。可选值:0/none/n,1/ascii/a,2/hex/h。 0/none/n :不打印输出,默认值。 1/ascii/a:打印字符串。 2/hex/h :打印十六进制。 --file,-f [<参数>] 指定待发送文件。 --max-len,-l [<参数>] 指定发送数据的最大长度(字节),<=0 表示一直发送。该值在'-f'选项有效时会被忽略。 --block,-B [<参数>] 指定单次发送数据块的大小,可选值为1~64*1024,默认值为1024。 --interval,-i [<参数>] 指定发送间隔,单位毫秒,可选值:0~60*1000;0表示无间隔发送,默认0。 示例: 1. 随机生成数据发送,并在控制台输出已发送数据: serial-tester send -F /dev/ttyS0 -o 115200,8,n,1,off -l 4096 -D hex 2. 发送文件中的数据: serial-tester send -F /dev/ttyS0 -o 115200,8,n,1,off -f sent.dat 回环模式,接收数据并回送出去同时将接收数据打印输出或者保存到文件中。 命令格式: loop [选项] [<参数>] --device,-F [<参数>] 指定串口设备,例如'/dev/ttyUSB0'。 --options,-o [<参数>] 设置串口设备参数,参数格式: [baudrate[,data bits[,parity[,stop bits[,hardware flow]]]]],其中: baudrate : 默认值为115200。 data bits: 可选值为5~8,默认为8。 parity : 可选值'o','O','e','E','N','n', 默认为'n'。 stop bits: 可选值为1~2, 默认为1。 hw flow : 硬件流控开关。可选值为'on'/'off',默认为'off'。 --rs485,-R [<参数>] 启用RS485模式,并设置RS485参数。参数格式: [delay before send[,delay after send[,level on sending]]],其中: delay before send: 发送前提前使能RTS的时间,毫秒单位 delay after send : 发送后延迟关闭RTS的时间,毫秒单位 level on sending : 控制发送的RTS电平,可选值0-1。 --dump,-D [<参数>] 输打印输出模式。可选值:0/none/n,1/ascii/a,2/hex/h。 0/none/n :不打印输出,默认值。 1/ascii/a:打印字符串。 2/hex/h :打印十六进制。 --file,-f [<参数>] 指定文件保存接收数据。 --max-len,-l [<参数>] 指定接收数据的最大长度(字节),<=0 表示一直接收。 --block,-B [<参数>] 指定单次发送数据块的大小,可选值为1~64*1024,默认值为1024。 示例: 1. 接收数据并回传数据,同时打印输出到控制台,指定最大接收长度为4K字节: serial-tester loop -F /dev/ttyS0 -o 115200,8,n,1,off -l 4096 -D ascii 2. 接收数据并回传数据,同时保存到文件中: serial-tester loop -F /dev/ttyS0 -o 115200,8,n,1,off -f recv.txt 压力模式,发送数据然后等待接收,并比较接收和发送数据是否一致,用于测试串口稳定性。 需要将收发短接。仅支持RS232和全双工RS422模式,半双工RS485模式下收发短接会导致数据错乱。 命令格式: stress [选项] [<参数>] --device,-F [<参数>] 指定串口设备,例如'/dev/ttyUSB0'。 --options,-o [<参数>] 设置串口设备参数,参数格式: [baudrate[,data bits[,parity[,stop bits[,hardware flow]]]]],其中: baudrate : 默认值为115200。 data bits: 可选值为5~8,默认为8。 parity : 可选值'o','O','e','E','N','n', 默认为'n'。 stop bits: 可选值为1~2, 默认为1。 hw flow : 硬件流控开关。可选值为'on'/'off',默认为'off'。 --dump,-D [<参数>] 输打印输出模式。可选值:0/none/n,1/ascii/a,2/hex/h。 0/none/n :不打印输出,默认值。 1/ascii/a:打印字符串。 2/hex/h :打印十六进制。 --stop-on-err,-s 出现错误后停止。 --count,-c [<参数>] 指定测试次数,<=0 表示无限循环。 --block,-B [<参数>] 指定单次测试数据块的大小,可选值为1~64*1024,默认值为256。 --interval,-i [<参数>] 指定测试间隔,单位毫秒,可选值:0~60*1000;0表示无间隔,默认0。 示例: 1. 512字节数据块压力测试,出现错误后停止: serial-tester stress -F /dev/ttyS0 -o 115200,8,n,1,off -B 512 -s 2. 512字节数据块压力测试,输出所有测试数据: serial-tester stress -F /dev/ttyS0 -o 115200,8,n,1,off -B 256 -D ascii ``` 1. normal/普通模式 此模式下类似于minicom/picocom,实时收发数据. 2. recv/接收模式 此模式下仅接收数据,如果开启了`-D`选项,会输出接收到的数据到屏幕,此模式还支持如下选项: - `--max-len,-l` 最大读取字节数,默认为0(一直读取)。若设置该参数,则读取指定字节数的数据后自动退出。 - `--file,-f` 保存接收到的数据到指定文件 3. send/发送模式 此模式下仅发送数据,如果开启了`-D`选项,会输出已发送的数据到屏幕,此模式还支持如下选项: - `-B` 一次发送数据的大小(1-64*1024字节),默认1024字节。 - `-i` 两次发送之间的间隔,以毫秒为单位,默认为0,也就是无间隔。 - `--max-len,-l` 最大发送字节数,默认为0(一直发送)。若设置该参数,则发送指定字节数的数据后自动退出。 - `--file,-f` 从指定文件读取数据并发送,发送完成自动退出。 4. loop/回环模式 此模式下自动将接收到的数据回传给发送者,如果开启了`-D`选项,会输出接收/发送的数据到屏幕,此模式还支持如下选项: - `--max-len,-l` 最大读取字节数,默认为0(一直读取)。若设置该参数,则读取指定字节数的数据后自动退出。 - `--file,-f` 保存接收到的数据到指定文件 - `-B` 一次发送数据的大小(1-64*1024字节),默认1024字节。 5. stress/压力测试 此模式用于压力测试串口的稳定性,需要将收发信号短接,不支持RS485模式`(PS: 对于半双工RS485,短接后会导致总线信号错乱哦)`。程序按照`-B`选项指定的数据块大小随机生成测试数据并发送,然后等待接收数据,当超过 `(数据块大小*8*1000)/波特率 + 1000ms` 后未收到数据认为一次接收完成,然后比对发送的数据和接收的数据是否一致。如果开启了`-D`选项,会输出接收/发送的数据到屏幕,此模式还支持如下选项: - `--count,-c` 指定最大测试次数,达到最大测试次数后停止,默认值为0表示一直测试。 - `--stop-on-err,-s` 出现错误后立即停止 - `-B` 一次发送数据的大小(1-64*1024字节),默认256字节。 - `-i` 两次测试之间的间隔,以毫秒为单位,默认为0,也就是无间隔。