在板卡的批量生产测试中,CAN 可以两个互相收发数据做功能检验,但部分板卡只有一个 CAN 接口的情况下,不方便测试。于是找到了这样一个 RS232-CAN 转换器,让 CAN 与 RS232 进行对接测试。
对 CAN 总线信号与 RS232 通道数据进行相互转换,以达到两种不同协议进行数据通信的效果。还有高级的数据过滤等功能可以配置使用。
基于广州创龙的 5728-IDK 板卡测试。
1)转换器的 VIN 管脚需提供 5V 电源供电。
2)转换器的 GND、CANH、CANL 管脚各自连接板卡 CAN 接口的对应信号管脚。
3)当前这款转换器上标识的 G_ISO 信号管脚并没有引出。不用理会。
使用转换器的出厂配置,CAN 数据处理为透传模式,不做过滤,CAN 波特率 1000K,RS232 波特率 9600。
注意两个拨码,MOD 拨上,OFF;RES 拨下,ON。
使用 canutils 工具中的 canconfig 命令进行配置波特率。
# canconfig can0 stop
# canconfig can0 bitrate 1000000
# canconfig can0 start
先执行 RS232 接收程序
# ./rs232_recv.py /dev/ttyS0 &
然后执行 CAN 数据发送程序
# cansend can0 -i 0x00 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38
这里 -i 指定 CAN 数据帧 ID,可以随意设置。后面发送 8 字节数据,十六进制表示,分别对应字符 1、2、3、4、5、6、7、8。
先执行 can 接收程序
# candump can0 &
然后执行 RS232 数据发送程序
# ./rs232_send.py /dev/ttyS0
这里 Python 程序往串口发送的数据为字符串 "12345678"。candump 以十六进制打印出收到数据的 ASCII 码。
#!/usr/bin/env python
import os, sys, time
import serial
if (len(sys.argv) != 2):
print("Usage: {0} uart_path".format(sys.argv[0]))
sys.exit(10)
UART_PATH = sys.argv[1]
dev = serial.Serial(UART_PATH, 9600, serial.EIGHTBITS,
serial.PARITY_NONE, serial.STOPBITS_ONE, 10)
wbuf = '12345678'
dev.write(wbuf)
dev.close()
sys.exit(0)
#!/usr/bin/env python
import os, sys, time
import serial
if (len(sys.argv) != 2):
print("Usage: {0} uart_path".format(sys.argv[0]))
sys.exit(10)
UART_PATH = sys.argv[1]
dev = serial.Serial(UART_PATH, 9600, serial.EIGHTBITS,
serial.PARITY_NONE, serial.STOPBITS_ONE, 10)
wbuf = 'Hello'
rbuf = dev.read(8)
print('Read: ' + rbuf)
dev.close()
sys.exit(0)
官网: http://www.ldxn-beijing.com/a/rcmjsj/60.html
淘宝: https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w5003-20328741818.2.513153ce4cOInB&id=525338898798