Jetson Nano配置MCP2515 CANBUS模块

  • 硬件环境
    • Jetson Nano
    • MCP2515 CANBUS模块
  • Jetson Nano软件环境
  • 连线
  • 加载mcp2515驱动
    • jetson-io.py配置
    • bug修改
  • 启动can
  • 通信验证
    • 安装can-utils
    • 接收及发送
  • 可能碰到的问题
  • JetPack版本低于4.6的配置
  • 最后

硬件环境

Jetson Nano

tb采购的Nano 4GB套件

MCP2515 CANBUS模块

tb采购的模块,晶振频率8MHz,传输芯片为TJA1050


Jetson Nano软件环境

L4T 32.7.2 [ JetPack 4.61 ]
Ubuntu 18.04.6 LTS
Kernel Version: 4.9.253-tegra


连线


加载mcp2515驱动

JetPack从版本4.6开始已经将mcp2515及其驱动集成至device tree了,可以使用“jetson-io”对其进行配置,但是,直到版本4.61存在bug(本文碰到的问题是能够接收数据但不能发送数据)需要手动修改,这将在后面说明

jetson-io.py配置

首先使用jetsonUtilities查看JetPack版本,如果高于4.6则使用jetson-io.py直接配置mcp2515,如果版本低于4.6则需要手动添加(手动添加过程略复杂,本文只给出连接供参考)

在终端输入命令:

sudo /opt/nvidia/jetson-io/jetson-io.py

选择“Configure Jetson 40pin Header”,在其子页面中选择“Configure for compatible hardware”:


随后选择“MCP251x CAN Controller”,此时将看到pin的分配将spi1(19,21,23,24,26)和spi2(13,16,18,22,37)置位,即可以同时连接两个mcp2515:


选择“Save pin changes”以及随后的“Save and reboot to reconfigure pins”:


重启后,在终端输入命令:

ip link

将看到can0(如果只接了一个mcp2515模块),以及can1(接了两个mcp2515模块)

至此,mcp2515已经配置完毕,理论上使用“can-utils”即可测试验证,但如前述JetPack4.6/4.61存在bug,本文碰到的现象是mcp2515只能接收数据不能发送数据,类似现象在Nvidia论坛已经有讨论:
https://forums.developer.nvidia.com/t/bug-jetson-nano-p3450-b00-with-mcp2515-can-receive-but-cannot-send/187683

bug修改

需要修改Nano启动的device tree文件,区别于树莓派“/boot”目录下的设备配置文件,Jetson series的“/boot”目录下存放的是device tree文件dtb

首先,需要确定Nano当前使用的dtb文件,在终端输入命令:

sudo nano /boot/extlinux/extlinux.conf

文件中以“FDT”开头的即为当前使用的dtb文件:

得到当前使用的dtb文件后,即可对其修改,使用dtc命令首先将dtb转换为dts(可编辑的device tree文件),然后再转回dtb,在终端输入命令:

cd /boot
sudo dtc -I dtb -O dts -f /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb -o /boot/try.dts

该命令将当前dtb转换为一个临时的dts文件“try.dts”,用于属性修改,该文件命名可自行决定:

dtb文件转换为dts后即可对其进行修改,继续在终端输入命令:

sudo pluma try.dts

找到“can_clock”语句,修改mcp2515的晶振频率,市面上采购的mcp2515模块其晶振几乎都为8MHz,因此将语句“clock-frequency = <0x1312d00>”修改为“clock-frequency = < 0x7a1200>”,即从原来的20,000,000修改为8,000,000:

TIP:这里为16进制,也可以直接使用10进制,比如<8000000>

该文件另一个需要修改的地方是spi的状态属性,找到“spi@”语句,对标注有“compatible = “microchip,mcp2515”;”语句的spi添加状态

status = "okay";

对标注有“compatible = “tegra-spidev”;”语句的spi添加状态

status = "disabled";


NOTE:这里有两组spi,每一组都需要设置状态,说明中只示例了一组

保存文件,并退出。然后再次使用dtc命令将修改过的dts,转换回dtb文件,在终端继续输入命令:

sudo dtc -I dts -O dtb -f /boot/try.dts -o /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb

