在米尔-TI AM62x开发板上,提供了两个RS485端口,可以用于连接RS485外部工业设备。
我手头正好有RS485相关的设备,所以正好开展一下测试。
一、硬件准备
这次测试,使用了一个USB2485,方便和电脑连接进行通讯:
RS485采用平衡发送和差分接收方式实现通信:发送端将串行口的ttl电平信号转换成差分信号a,b两路输出,经过线缆传输之后在接收端将差分信号还原成ttl电平信号。
因此,只需要两根线即可完成通讯。
不过需要注意的是,两个设备或者端口之间,RS485的A对A,B对B,而不是像RS232那样RX对TX,TX对RX。
二、软件准备
1. 串口工具
我用的是picocom和comtools,可以在macOS和Linux下面使用。
要在开发板的Linux中使用picocom,需要在应用开发环境进行编译:
git clone https://github.com/npat-efault/picocom.git
cd picocom
make
file picocom
# picocom: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=39afadd44edb2b86a1f4d60cb55a6f558263cb1c, for GNU/Linux 3.14.0, with debug_info, not stripped
编译完成后,将生成的picocom上传到开发板备用。
2. 串口测试工具
串口测试工具,使用的是 linux-serial-test,也需要先编译:
git clone https://github.com/cbrake/linux-serial-test.git
cd linux-serial-test
cmake .
make
file linux-serial-test
# linux-serial-test: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=70dc505751ab3c56dd4db2ee5c1fe644c2b626d7, for GNU/Linux 3.14.0, with debug_info, not stripped
编译完成后,将生成的linux-serial-test上传到开发板备用。
三、端口对端口基础测试
用杜邦线,直接将A1-A2连接,B2-B2连接,就可以进行开发板本机测试了。
ssh连接1:
./picocom -c -b 115200 /dev/ttyS0
ssh连接2:
./picocom -c -b 115200 /dev/ttyS1
因为485端口1和2互联了,所以上面两个串口的picocom终端会相互关联,在一个操作,会同步发送到另外一边。
具体测试结果如下:
iShot_2024-02-22_00.10.24
四、开发板485端口性能测试
通过 linux-serial-test 可以对单个端口,或者两个端口,进行性能测试。
如果测试单端口,需要使用回环电缆,但我手头没有,所以进行双端口测试。
ssh连接1:接收端命令:
linux-serial-test -s -e -p /dev/ttyS1 -t -c -l 250
ssh连接段2:发射端命令:
linux-serial-test -s -e -p /dev/ttyS0 -r -c
上述命令,可以实现 RTS/CTS 流量控制,并发送带有计数模式的数据, 两次读取之间延迟 250 毫秒,这将导致缓冲区填满并开始使用流量控制。
同样程序将报告模式中任何缺失的数据,如果流控制正常工作,则不应有任何缺失数据报告。
具体测试结果如下:
iShot_2024-02-22_00.16.51
从上述结果来看,测试均通过,err显示为0,表示无错误发生。
五、开发板与电脑使用串口工具通讯
开发板上运行命令:
./picocom -c -b 115200 /dev/ttyS0
电脑上使用comtools打开窗口,即可进行通讯测试:
iShot_2024-02-22_00.37.34
六、文件传输测试
使用串口,可以在电脑和开发板之间传送文件。
根据modem所采用的文件传输协议:xmodem,ymodem,zmodem将其分类
- xmodem:简单通用,传输信息单位是“包=128B”,传输速度慢,适合电话线路质量差的情况下用
- ymodem:由XMODEM演变来,效率可靠性高,包=128*8B;一次传输可发送或接受几个文件
- zmodem:于上两种不同,已连续的数据流发送数据,效率更高
在macOS/Linux下,一般通过rz/sz来进行文件的传输。
首先,在交叉编译环境编译lrzsz:
git clone https://github.com/coderfordev/lrzsz.git
cd lrzsz
make
file src/lrz
# src/lrz: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=79e067ed07413d1591ccf95de51917342a19c0fd, for GNU/Linux 3.14.0, with debug_info, not stripped
将最后生成的lrz、lsz部署到开发板上,并改名为rz sz。
然后,在开发板上运行命令:
PATH=/home/roo:$PATH
picocom --send-cmd "sz -vv" --receive-cmd "rz -vv" -b 115200 /dev/ttyS0
在电脑上,可以用SecurtCRT图形界面工具,或者用picocom命令行工具。
用picocom的话,命令如下:
picocom --send-cmd "sz -vv" --receive-cmd "rz -vv" -b 115200 /dev/cu.usbserial-0001
要开始传输文件的话,按照以下步骤进行:
- 先在开发板上,按Ctrl+A,再按Ctrl+R,表示接受文件,出现提示时,不要回车
- 在电脑上,按Ctrl+A,再按Ctrl+S,表示发送文件,出现提示时,输入文件的完整路径,然后回车
- 然后在开发板上,回车接收文件即可,回车后,自动开始文件传输
- 文件发送完成后,可以用md5sum命令检查,文件传输是否正确
具体的操作过程和结果如下:
iShot_2024-02-22_10.16.44
七、总结
做为一款可供工业开发使用评估的开发板,米尔-TI AM62x开发板 提供了RS485接口,可以很方便的进行485设备的通讯和控制。
后续将会使用485解决的读卡器进行测试通讯,并分享经验。
八、参考资料