Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。

Linux版本号4.1.15   芯片I.MX6ULL                                    大叔学Linux    品人间百味  思文短情长 


        CAN 是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域,尤其是汽车
领域,汽车上大量的传感器与模块都是通过 CAN 总线连接起来的。 CAN 总线目前是自动化领
域发展的热点技术之一,由于其高可靠性, CAN 总线目前广泛的应用于工业自动化、船舶、汽
车、医疗和工业设备等方面。

        本次笔记需要学习CAN总线相关内容,主要包括CAN总线相关的基础理论知识、硬件原理图分析说明以及驱动开发、测试。重点内容为驱动开发及测试相关内容。

        本章节的思维导图如下:

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。_第1张图片

一、CAN协议简析

1、何为CAN?

        汽车网络的标准协议。

        特点:多主控制、柔软性、速度快、距离远、错误检测、错误通知和错误恢复、故障封闭、连接节点多。

2、CAN电气属性

        显性电平:0   3.5V-1.5V=2V

        隐形电平:1   2.5V-2.5V=0V  空闲状态

        CAN 总线传输速度可达 1Mbps/S。
 

3、CAN协议

        5 种帧格式:数据:数据帧、遥控帧、错误帧、过载帧和帧间隔。

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。_第2张图片

 1)、数据帧

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。_第3张图片

2)、遥控帧 

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。_第4张图片

3)、错误帧

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。_第5张图片

4)、过载帧

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。_第6张图片

 5)、帧间隔

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。_第7张图片

4、CAN速率

        CAN2.0 最高速度为1Mbps/S。1个位分为4段:

①、同步段(SS)
②、传播时间段(PTS)
③、相位缓冲段 1(PBS1)
④、相位缓冲段 2(PBS2)
        段由 Tq(Time Quantum)组成, Tq 是 CAN 总线的最小时间单位。
        在总线空闲态,最先开始发送消息的单元获得发送权。
        当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性
电平最多的单元可继续发送。

5、I.MX6ULL FlexCAN简介

        FlexCAN 支持四种模式:正常模式(Normal)、冻结模式(Freeze)、仅监听模式(Listen-Only)和
回环模式(Loop-Back),另外还有两种低功耗模式:禁止模式(Disable)和停止模式(Stop)。

波特率 = /总 Tq
 

二、硬件原理图分析

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。_第8张图片

三、实验程序编写

1、修改设备树

1)、FlexCAN1 引脚节点信息

1 pinctrl_flexcan1: flexcan1grp{
2 fsl,pins = <
3 MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX 0x1b020
4 MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX 0x1b020
5 >;
6 };

2)、FlexCAN1 控制器节点信息
 

1 &flexcan1 {
2 pinctrl-names = "default";
3 pinctrl-0 = <&pinctrl_flexcan1>;
4 xceiver-supply = <®_can_3v3>;
5 status = "okay";
6 };

3)、关闭 FlexCAN2 相关节点
         在 imx6ull-alientek-emmc.dts 文件中找到名为“ flexcan2”的节点,然后将其屏蔽掉即可。

        重新编译设备树,还需要配置 Linux 内核,使能内核里面的 FlexCAN 驱动。

2、使能Linux内核自带的FlexCAN驱动

1)、使能 CAN 总线

-> Networking support
-> <*> CAN bus subsystem support //打开 CAN 总线子系统


2)、使能 Freescale CPU FlexCAN 外设驱动

-> Networking support
-> CAN bus subsystem support
-> CAN Device Drivers
-> Platform CAN drivers with Netlink support
-> <*> Support for Freescale FLEXCAN based chips //选中


四、FlexCAN测试

1、检查CAN网卡设置是否存在

        ifconfig -a //查看所有网卡

2、移植iproute2

        在移植 ip 命令的时候必须先对根文件系统做个备份!

        busybox 自带的 ip 命令并不支持对 can 的操作,因此我们需要重新移植 ip 命令,也就是
iproute2。

CC:=arm-linux-gnueabihf-gcc

1)、将交叉编译得到的 ip 拷贝到开发板中

        首先将交叉编译到的 ip 命令拷贝到开发板中,先不要替换开发板根文件系统中原有的 ip 命
令!

2)、在开发板根文件系统中用新的 ip 命令替换原来的

cd lib/modules/4.1.15/
cp ip /sbin/ip -f

3)、 替换 ip 命令以后系统启动失败怎么办?

         ip 命令替换错误导致的!

3、移植can-utils工具

        使用 can-utils 这个工具来对 can0 网卡进行测试

cd can-utils-2020.02.04 //进入 can-utils 源码目录
./autogen.sh //先执行 autogen.sh,生成配置文件 configure
./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --
prefix=/home/zuozhongkai/linux/IMX6ULL/tool/can-utils --disable-static --enable-shared //配置
make //编译
make install

4、CAN通信测试

1)、两块 ALPHA 开发板连接测试

        将两个开发板的 CAN 接口连接起来,注意, CAN_H 接 CAN_H, CAN_L 接 CAN_L!

①、收发测试

ip link set can0 type can bitrate 500000
/*设置 can0 速度为 500Kbit/S,两个 CAN 设备的速度要设置为一样的!*/

ifconfig can0 up //打开 can0
/*can0 打开以后就可以使用 can-utils 里面的小工具进行数据收发测试了。一个开发板用来接
收数据,一个用来发送数据,接收数据的开发板使用 candump 命令,输入如下命令:*/
candump can0 //接收数据

/*发送数据的开发板使用 cansend 命令向接收单元发送 8 个字节的数据: 0X11、0X22、0X33、
0X44、 0X55、 0X66、 0X77、 0X88。输入如下命令:*/
cansend can0 5A1#11.22.33.44.55.66.77.88
/*
cansend 命令用于发送 can 数据,“ 5A1”是帧 ID,“ #”号后面的“ 11.22.33.44.55.66.77.88”
就是要发送的数据,十六进制。 CAN2.0 一次最多发送 8 个字节的数据, 8 个字节的数据之间用
“ .”隔开。
*/

关闭CAN0:

ifconfig can0 down

 ②、回环测试
 

ifconfig can0 down //如果 can0 已经打开了,先关闭
ip link set can0 type can bitrate 500000 loopback on //开启回环测试
ifconfig can0 up //重新打开 can0
candump can0 & //candump 后台接收数据
cansend can0 5A1#11.22.33.44.55.66.77.88 //cansend 发送数据

2)USB CAN 卡测试
 

ip link set can0 type can bitrate 500000 //设置 can0,速率 500Kbit
ifconfig can0 up //打开 can0
candump can0 & //candump 后台接收数据

        通过开发板向 USBCAN 发送数据,输入如下命令发送数据:
cansend can0 5A1#11.22.33.44.55.66.77.88


本笔记为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,不得用于商业用途。

你可能感兴趣的:(嵌入式Linux驱动开发学习,linux,学习,嵌入式硬件,arm开发,驱动开发)