转换完成后,重启,继续输入命令:

reboot

重启后即可启动can

NOTE:区别于树莓派通过“/boot”下的配置文件进行mcp2515中断管脚的设置,Jetson series写入了dts,可以通过dts查看其所配置的中断管脚,也可以通过命令:

cat /proc/interrupts | grep mcp


查看到当前mcp2515模块所配置的中断为“GPIO 200”,查看GPIO map即为管脚31,这也是“连线”章节所标注的中断管脚


启动can

在终端输入命令:

sudo ip link set can0 up type can bitrate 500000

其中bitrate这里设置为500Kbps

can启动后,可以通过命令查看其状态及基本参数:

ip -d -s link show can0


可以看到can0的基本信息,其中“clock 4000000”也是目前kernel的bug,理论上应该是“800000”,这里可以忽略


通信验证

安装can-utils

在终端输入命令:

sudo apt install can-utils

该工具可以以命令行的方式通过SocketCAN接口测试can0,其主要命令如下:

candump – Dump can packets – display, filter and log to disk.
canplayer – Replay CAN log files.
cansend – Send a single frame.
cangen – Generate random traffic.
canbusload – display the current CAN bus utilisation.

我们将使用其中的cadump和cansend命令进行接收和发送的验证

接收及发送

本文利用USB-ttl CAN模块及其上位机做为验证can controller,tb采购

  1. 连接USB-CAN模块的TX到MCP2515的H,RX到L

  2. 将USB-CAN插入电脑,并启动其客户端,点击“自动搜索”按钮,将自动选择USB-CAN的串口端口;选择“透传模式”

  3. 点击“设置模块”,确定bitrate是否与mcp2515所设置一致

  4. 在Nano终端利用can-utils开启接受数据,输入命令:

 candump can0

开启等待接受数据

  1. 在USB-CAN上位机中输入发送的数据,比如“CAN Test”,其16进制为“43 41 4e 20 54 65 73 74”点击“发送”按钮,随后可以看到Nano接收数据的终端将显示所接收到的数据

  2. 用can-utils在Nano开启发送数据的终端,并发送数据至USB-CAN上位机,我们发送字符串“hello”至上位机,设备号定为1,其16进制数据“68 65 6c 6c 6f”
    在终端中输入命令:

cansend can0 001#68656c6c6f


可能碰到的问题

JetPack版本高于4.6,使用“jetson-io.py”配置时,看不到“MCP251x CAN Controller”
可能的原因是已经在“Configure header pins manually”中将spi1和spi2配置占用了,通过“jetson-io”将其取消后即可看到:


JetPack版本低于4.6的配置

JetPack版本低于4.6不能使用“jetson-io”进行配置,需要纯手动修改dts,过程比较复杂,本文不重点讨论,有需要的可以参考连接:
https://github.com/Thor-x86/seeed-linux-dtoverlays
以及Nvidia官方论坛的讨论:
https://forums.developer.nvidia.com/t/jetson-nano-and-mcp2515-can-module/112271


最后

至此,整个mcp2515和Jetson Nano的配置及通信验证完成,可以使用mcp2515开展CANBUS相关的运用开发。本文是苇航智能在实现利用CANBUS进行通信时所碰到坑的一个记录,也希望能对大家带来帮助,如果文中有错误和不明确的地方,欢迎指正,共同交流,xinjue.zou.whi@gmail.com

