完整Android CAN总线程序开发

最近在研究一块TI公司的TMDEVM-AM3358开发板,这是一款硬件资源相当丰富并且性能非常好的工业评估板,我重点需要用到板上的网卡、串口以及CAN总线。众所周知,在android这样一款风靡全球的移动端操作系统内部,对于网卡的支持已经伴随这一系统本身的发展而相当完善。然而,串口线已经逐步淡出我们的视野,但是由于简单易用,在很多时刻依然派得上用场。其中最少见的应该就是CAN总线了,所以在调试CAN模块之中遇到了很多的问题。遗憾的是,似乎就连谷歌上也很难找到关于AM335x系列的ARM开发板CAN开发的介绍,这里就将我这段时间以来在CAN上所做的工作和遇到的问题总结一下。方便有需要的人少走弯路。

关于CAN的介绍,官方给出了一份文档,点击下载。经过了好几遍的通读之后,对他的基本步骤及意图有了一些了解,但是有一点让我感到疑惑——所有的步骤都是在PC上完成的,但是最后的使用是在ARM上,我并没有看到哪一步对ARM板进行了操作,那么最后如何实现呢?要了解这个问题,首先简单看看文档的操作步骤。 首先我们需要将ARM板上的CAN模块启动,调节SW8,将profile设置为1。SW8在显示屏接线的下方,如下图所示:

ARM开发板运行linux系统并且不修改canutil工具源码

如果你的ARM是运行的linux系统,那么恭喜你,TI的linux源码中已经集成了CANUTIL工具,可以直接使用。但是默认CAN驱动好像是未打开的,例如:在ARM终端

root@am335x-evm:~# canconfig can0 bitrate 50000Cannot find device “can0″failed

提示找不到can0设备,说明内核中未加入CAN驱动,那么我们需要配置驱动,方法如下: 在内核根目录输入

gedit Makefile

找到如下片段:

export KBUILD_BUILDHOST := (SUBARCH) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:”%”=%)

修改为:

export KBUILD_BUILDHOST := $(SUBARCH) ARCH?= arm CROSS_COMPILE ?= arm-eabi-

此步骤目的是使当前内核编译模式为ARM平台。 接下来输入:

make menuconfig

按照图示步骤依次选择: 1. [*] Networking support —>

2. <*> CAN bus subsystem support —>

3. CAN Device Drivers —>

4. <*> Bosch D_CAN devices —>

注意把这里的D_CAN打上星号。 5. Generic Platform Bus based D_CAN driver

同样将这一项打上星号。

好了,驱动配置完毕,下面执行Make指令,随后将生成好的内核镜像制作到SD卡中,重新启动开发板,那么CAN0设备就可以使用了。 可以尝试通过以下指令进行配置和收发: 1. 配置can0波特率为50000 ,开启三采样模式

canconfig can0 bitrate 50000 ctrlmode triple-sampling on打开can0设备 canconfig can0 start发送数据cansend can0 接收数据candump can0ARM开发板运行android系统或者要重新编译canutil工具

如果你是用的android或者你想对CAN工具进行修改重新编译,那么还需要继续下面的步骤。 首先同样需要在内核中配置CAN驱动,,并将Profile Selection设置成1,方法同上。 然后下载源码,官方说明中是需要下载三种源码(点击可下载): – iproute2 – libsocket – canutil 但是这里我只需要用到最后一个canutil即可。

下载完成之后,首先配置环境变量,如下:

export GNUEABI=arm-arago-linux-gnueabiexport CC=$GNUEABI-gccexport LD=$GNUEABI-ldexport NM=$GNUEABI-nmexport AR=$GNUEABI-arexport RANLIB=$GNUEABI-ranlibexport CXX=$GNUEABI-c++export PREFIX=$FILESYS_PATH/usrLIBSOCKETCAN_INSTALL_DIR=$LIBSOCKETCAN_PATH/installexport PKG_CONFIG_PATH=$LIBSOCKETCAN_PATH/configLDFLAGS=”-Wl,–rpath -Wl,$LIBSOCKETCAN_INSTALL_DIR/lib”export INCLUDES=”-I$LIBSOCKETCAN_INSTALL_DIR/include”

其中PREFIX 是目标目录,可以自行设置。 然后进入canutils-4.0.6文件夹,输入以下指令:

prefixenable-debug

之后会根据目标平台生成相应的Makefile。接着依次执行:

makemake install

完毕之后,会在PREFIX/usr/bin下找到如下四个文件:

cansend , candump , cansequence , canecho

PREFIX/usr/sbin下找到如下一个文件:

canconfig

将这几个文件复制到android系统的/system/bin目录下(需要root权限)。这样我们就可以执行这5个命令了。 但这时候如果直接执行,可能会出现如下错误:

root@android:/ # cansend/做自己的决定。然后准备好承担后果。

完整Android CAN总线程序开发

相关文章:

你感兴趣的文章:

标签云: