Nvidia Jetson AGX Orin使用CAN通信 |收发器&CAN分析仪双版本

目标:通过调用AGX端口的CAN实现上位机与主控的通信。
整个测试流程都可以直接看官网文档。

参考连接

  1. Jetson AGX Orin CANFD 使用
  2. NVIDIA Xavier CAN
  3. AGX CAN通信 官网文档

硬件准备

  1. Nvidia Jetson AGX Orin / Xvaier / NX
  2. CAN收发器(本文用的是TJA1050)
  3. CAN分析仪(非必须)
  4. 若干杜邦线

CAN使能配置

修改GPIO口功能

由于默认的CAN引脚不是配置为CAN,因此需要修改4个寄存器的值。具体可以从文档看到:
在这里插入图片描述以Orin为例,图中Addr就是寄存器地址,value就是需要写入的值.

  1. 使用busybox修改寄存器的值
sudo apt-get install busybox
busybox devmem 0x0c303018 w 0xc458
busybox devmem 0x0c303010 w 0xc400
busybox devmem 0x0c303008 w 0xc458
busybox devmem 0x0c303000 w 0xc400
  1. 挂载CAN内核
sudo modprobe can
sudo modprobe can_raw
sudo modprobe mttcan

CAN属性设置

例如将CAN0波特率设置成250k

sudo ip link set down can0
sudo ip link set can0 type can bitrate 250000
sudo ip link set up can0

注意,配置前需要先关闭can

硬件连接

在这里插入图片描述

  • CAN0: RX——Pin29 ;TX——Pin31 (收发器的CANH,CANL接分析仪)
  • CAN1: RX——Pin37 ;TX——Pin33
  • GND: Pin39 / 30
  • VCC: Pin2 / 4 (具体看收发器,一般都是接5v)

测试

用can-utils进行简单的can收发测试,后续将用SocketCan结合ROS。

sudo apt-get install can-utils

cansend can0 123#00.00.00.00.11.11.11.11  #cansend can0/1 [can_id]#[八字节数据]

cangen -v can0  #随机发送

candump can0 #接受can帧

(can1同理)

效果:
AGX端CAN分析仪

如果没有can分析仪,可以短接CAN0、CAN1的RX TX,并设置回环模式。具体可以查看参考连接[2]、[3]

可能遇到的问题

  1. 发送一定数量can帧后报错 write: No buffer space available
    解决方法:将缓存区队列长度设大一点 参考
    出现这个问题原因是,没有对象接收can帧,就产生了阻塞。所以这个问题也代表了can通信还是存在问题,即无法通过can分析仪查看收发的can帧信息,需要检测硬件连接和软件设置。

SocketCan + ROS

待续。


Up to 2023.6
一直没更新是因为在使用socketcan的时候遇到了一些无法解决的问题(收发非常不稳定)
另,在使用CAN收发器这个方案时,总会遇到许多奇奇怪怪的问题,比如有些问题在NVIDIA的论坛提问,得到的回复时有些官方库没有正常安装。总体来说,个人觉得这个方法并不好用稳定。

解决方法:**购买带有LINUX驱动的CAN分析仪,调用厂家的报文收发函数就好了,比较简单。**

分析仪价格也不算贵,500左右吧。

当然这其中可能也会涉及到缓冲区的问题,我自己遇到的情况是,通过ROS发送接收到的报文数组时,一定时间(一定数量)后,节点便报错。解决方法是一条条can_frame发送。
如有大佬解决了,烦请指教。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值