在 Nvidia Jetson Xavier 开发者套件上启用 CAN 总线

本文为本人调试 Xavier 时遇到的,演示了如何开启 Nvidia Jetson Xavier 开发者套件的 CAN 总线,是一篇非常优秀的指导文章。本文原作者为 Ramin Nabati,由 SPtuan 获取其授权并翻译。原文链接为:

https://medium.com/@ramin.nabati/enabling-can-on-nvidia-jetson-xavier-developer-kit-aaaa3c4d99c9

在 Nvidia Jetson Xavier 开发者套件上,共有 2 路 CAN (Controller Area Network) 控制器,但是板上没有 CAN 收发器。而收发器可以很轻松地连接上 Jetson Xavier 套件。在这个教程中,我将介绍并示范在 Jetson Xavier 启用 CAN 控制器的所有步骤。

步骤为,首先配置 GPIO 引脚并启用 CAN 控制器,最后连接 CAN 收发器。

目录

1 启用 CAN 控制器

可以看出 Jetson Xavier 有一组 GPIO 扩展口,CAN 控制器可以在此引出。但是,CAN 控制器对应的引脚被默认配置为符合 Raspi 40 引脚标准的 GPIO,因此我们首先需要进行引脚配置,来打开 CAN 功能。根据 Nvidia Xavier 开发人员论坛上的这篇文章,有两种方法可以重新配置这些引脚。第一种方法是使用特定的 pinmux 配置闪烁 Xavier,但是要求重新使用 Jetpack 刷写 Xavier 固件。由于不想重新刷写 Xavier,因此我选择第二种解决方案。

第二种解决方案,是使用寄存器读写工具来覆盖 CAN 控制器引脚对应寄存器值。唯一的问题是这些设置不是持久的,这意味着每次重新启动 Jetson Xavier 时都需要重复这些操作。

可以通过编写在系统启动时自动运行的脚本来解决问题。在 Jetson Xavier 上打开一个终端并按照以下步骤操作。

  • 安装 busybox 以更改寄存器值
sudo apt-get install busybox
  • 重新配置与 CAN 控制器引脚对应的四个寄存器值,如下
sudo busybox devmem 0x0c303000 32 0x0000C400 
sudo busybox devmem 0x0c303008 32 0x0000C458 
sudo busybox devmem 0x0c303010 32 0x0000C400 
sudo busybox devmem 0x0c303018 32 0x0000C458
  • 然后使用 modprobe 命令安装 CAN 控制器并加载驱动程序
sudo modprobe can
sudo modprobe can_raw
sudo modprobe mttcan
  • 接下来根据你的要求配置 CAN 控制器。下面的例子是 CAN 比特率 (Bitrate) 设置为 500 Kbps,启用灵活数据速率(FD),将有效负载比特率设置为 2 Mbps,启用总线错误报告。如果您暂时不确定自己的配置,可以只设置 bitrate 值并忽略其他选项
sudo ip link set can0 type can bitrate 500000 \
    dbitrate 2000000 berr-reporting on fd on
sudo ip link set can1 type can bitrate 500000 \
    dbitrate 2000000 berr-reporting on fd on
  • 然后开启 CAN
sudo ip link set up can0
sudo ip link set up can1
  • 使用 ifconfig 命令以检查 CAN 是否成功启用。应该能看到 can0can1 这两个网络设备,如下图

  • 恭喜!你已经完成了 CAN 的设置。由于重启后会失效,接下来创建一个 enable_CAN.sh 以实现系统启动时自动配置
touch /enable_CAN.sh
chmod 755 /enable_CAN.sh

(译者注:不要盲目复制命令,如果遇到权限不足时可尝试使用 sudo 提升权限)

  • 接下来编辑这个脚本。你可以使用 vim、nano、gedit 等你最喜欢的工具
#!/bin/bash

sudo modprobe can
sudo modprobe can_raw
sudo modprobe mttcan
sudo ip link set can0 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
sudo ip link set can1 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
sudo ip link set up can0
sudo ip link set up can1

exit 0
  • 如果你的 Jetson Xavier 上已经有了文件 /etc/rc.local,请直接跳至下一步。如果它不存在,在终端中运行以下命令来创建它。(译者注:/etc/rc.local 为开启自动启动脚本,如果你不喜欢优雅的脚本管理,可以将上述脚本直接写在 /etc/rc.local 的 exit 0 前)
printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
  • /etc/rc.local 文件中的 exit 0 行前添加以下行:
sh /enable_CAN.sh &
  • 不出意外,你的 /etc/rc.local 应该是这样的

现在系统启动时应该能够自动运行 enable_CAN.sh 脚本并配置 CAN 控制器了。可以重新启动 Jetson Xavier,在终端中运行 ifconfig 命令,检查是否看到 can0can1 设备。

2 安装 CAN 收发器

KNACRO CAN 总线收发器

我使用了两个 KNACRO CAN 总线收发器进行设置,两个 CAN 总线连接起来。如果只需要一路 CAN 总线,安装一个收发器即可。我使用的收发器工作电压为 3.3V,并且已经在总线上焊接了 120 欧姆的终端电阻。

(译者注:CAN 总线收发器模块很常见,在淘宝上直接搜索即可。)

Jetson Xavier 上扩展 GPIO 引脚排列以及引脚#1 的位置如下图。

Nvidia Jetson Xavier 扩展接头引脚

我们首先将扩展接头连接器的引脚 #29(CAN0_DIN)和引脚 #31(CAN0_DOUT)分别连接一个收发器上的 CRX 和 CTX 引脚。同样,引脚 #37(CAN1_DIN)和引脚 #33(CAN1_DOUT)连接到另一个收发器上的 CRX 和 CTX 引脚。

另外,CAN 收发器需要供电,因此还需要将扩展​​插头连接器上的两组 3.3V 和 GND 引脚分别连接到收发器上的 3V3 和 GND 引脚。下图演示了引脚连线图。

收发器和扩展接头之间的接线

收发器上的 CANH 和 CANL 引脚需要连接到要与之通信的两条 CAN 总线的 CAN 高电平和 CAN 低电平线,即接入 CAN 网络。为了放置这两块小 PCB 板,我制作了个平台,如下图。

如上图所示,我使用 DB-9 连接器接入 CAN 总线。两组绞合线分别为是 CAN0 和 CAN1 的 CANH 和 CANL 线。为了保持低错误率,CAN 高和 CAN 低电线通常是扭曲的(译者注:CAN 总线使用双绞线形式,以减少干扰)。在 DB-9 连接器上,我用引脚 1 和 8 连接 CAN0 低和高,针脚 2 和 7 对应 CAN1 低和高。您可以按照自己的需求安排 DB-9 引脚。

3 笔记

  1. 根据 Jetson AGX Xavier 规范和文档,由于默认启用 SoC 内部的 3.3V 上拉电阻,系统上电时,引脚 37,29,33 和 31 将被拉至 3.3V。因此,您使用的收发器必须能够在其 CTX 和 CRX 引脚上应对初始的 3.3V 电压。本教程中使用的收发器似乎正在处理这个初始的 3.3V,没有发生任何问题。
  2. 有一组非常方便的脚本:GitHub - hmxf/can_xavier: CAN Bus Drive Script
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值