IMX6 CAN接口调试
1). 简介
CAN(Controller Area Network)总线是嵌入式设备最为常用的接口之一,常用于汽车以及工业自动化等嵌入式领域,因此本文就基于嵌入式Linux演示使用CAN总线进行通讯测试。
本文所演示的平台来自于Toradex Colibri iMX6DL 和Apalis iMX6D ARM嵌入式平台,这两个平台是都是基于NXP iMX6系列ARM处理器,支持双核心Cortex-A9。
2. 准备
a). Colibri iMX6DL ARM核心版配合Colibri Eva Board V3.2B载板,连接调试串口到开发主机,同时配置好Ubuntu开发主机开发环境,具体操作方法可以参考这里。
b). Apalis iMX6D ARM核心板配合Ixora V1.0载板,连接调试串口到开发主机,同时配置好Ubuntu开发主机开发环境,具体操作方法可以参考这里。
c). Colibri iMX6DL和Apalis iMX6D系统使用Toradex Linux Release V2.6.1,下载和更新方法请参考这里。
d). Colibri iMX6DL 提供了两路来自与iMX6DL芯片的CAN总线(FlexCAN)支持,不过这个不是Colibri系列兼容定义;Colibri Eva Board上面通过SPI总线基于MCP2515芯片扩展了而一路CAN总线接口,这个是整个Colibri兼容的;因此对于本文的测试系统,我们可以有三路CAN总线支持,具体的Pin定义请见如下,其他Colibri系列产品的定义情况请见这里。
./ FlexCAN定义
./ MCP2515 原理图设计如下,在JP4&JP5跳线连接情况下X2 Top连接器连接的是MCP2515 CAN总线;当断开JP4&JP5跳线时候,可以使用连接线将FlexCAN RX/TX连接到X38来输出到X2 Top.
d). Colibri产品系列定义中CAN不是标准定义,因此针对Colibri系列产品使用CAN总线要根据版本情况对kernel或者device tree进行修改编译,下面针对Colibri iMX6DL V2.6.1版本进行配置,其他产品配置说明请参考这里。
./ 下载对应的V2.6.1 kernel源代码,具体下载和编译方法请参考这里。
./ 检查kernel config是否下面选项都已经配置,在V2.6.1版本下默认都已经配置。
--------------------------
CONFIG_CAN = y
CONFIG_CAN_RAW = y
CONFIG_CAN_BCM = y
CONFIG_CAN_DEV = y
CAN_FLEXCAN = y
CAN_MCP251X = y
--------------------------
./ 默认device tree只支持MCP2515 SPI CAN,通过如下修改device tree文件打开FlexCAN1和FlexCAN2,请注意在Toradex V2.7以上版本image中” &flexcan1”命名修改为”&can1”。
https://github.com/simonqin09/cantest/blob/master/flexcan.patch
e). Ixora载板CAN接口通过X20输出,Apalis iMX6D 默认device tree已经支持FlexCAN1和FlexCAN2,无需做改动。
3). 使用CAN Utilities对CAN接口进行测试
a). Linux系统通过SocketCAN层提供CAN支持,使得可以使用类似操作socket API函数来操作CAN总线,具体关于SocketCAN说明请见这里。
b). Colibri iMX6 和Apalis iMX6默认image已经包含can-utils,可以直接使用;如下硬件连接将Colibri iMX6 FlexCAN1和Apalis iMX6 FlexCAN1进行连接
./ Colibri Eva Board JP4和JP5跳线断开,将X9连接器 SODIMM_55和SODIMM_63管脚分别连接到X38连接器TX和RX插座。
./ Colibri Eva Board X2 Top DB9 管脚2和7通过两端均配置120Ohm终端电阻的连线和Ixora载板X20管脚1和2连接。
c). 使能FlexCAN接口,下面以Colibri iMX6为例,Apalis iMX6方法一致
--------------------------
root@colibri-imx6:~# ip link set can1 type can bitrate 500000
root@colibri-imx6:~# ip link set can1 up
/*也可以通过ifconfig up/down CAN接口*/
//root@colibri-imx6:~# ifconfig can1 up/down
/*ip –details查看CAN总线状态*/
root@colibri-imx6:~# ip -details link show can1
3: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DE0
link/can promiscuity 0
can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
bitrate 500000 sample-point 0.866
tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1
flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1
clock 30000000
/* ip -details -statistics 查看工作状态*/
root@colibri-imx6:~# ip -details -statistics link show can1
3: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DE0
link/can promiscuity 0
can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
bitrate 500000 sample-point 0.866
tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1
flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1
clock 30000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 0 0 0
RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
--------------------------
d). FlexCAN接口发送接收测试,下面以Colibri iMX6发送,Apalis iMX6接收为例,另外一个方向方法一致
--------------------------
/*Apalis iMX6*/
root@apalis-imx6:~# candump can0
interface = can0, family = 29, type = 3, proto = 1
<0x0000001f> [8] 11 22 33 44 55 66 77 88
/*Colibri iMX6*/
cansend can1 -e -i 0x1F 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
--------------------------
4). 通过C程序操作CAN总线示例
a). 首先同样需要使用ip link命令配置CAN接口bitrate并使能接口,这里同样在Colibri iMX6上面使用can1接口,同时Apalis iMX6上面使用can0接口。
b). 测试c程序代码请见如下:
https://github.com/simonqin09/cantest/blob/master/cantest.c
./ 程序执行包含两个变量,第一个变量为”-r”或者”-s”来制定接收或者发送,第二个变量为所要测试的CAN bus,如”can0”。
./ 具体以Colibri iMX6作为接收端,Apalis iMX6 作为发送端测试程序运行结果如下:
--------------------------
// Colibri iMX6 先运行接收命令
root@colibri-imx6:~# ./cantest -r can1
can port is can1
// Apalis iMX6 然后运行发送命令
root@apalis-imx6:~# ./cantest -s can0
can port is can0
can0 ID=0x1f data length=8
0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 Sent out
// 此时Colibri iMX6上面接收数据情况如下,证明已经发送接收成功
root@colibri-imx6:~# ./cantest -r can1
can port is can1
can1 ID=0x1f data length=8
0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
--------------------------
5). 总结
利用SocketCAN可以非常方便的在Linux下使用CAN总线,另外CAN总线也支持同时发送并接收,这里就不做演示了。
IMX6 CAN接口调试相关推荐
- 接口结构_适用于Mac系统的API接口调试应用
Apifox 中文版是一款适用于 Mac 的API接口调试应用.官方介绍 Apifox = Postman + Swagger + Mock.Apifox 可以用于接口文档.接口调试.Mock.自动化 ...
- java接口调试思想
对于接口调试的理解: 最近多次参与接口调试工作,一般情况都是获取对方接口文档,文档中有加密验证方式,根据加密验证方式开发,调用对应的接口. 可以不可以简化这个流程那,至少减少一方的工作量. 1.减少调 ...
- rap2检测哪些接口在使用_Apifox for Mac(接口调试管理工具)
Apifox 是一款用于接口文档定义.Mock 数据.接口自动化测试等等方面的工具,它的功能高效好用,接口云端同步,实时更新.成熟的团队/项目权限管理,满足各类企业的需求.有需要的朋友赶快来使用吧! ...
- 抓包工具Stream之接口调试和加密解码(二)
移动端iphone抓包调试神器-Stream安装和使用(一) 之前我们介绍了Stream工具的安装和使用,今天我们再来介绍下抓包请求筛选.接口详情.接口导出.接口调试.接口测试.编码解码加密等 1.抓 ...
- 调试工具_Apifox for Mac(接口调试管理工具)
Apifox 是一款用于接口文档定义.Mock 数据.接口自动化测试等等方面的工具,它的功能高效好用,接口云端同步,实时更新.成熟的团队/项目权限管理,满足各类企业的需求.有需要的朋友赶快来下载使用吧 ...
- S32K116调试记录(1)SWD接口调试
一.环境搭建 参考以下链接 http://blog.chinaaet.com/hxw718059156/p/5100057745 注意: 必须注册自己的NXP账号下载软件,license会发送到邮箱的 ...
- stm32cubeIDE STLINK连接SWD接口调试,启动GDB server失败的处理
stm32cubeIDE STLINK连接SWD接口调试,启动GDB server失败的处理 报警提示 Failed to bind to port 61234, error code -1: No ...
- JLINK的SWD接口调试器制作
SWD接口调试器制作 将1和2号脚连接在一起,连接到VCC上.其他引脚按照以上顺序排列即可.
- JESD204B接口调试记录2 - 资料
LMK04828 芯片手册相关资料,在TI官网下载:LMK04828 数据表.产品信息和支持 | 德州仪器 TI.com.cn 除了手册,还需要下载和使用TICSPRO-SW,产生所需要的时钟芯片配置 ...
最新文章
- [BSidesSF2020]decrypto-1
- 【网易云信获奖啦】2020 年值得再读一遍的技术干货 | 下篇
- 【数据结构】数组和广义表
- 【Java进阶】Spring Cloud中Zuul配置与案例实现
- 20应用统计考研复试要点(part1)--统计学
- 在Word XP中也能插入国际音标、拼音
- html没有插件怎么办,html网页包插件没有插入options.title
- eval() python_python基础-input函数和eval函数
- Oracle学习总结(9)—— Oracle 常用的基本操作
- 各大牛逼讲师的经典Jquery精品视频教程,大放送啦!!!(包括手机移动端JqueryWeb开发)!!!...
- java NIO 复习
- RAR和RAR4和zip那个压缩率最高
- AR路由器ETH端口使用方法
- 广告投放中的ROI是怎么计算的?
- IDEA2020 安装教程,图文教程
- Faas无服务器架构杂谈
- java 类继承命名_Java oop 代码7:A1,A2继承A且B1,B1继承B且A,B继承C的商品类,人物模型类两道题...
- 一文道破 结构体,枚举,联合
- spacewar无法连接至远程计算机,远程桌面无法连接–验证证书过期或无效的一个有效解决办法...
- java greenfoot_Greenfoot下载