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

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

目录

    • 参考连接
    • 硬件准备
    • CAN使能配置
      • 修改GPIO口功能
      • CAN属性设置
    • 硬件连接
    • 测试
    • 可能遇到的问题
    • SocketCan + ROS

参考连接

  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个寄存器的值。具体可以从文档看到:
Nvidia Jetson AGX Orin使用CAN通信 |收发器&CAN分析仪双版本_第1张图片以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

硬件连接

Nvidia Jetson AGX Orin使用CAN通信 |收发器&CAN分析仪双版本_第2张图片

  • 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同理)

效果:
Nvidia Jetson AGX Orin使用CAN通信 |收发器&CAN分析仪双版本_第3张图片Nvidia Jetson AGX Orin使用CAN通信 |收发器&CAN分析仪双版本_第4张图片

如果没有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发送。
如有大佬解决了,烦请指教。

你可能感兴趣的:(笔记,自动驾驶)