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

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


CAN 是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域,尤其是汽车

领域,汽车上大量的传感器与模块都是通过 CAN 总线连接起来的。 CAN 总线目前是自动化领

域发展的热点技术之一,由于其高可靠性, CAN 总线目前广泛的应用于工业自动化、船舶、汽

车、医疗和工业设备等方面。

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

本章节的思维导图如下:

一、CAN协议简析

1、何为CAN?

汽车网络的标准协议。

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

2、CAN电气属性

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

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

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

3、CAN协议

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

1)、数据帧

2)、遥控帧

3)、错误帧

4)、过载帧

5)、帧间隔

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

二、硬件原理图分析

三、实验程序编写

1、修改设备树

1)、FlexCAN1引脚节点信息

cpp 复制代码
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 控制器节点信息

cpp 复制代码
1 &flexcan1 {
2 pinctrl-names = "default";
3 pinctrl-0 = <&pinctrl_flexcan1>;
4 xceiver-supply = <&reg_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)、使能 FreescaleCPUFlexCAN外设驱动

-> 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。

cpp 复制代码
CC:=arm-linux-gnueabihf-gcc

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

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

令!

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

cpp 复制代码
cd lib/modules/4.1.15/
cp ip /sbin/ip -f

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

ip 命令替换错误导致的!

3、移植can-utils工具

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

cpp 复制代码
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!

①、收发测试

cpp 复制代码
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:

cpp 复制代码
ifconfig can0 down

②、回环测试

cpp 复制代码
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)USBCAN 卡测试

cpp 复制代码
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


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

相关推荐
JunLan~2 小时前
Rocky Linux 系统安装/部署 Docker
linux·docker·容器
嵌新程3 小时前
day06(单片机高级)PCB设计
单片机·嵌入式硬件·pcb
方竞3 小时前
Linux空口抓包方法
linux·空口抓包
stm 学习ing3 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
Red Red4 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
海岛日记4 小时前
centos一键卸载docker脚本
linux·docker·centos
AttackingLin5 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
Natural_yz6 小时前
大数据学习17之Spark-Core
大数据·学习·spark
qq_172805596 小时前
RUST学习教程-安装教程
开发语言·学习·rust·安装