Jetson Nano配置MCP2515 CANBUS模块相关推荐

  1. Jetson Nano配置踩坑全记录

    Jetson Nano配置踩坑全记录 Jetson Nano相关参数:JetPack 4.6,cuda 10.2, SD卡内存:512G 一.Jetson Nano系统镜像烧录 在Nvidia官网下载 ...

  2. Jetson Nano配置YOLOv5并实现FPS=25

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 一.版本说明 JetPack 4.6--2021.8 yolov5-v6.0版本 使用的为yolov5的yolov5n.pt,并利用tensorr ...

  3. jetson nano配置过程中踩过的坑

    一.更换源地址后apt-get update出错 解决办法: 进入桌面,打开设置 ------软件更新---------勾选所有选项,再次运行更新命令 二.python3及pip安装 sudo apt ...

  4. Jetson nano : 配置虚拟环境virtualenv。

    Anaconda官方不支持aarch64架构,所以Jetson nano不能直接使用Anaconda,可以使用Archiconda或者virtualenv. 简单说说virtualenv使用. 安装p ...

  5. Nvidia jetson nano 配置 CUDA9 CUDNN7.1.5

    卸载cuda10.cudnn7.5 查看已安装cuda #通过dpkg命令,查看相关cuda安装的包 dpkg -l | grep -i cuda 查询出来是这些,可以根据查询出来的包来用apt-ge ...

  6. Jetson Nano ( 一) 配置流程

    Jetson Nano 配置流程( 一) 文章目录 Jetson Nano 配置流程( 一) 1.系统烧录 2.apt换国内源 3.CUDA CUDNN OpenCV 检查是否安装完整 3.1 CUD ...

  7. jetson nano 烧录、更换镜像源、配置xrdp、安装Archiconda、配置CUDA、安装pytorch环境一条龙服务

    jetson nano 烧录.更换镜像源.配置xrdp.安装Archiconda.配置CUDA.安装torch环境一条龙服务 一.jetson nano烧录 1.jetson nano上电 2.镜像烧 ...

  8. ubuntu、jetson nano 远程桌面xrdp配置教程

    ubuntu.jetson nano 远程桌面xrdp配置问题 配置步骤: jetson nano配置过程中出现报错解决 jetson nano配置xrdp后,无法打开终端Terminal 方案 相同 ...

  9. Jetson Nano 硬件相关

    文章目录 前言 核心板 规格参数 框图 260-Pin SO-DIMM接口 供电部分 USB PCIe GBE MIPI DSI / DP / HDMI MIPI CSI SD卡/SDIO Audio ...

  10. 已阻止应用程序访问图形硬件_玩转智能硬件之Jetson Nano(三)深度学习环境搭建...

    0.前言 iotboy:玩转智能硬件(一)Jetson Nano安装篇​zhuanlan.zhihu.com iotboy:玩转智能硬件(二)Jetson Nano配置篇​zhuanlan.zhihu ...

最新文章

  1. 在 Shell 脚本里使用数组
  2. 【SeeMusic】视频编辑 ( 视频 X 坐标 | 视频 Y 坐标 | 视频旋转 | 视频扭曲 )
  3. C++中的赋值操作符重载
  4. 数据结构--双向链表
  5. always on sql 收缩日志_SQL Server AlwaysOn日志收缩
  6. Quartz实现定时任务实例
  7. 两个引用指向同一个数组的内存图
  8. 如何借助log4j把日志写入数据库中
  9. 数学建模matlab视频教程,matlab编程教程_求matlab视频教程,主要用于数学建模方面的...
  10. 易买电商网站项目总结
  11. h5 游戏 游戏框架 Phaser
  12. android 第三方键盘,6款Android平台第三方输入法横评
  13. 电大计算机应用基础实训任务1-4,计算机应用基础本形考任务1
  14. 一些思考:腾讯股价为何持续都低
  15. 中兴路由器查看端口详情命令
  16. 量化交易6-backtrader编写策略的时数据获取
  17. input获取焦点vue_在Vue中输入框自动获取焦点的三种方式
  18. signing failed: agent refused operation
  19. SKYLAKE平台安装win7步骤(U盘)
  20. 运动无线耳机哪款不容易掉、最不容易脱落的蓝牙耳机推荐

热门文章

  1. php小刀娱乐网源码,PHP精仿小刀娱乐网资源下载站网站整站源码
  2. Head First Java 中文版 (第 2 版) PDF 下载
  3. java读取文件 classpath_Java读取Classpath文件
  4. 甘特图首选解决方案-世界级甘特图控件(XGANTT) - XGantt甘特图中文官方网站
  5. 使用三边定位算法进行室内定位
  6. selenium实战二:登入QQ空间
  7. 基于java的客户关系管理系统的设计与实现(论文+毕业设计)(完整源码可演示)
  8. KK音标和国际音标的对照
  9. python 字段_python字典查询
  10. 医库软件-珍立拍 成功晋级黑马大赛总决赛