CSM300A模块UART<---->CAN测试记录

UART 与 CAN 互转对测记录

1. 硬件使用

PC端:串口—>CSM300A(转换)
测试端:imx6ull的CAN接口

2. PC端发送数据(ubuntu)

2.1 方式一:使用 cutecom 串口工具进行发送数据

cutecom 发送数据(hex):
cutecom发送数据
接收端数据

root@ATK-IMX6U:~ip link set can0 type can bitrate 125000		# 设置为125000k
root@ATK-IMX6U:~ifconfig can0 up		#  开启 can0
root@ATK-IMX6U:~# candump can0		#  接收数据
  can0  00010203   [6]  04 05 06 07 08 09		# 00010203为帧ID
  can0  00010203   [5]  04 05 06 07 08

2.2 方式二:使用 echo 进行发送数据

2.2.1 PC发送端格式:
abc@abc:~$ echo -ne "\x01\x02\x03\x04\x05\x06\x07" | sudo tee /dev/ttyCH9344USB2

这条命令的作用是将十六进制字符串\x01\x02\x03\x04\x05\x06\x07发送到/dev/ttyCH9344USB2设备中。

-n 选项抑制了echo命令的自动换行。
-e 选项启用了对转义字符的解释,允许在字符串中使用特殊字符(如\x01表示十六进制字符)。

sudo tee /dev/ttyCH9344USB2 将输出写入到指定设备,需要管理员权限。

abc@abc:~$ echo -ne "\x01\x02\x03\x04\x05\x06\x07" | sudo tee /dev/ttyCH9344USB2
abc@abc:~$ echo -ne "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c" | sudo tee /dev/ttyCH9344USB2
abc@abc:~$ echo -ne "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e" | sudo tee /dev/ttyCH9344USB2
2.2.2 接收端
root@ATK-IMX6U:~candump can0                                                  
  can0  01020304   [3]  05 06 07     #01020304对应发送数据的\x01\x02\x03\x04为帧ID(我购买的CSM300A默认帧ID的长度和起始地址)                     
  can0  01020304   [8]  05 06 07 08 09 0A 0B 0C                                 
  can0  01020304   [8]  05 06 07 08 09 0A 0B 0C                                 
  can0  01020304   [2]  0D 0E
2.2.3 补充两种 echo 的写法区别,这两条命令的区别在于管道符号 | 的使用。
  1. 第一条命令:
echo -ne "\x01\x02\x03\x04\x05\x06\x07" | sudo tee /dev/ttyCH9344USB2

这个命令会先使用 echo 命令输出十六进制序列到标准输出,然后通过管道 | 将输出送到 sudo tee 命令。

  • echo -ne "\x01\x02\x03\x04\x05\x06\x07":会将十六进制序列直接输出到标准输出。-n 参数用于防止在结尾处添加换行符,而 -e 参数允许对转义字符进行解释。
  • sudo tee /dev/ttyCH9344USB2tee 命令会将标准输入的数据写入到指定文件 (/dev/ttyCH9344USB2),同时也会将数据复制到标准输出。由于需要权限才能写入 /dev/ttyCH9344USB2,所以在命令前面加了 sudo
  1. 第二条命令:
sudo echo -ne "\x01\x02\x03\x04\x05\x06\x07"  > /dev/ttyCH9344USB2

这个命令直接在命令行中使用 echo 输出,并通过 > 重定向将输出内容写入 /dev/ttyCH9344USB2

  • sudo echo -ne "\x01\x02\x03\x04\x05\x06\x07":在大多数情况下,这条命令会导致权限错误,因为 sudo 只会应用到 echo 命令,而不会应用到重定向操作符 >。因此,大多数情况下,你将会遇到权限问题。
  • > /dev/ttyCH9344USB2:这是一个输出重定向符号,它将 echo 的输出写入到 /dev/ttyCH9344USB2 设备中。

总结起来,第一条命令是正确的写法,因为它通过 sudo tee 提升了写入权限,并且不会遇到权限问题。第二条命令大多数情况下会遇到权限问题,因为 sudo 只会应用到 echo 命令,而不会应用到 > 重定向操作符。

3. 反向传输

使用 mx6ull 的 CAN0 接口向 CSM300A 发送数据最后由串口接收。

3.1 发送格式

使用 cansend 命令通过 can0 向接收单元发送8个字节数据:

root@ATK-IMX6U:~# cansend can0 1a8#0102030405060708                             

cansed 命令用于发送can数据,“1a8"是帧ID,” # “号后面的"0102030405060708” 是要发送的数据。
-注:CAN2.0,一次最多发送8个字节的数据。

3.2 数据接收

使用 CuteCom 接收数据,如下:
接收数据

# Hex output接收的数据
08 01 a8 00 00 01 02 03   04 05 06 07 08

08:数据长度
01 a8:帧ID
00 00:分割符号“#”
01 02 03 04 05 06 07 08:接收的数据
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值