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 引脚节点信息

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 = <&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)、使能 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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/214143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十二、MapReduce概述

1、MapReduce &#xff08;1&#xff09;采用框架 MapReduce是“分散——>汇总”模式的分布式计算框架&#xff0c;可供开发人员进行相应计算 &#xff08;2&#xff09;编程接口&#xff1a; ~Map ~Reduce 其中&#xff0c;Map功能接口提供了“分散”的功能&#xff…

【Java期末复习资料】(1)知识点总结

本文章主要是知识点&#xff0c;后续会出模拟卷 以下是选择、填空可能考的知识点&#xff0c;多看几遍&#xff0c;混个眼熟 面向对象程序设计的基本特征是&#xff1a;抽象、封装、继承、多态&#xff08;后三个是三大特性&#xff09;Java源文件的扩缀名是.java编译Java App…

知识笔记(五十三)———MySQL 删除数据表

MySQL中删除数据表是非常容易操作的&#xff0c;但是你在进行删除表操作时要非常小心&#xff0c;因为执行删除命令后所有数据都会消失。 语法 以下为删除 MySQL 数据表的通用语法&#xff1a; DROP TABLE table_name ; -- 直接删除表&#xff0c;不检查是否存在 或 DROP…

neuq-acm预备队训练week 8 P8794 [蓝桥杯 2022 国 A] 环境治理

题目描述 输入格式 输出格式 输出一行包含一个整数表示答案。 输入输出样例 解题思路 最短路二分 AC代码 #include<bits/stdc.h> using namespace std; long long temp,n, Q; long long f[105][105],min_f[105][105],cut[105],dis[105][105];//cut为减少多少&#x…

宝塔面板部署Apache服务器搭建本地站点发布到公网可访问【内网穿透】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…

最短循环节问题 和 最短回文串(kmp , HASH )

给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1&#xff1a; 输入&#xff1a;s "aacecaaa" 输出&#xff1a;"aaacecaaa"示例 2&#xff1a; 输入&#xff1a;s &…

Java智慧校园-中小学校园管理系统源码

智慧校园系统是通过信息化手段&#xff0c;实现对校园内各类资源的有效集成 整合和优化&#xff0c;实现资源的有效配置和充分利用&#xff0c;将校务管理过程的优化协调。为校园提供数字化教学、数字化学习、数字化科研和数字化管理。 致力于为家长和教师提供一个全方位、多层…

scripty妙用

在monorepo项目中&#xff0c;随着子模块增多&#xff0c; 每个子项目都需要配置各自的package.json,并且大同小异&#xff0c;为了进一步提高配置效率&#xff0c;引入了scripty&#xff0c;自己写脚本&#xff0c;直接就可以用哦 1、安装 npm install scripty --save-dev 2…

ARMday6作業

串口发送指令控制硬件工作 uart1.h #ifndef __UART1_H__ #define __UART1_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h" void all_led_init(); void led1_on(); void led2_on(); void led3_o…

代码随想录二刷 | 二叉树 | 110.平衡二叉树

代码随想录二刷 &#xff5c; 二叉树 &#xff5c; 110.平衡二叉树 题目描述解题思路递归迭代 代码实现递归法迭代法 题目描述 110.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉…

EMNLP 2023 获奖论文公布,大模型、NLP等领域火爆

EMNLP是计算语言学和自然语言处理领域顶级国际会议之一&#xff0c;属于CCF B类&#xff0c;是由 ACL 下属的SIGDAT小组主办的NLP领域顶级国际会议&#xff0c;一年举办一次。相较于ACL&#xff0c;EMNLP更偏向于NLP在各个领域解决方案的学术探讨。 今年的EMNLP 2023 已于2023…

table表格table/tr/td宽度和高度的设置

关于html中table表格tr,td的⾼度和宽度 做⽹页的时候经常会遇到各种各样的问题&#xff0c;经常遇到的⼀个就是会碰到表格被内容撑开的问题。 设置table样式为 table-layout: fixed; 宽度可以了&#xff0c;但是高度会被撑高。怎么设置都不行&#xff0c;只能给这个td标签单独…

【Linux】 线程池

线程池 什么是线程池&#xff1f; 一次预先申请一批线程&#xff0c;让这批线程有任务&#xff0c;就处理任务&#xff1b;没任务&#xff0c;就处于等待状态。 为什么要有线程池&#xff1f; 以空间换时间&#xff0c;预先申请一批线程&#xff0c;当有任务到来&#xff0c;可…

将rtsp视频流发送到AWS Kinesis Video Streams的方案——使用Gstreamer(C++) Command Line

大纲 1 创建Kinesis Video Streams1.1 创建视频流1.2 记录Creation Time 2 创建策略2.1 赋予权限2.2 限制资源2.3 Json格式描述&#xff08;或上面手工设置&#xff09;2.4 注意事项 3 创建IAM用户3.1 生成密钥对3.2 附加策略3.3 记录访问密钥对 4 编译C 创建者库5 发送6 检查参…

JavaScript <关于逆向RSA非对称加密算法的案例(代码剖析篇)>--案例(五点一)

引用上文: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/134857857 剖析: var bitsPerDigit16; // 每个数组元素可以表示的二进制位数// 数组复制函数&#xff0c;将源数组部分复制到目标数组的指定位置 function arrayCopy(src, srcStart, dest, destStart, n) {var m…

国内地址地区智能解析,无需完整地址也能正确匹配

页面直接引入使用 已打包成单文件dist/bundle.js 可以直接通过标签引用 <script src="./bundle.js"></script> <script>var results = AddressParse.parse(福建省福州市福清市石竹街道义明综合楼3F,15000000000,asseek);console.log(results);…

OD机考真题搜集:服务失效判断

题目 某系统中有众多服务,每个服务用字符串(只包含字母和数字,长度<=10)唯一标识,服务间可能有依赖关系,如A依赖B,则当B故障时导致A也故障。 依赖具有传递性,如A依赖B,B依赖C,当C故障时导致B故障,也导致A故障。 给出所有依赖关系,以及当前已知故障服务,要求输…

git提交代码报错Git: husky > pre-commit

目录 git提交代码报错原因解决方法&#xff08;三种&#xff09;1、第一种2、第二种3、第三种 git提交代码报错原因 这个问题是因为当你在终端输入git commit -m “XXX”,提交代码的时候,pre-commit(客户端)钩子&#xff0c;它会在Git键入提交信息前运行做代码风格检查。如果代…

Kotlin 中密封类、枚举类与密封接口的对比分析

在 Kotlin 编程语言中&#xff0c;密封类&#xff08;Sealed Classes&#xff09;、枚举类&#xff08;Enum Classes&#xff09;和密封接口&#xff08;Sealed Interfaces&#xff09;是处理一组固定类型的强大工具。它们在 Kotlin 中扮演着特殊的角色&#xff0c;特别是在创建…

【小白专用】MySQL创建数据库和创建数据表

1.在Windows开始搜索输入Mysql,并选择第一个打开。 2.输入安装时的密码 3.说明安装成功。 二、创建数据库 1. 连接 MySQL 输入 mysql -u root -p 命令&#xff0c;回车&#xff0c;然后输入 MySQL 的密码(不要忘记了密码)&#xff0c;再回车&#xff0c;就连接上 MySQL 了。 …