基于IMX6ULL-PRO开发板-Linux socketcan基础应用编程之收发实验与电池管理系统数据采集实现

1.socketcan简单介绍

socketcan是在Linux下CAN协议(Controller Area Network)实现的一种实现方法。 CAN是一种在世界范围内广泛用于自动控制、嵌入式设备和汽车领域的网络技术。Linux下最早使用CAN的方法是基于字符设备来实现的,与之不同的是Socket CAN使用伯克利的socket接口和linux网络协议栈,这种方法使得can设备驱动可以通过网络接口来调用。Socket CAN的接口被设计的尽量接近TCP/IP的协议,让熟悉网络编程的程序员能够比较容易的学习和使用。

使用Socket CAN的主要目的就是为用户空间的应用程序提供基于Linux网络层的套接字接口。与广为人知的TCP/IP协议以及以太网不同,CAN总线没有类似以太网的MAC层地址,只能用于广播。CAN ID仅仅用来进行总线的仲裁。因此CAN ID在总线上必须是唯一的。当设计一个CAN-ECU(Electronic Control Unit 电子控制单元)网络的时候,CAN报文ID可以映射到具体的ECU。因此CAN报文ID可以当作发送源的地址来使用

2.基于IMX6ULL-PRO开发板操作CAN设备

2.1查找can设备

ifconfig-a

2.2设置波特率

2.2.1先关闭CAN0

ifconfig can0 down

2.2.2 设置波特率为250k

ip link set can0 up type can bitrate 250000 triple-sampling on

遇到这种情况:需重新编译并替换iproute2ip命令:

若错误持续,需重新编译并替换iproute2ip命令:

  1. 下载iproute2源码

    wget https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/iproute2-3.10.0.tar.gz
    tar -xf iproute2-3.10.0.tar.gz
    cd iproute2-3.10.0
  2. 修改Makefile适配交叉编译

    makefile

    CC = arm-linux-gnueabihf-gcc 
    SUBDIRS=lib ip  
  3. 编译并替换开发板的ip命令

    make -j4  
    mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs 
    
    cp  /mnt/ip /usr/bin/ 

    最后执行成功

    2.2.3打开CAN0 设备

3.使用candump cansend,接收/发送实验

不能使用该两个命令,则需交叉编译,复制在开发板的/usr/bin/上

cp candump cansend /usr/bin/

3.1 cansend发送

cansend can0 123#01.02.03.04.05.06.07.08

3.2 cansend接收

candump -ta can0

 

4.电池管理系统数据采集实现(将采集电池数据存进Sqlite3)

4.1准备工作(交叉编译sqlite3数据库)

4.1.1参考链接:

SQLITE3【1】-SQLite向arm-imx6ull板子的移植_imx6ull sqlite3-CSDN博客

4.1.2.主要步骤:

1.官网下载sqlite3源码

SQLite Download Page

2.源文件编译

3.移植至开发板上

cp libsqlite3.so.3.49.1 /home/book/nfs_rootfs
cp /lib/ /home/book/nfs_rootfs/lib2

cp libsqlite3.so.3.49.1 /usr/lib/
ln -s libsqlite3.so.3.49.1 libsqlite3.so.3

4.2采集数据代码书

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值