常见问题

Jetson/AGX Xavier CAN

2021-07-19 17:16:57 admin 39

本页面介绍了如何在 Jetson AGX Xavier 上的 Linux 中启用和验证 CAN。
Jetson AGX Xavier 公开了两个 CAN 实例:CAN0、CAN1。

内容

 [隐藏

硬件

Jetson Xavier 引脚、Tegra 信号、引脚类型https ://developer.nvidia.com/embedded/dlc/jetson-xavier-oem-product-designguide,第 12.4 节
在载板上暴露的引脚http://developer.nvidia。 com/embedded/dlc/jetson-xavier-developer-kit-carrier-board-spec , section 3.3
注意,Jetson AGX Xavier 模块和载板上没有 CAN 收发器

软件

本部分包括 CAN Driver Enable、CAN Verification 和 Socket CAN Program。
要启用 CAN 驱动程序,需要执行以下两个步骤:

  1. 更新 Pinmux

  2. 通过安装内核模块和配置接口启用 CAN

CAN 驱动程序使能

更新 Pinmux

为了符合 Raspi 40 引脚标准,Jetson AGX Xavier 上的 CAN I/O 引脚配置为具有 GPIO 功能。要将引脚配置为 CAN 功能,需要更改 pinmux 配置文件。

找到 Pinmux 配置文件

PINMUX_CONFIG变量$ JETPACK_ROOT /泽维尔/ Linux_for_Tegra /杰特森-xavier.conf定义pinmux配置文件像下面的名字。
pinmux 配置文件位于 $JETPACK_ROOT/Xavier/Linux_for_Tegra/bootloader/t186ref/BCT/。

#!/bin/bash  # 版权所有 (c) 2017-2018,NVIDIA 公司。版权所有。 # # 以源代码和二进制形式重新分发和使用,有或没有 # 修改,在满足以下条件的情况下允许 # 满足: # * 重新分发源代码必须保留以上版权 # 注意,此条件列表和以下免责声明。 # * 以二进制形式重新分发必须复制上述版权 # 注意,此条件列表和以下免责声明在 # 随分发提供的文档和/或其他材料。 # * 既不是 NVIDIA CORPORATION 的名称,也不是其名称 # 贡献者可用于认可或推广衍生产品 # 未经事先书面许可,不得擅自使用本软件。 # # 本软件由版权持有人“按原样”和任何 # 明示或暗示的保证,包括但不限于 # 对特定商品的适销性和适用性的暗示保证 # 目的被否认。在任何情况下,版权所有者或 # 贡献者对任何直接的、间接的、偶然的、特殊的、 # 示范性或间接性损害(包括但不限于, # 替代品或服务的采购;丢失使用、数据或 # 利润;或业务中断)无论是由什么原因引起的,也基于任何理论 # 责任,无论是合同责任、严格责任还是侵权 #(包括疏忽或其他)以任何方式因使用而导致 # 本软件,即使已被告知可能发生此类损坏。  # p2972-0000-devkit.conf:T194 芯片的配置  来源“${LDK_DIR}/p2972-0000.conf.common”; PINMUX_CONFIG="tegra19x-mb1-pinmux-p2888-0000-a04-p2822-0000-b01.cfg";

修改 Pinmux

在配置文件中设置 pinmux,本例中为 $JETPACK_ROOT/Xavier/Linux_for_Tegra/bootloader/t186ref/BCT/tegra19x-mb1-pinmux-p2888-0000-a04-p2822-0000-b01.cfg。
下面是变化。pinmux.0x0c303000 和 pinmux.0x0c303008 用于CAN1而 pinmux.0x0c303010 和 pinmux.0x0c303018 用于CAN0
或者按照How to Update Pinmux使用工具生成新的配置文件,推荐使用后一种方式。

差异 --git a/tegra19x-mb1-pinmux-p2888-0000-a04-p2822-0000-b01.cfg b/tegra19x-mb1-pinmux-p2888-0000-a04-p2822-0000-b01.cfg 索引 df43561..c61e80d 100644 --- a/tegra19x-mb1-pinmux-p2888-0000-a04-p2822-0000-b01.cfg +++ b/tegra19x-mb1-pinmux-p2888-0000-a04-p2822-0000-b01.cfg @@ -322,10 +322,10 @@ pinmux.0x0243d010 = 0x00000059; # spi1_cs0_pz6:rsvd1,上拉,三态启用,pinmux.0x0243d050 = 0x00000059; # spi1_cs1_pz7:rsvd1,上拉,三态启用,输入启用,lpdr禁用pinmux.0x0c301010 = 0x00000059; # safe_state_pee0: rsvd1, 上拉, 三态启用, 输入启用, io_high_voltage-disable, lpdr-disablepinmux.0x0c301038 = 0x00000058; # power_on_pee4:rsvd0,上拉,三态启用,输入启用,lpdr禁用 -pinmux.0x0c303000 = 0x0000c055;# can1_dout_paa0:rsvd1,下拉,三态启用,输入启用 -pinmux.0x0c303008 = 0x0000c055;# can1_din_paa1:rsvd1,下拉,三态启用,输入启用 -pinmux.0x0c303010 = 0x0000c059;# can0_dout_paa2:rsvd1,上拉,三态启用,输入启用 -pinmux.0x0c303018 = 0x0000c059;# can0_din_paa3:rsvd1,上拉,三态启用,输入启用 +pinmux.0x0c303000 = 0x0000c400;# can1_dout_paa0:rsvd1,下拉,三态启用,输入启用 +pinmux.0x0c303008 = 0x0000c458;# can1_din_paa1:rsvd1,下拉,三态启用,输入启用 +pinmux.0x0c303010 = 0x0000c400;# can0_dout_paa2:rsvd1,上拉,三态启用,输入启用 +pinmux.0x0c303018 = 0x0000c458;# can0_din_paa3:rsvd1,上拉,三态启用,输入启用pinmux.0x0c303020 = 0x0000c000;# can0_stb_paa4:rsvd0,三态禁用,输入禁用pinmux.0x0c303028 = 0x0000c000;# can0_en_paa5: rsvd0, 三态禁用, 输入禁用pinmux.0x0c303030 = 0x0000c058;# can0_wake_paa6:rsvd0,上拉,三态启用,输入启用

闪存设备

 $ cd $JETPACK_ROOT/Xavier/Linux_for_Tegra/$ sudo ./flash.sh jetson-xavier mmcblk0p1

启用 CAN

安装 CAN 模块

默认情况下,CAN 被编译为模块。在这种情况下,在船上运行以下命令来安装模块。

 $ sudo modprobe can
 $ sudo modprobe can-raw
 $ sudo modprobe can-dev
 $ sudo modprobe mttcan

设置CAN

现在,初始化了两个 CAN 实例:can0、can1。以can0为例。

在设置 CAN 之前,运行以下命令以确保 CAN 已关闭。

 $ sudo ifconfig can0 down

设置 CAN 比特率(在本例中为 1000000)并启动 CAN。

 $ sudo ip link set can0 up type can bitrate 1000000

现在,can0 可以使用了。

CAN验证

安装 can-utils

按照https://elinux.org/Can-utils在 Jetson AGX Xavier 上安装 can-utils。

发送 CAN 报文

下面的命令可以发送 CAN 消息:

 $ cansend can0 123#abcdabcd

下面的命令可以生成随机 CAN 消息:

 $ cangen -v can0

接收CAN报文

下面的命令可以转储 can0 接收到的消息:

 $ candump can0

Socket CAN程序

https://en.wikipedia.org/wiki/SocketCAN有一个 SocketCAN API 的工作示例。


首页
产品
案例
联系