i.MX6 CAN接口,Linux中加入canbus驱动,Linux canbus应用程序编程
使用硬件
RioTboard
使用软件
linux Mfgtools 串口软件
正文
1. i.mx6 CAN接口
从上图可以看出,CAN1和CAN2的引脚复用情况,RioTboard没有单独引出CAN接口,通过上表和RioTboard的电路图,我们发现可以使用SD3_DAT1作为CAN2的RX引脚,SD3_DAT0作为CAN2的TX引脚。
最终跳线图
2. 驱动修改
修改引脚配置,将/* USDHC3 */的引脚功能去除。
修改arch/arm/mach-mx6/board_mx6dl_RIoTboard.h如下所示:
在arch/arm/mach-mx6/board_mx6solo_RIoTboard.c mx6_RIoTboard_board_init函数中添加can驱动,我添加的代码如下:
在1178行添加can初始化函数。编译完成,下载到RioTboard中后会在启动log多了CAN启动相关信息。
3. 相关软件编译
我们使用网上现有的测试软件来测试linux环境下的canbus。后面我们可以参考下面的开源代码,实现自己的应用程序。
1)首先编译libsocketcan
下面的canutils需要这个库。
修改Makefile文件CC=arm-linux-gcc
./configure --prefix=/usr/local/arm/libsocketcan --host=arm-linux --build=i386
make
make install
编译成功,在 <安装路径>/lib/pkgconfig/下有个libsocketcan.pc文件,将其拷贝到PC的/usr/lib/pkgconfig/目录下。
2)编译canutils-4.0.6
./configure --host=arm-linux --prefix=/usr/local/arm/canutils libsocketcan_LIBS=
-lsocketcan LDFLAGS=-L/usr/local/arm/libsocketcan/lib CPPFLAGS=
-I/usr/local/arm/libsocketcan/include
(其中--host是指定交叉工具链,--prefix是指定库的生成位置,libsocketcan_LIBS是指定canconfig需要链接的库,LDFLAGS是指定外部库的路径,CPPFLAGS是指定外部头文件的路径)
make
make install
将canutils安装目录下bin/和sbin/的程序拷贝到文件系统相应的目录下。
4. 使用方法
配置can0接口波特率为1MHz
canconfig can0 bitrate 1000000
打开can0
ifconfig can0 up
发送数据测试
cansend can0 -i0x100 11 22 33 44
接收数据
canecho can0 –v &(后台运行)
5. 测试架构及测试结果
使用了一块STM32F207的板子,这块板子上自带VP230 CANBUS收发器。我们在RioTboard上另接了一个VP230的模块。
VP230模块特写
STM32F207和VP230芯片特写。
创建讨论帖子
登录 后参与评论