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


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot篇】详解基于Redis实现短信登录的操作

文章目录 &#x1f970;前言&#x1f6f8;StringRedisTemplate&#x1f339;使用StringRedisTemplate⭐常用的方法 &#x1f6f8;为什么我们要使用Redis代替Session进行登录操作&#x1f386;具体使用✨编写拦截器✨配置拦截器&#x1f33a;基于Redis实现发送手机验证码操作&am…

DNSLog漏洞探测(三)之XSS漏洞实战

DNSLog漏洞探测(三)之XSS漏洞实战 通过前面的学习&#xff0c;我们已经明白了什么是DNSLog平台&#xff0c;那么DNSLog平台到底能为我们做些什么呢&#xff1f; DNSLog的平台实际使用很长见的一种情况就是针对漏洞无回显的情况&#xff0c;我们通过让受害者的服务器主动发起对…

Error: Failed to resolve vue/compiler-sfc——vite项目启动报错——npm run serve

运行项目时&#xff0c;报错如下&#xff1a; Error: Failed to resolve vue/compiler-sfc 根据报错信息的提示&#xff1a;vue的版本必须大于3.2.25&#xff0c;经过查看package.json文件&#xff0c;可以看到vue的版本为3.2.36&#xff0c;是满足条件的。 因此考虑缓存问题&…

Python部分基础知识入门学习,十分钟快速上手

文章目录 一、基础语法二、变量类型三、运算符四、条件语句关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 一、…

并发编程的基本概念

进程与线程 进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的当一个程序被运行&…

【计算机网络】UDP报文详解

目录 一. UDP协议概述 二. UDP报文格式 1. 首部 2. 校验和 三. UDP的缓冲区 结束语 一. UDP协议概述 UDP——用户数据报协议&#xff0c;是传输层的一个重要协议 基于UDP的应用层协议有&#xff1a;DNS&#xff0c;TFTP&#xff0c;SNMP&#xff0c;NTP 协议全称默认端…

pt34-python-Celery

Celery异步网络框架 定义 Celery 是一个简单、灵活且可靠的&#xff0c;处理大量消息的分布式系统&#xff0c;它是一个专注于实时处理的任务队列&#xff0c;同时也支持任务调度。中文官网&#xff1a;http://docs.jinkan.org/docs/celery/ 在线安装 sudo pip3 install -U…

语音验证码有哪些优势

稳定高效 链接各国运营商语音通道&#xff0c;不受时间地域限制&#xff0c;到达率较高&#xff0c;验证效果稳定高效&#xff0c;大大提高了客户回填率和转化率&#xff0c;减少客户流失。 海量并发 智能运维系统&#xff0c;实时监控&#xff0c;自动切换&#xff0c;无需…

【二分查找】【滑动窗口】LeeCode2528:最大化城市的最小电量

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 滑动窗口 题目 给你一个下标从 0 开始长度为 n 的整数数组 stations &#xff0c;其中 stations[i] 表示第 i 座城市的供电站数目。 每个供电站可以在一定 范围 内给所有城…

PR分屏模板|Premiere动态多画面多屏特效视频模板剪辑素材

这一个很棒的分屏效果PR幻灯片模板视频素材&#xff01;为您的视频制作多屏幕动画&#xff01; 非常易于定制、更改颜色。 仅支持Premier Pro 2024及最新版本。 高清分辨率&#xff1a;19201080/30fps。 持续时间–00:37。 21媒体占位符&#xff08;照片或视频&#xff09;。 包…

Mongdb常用复杂语句(nosql)总结

➡️ ➡️ 关于 MongoDB和MongoTemplate 嵌套数据判空查询 的讨论 ⬅️ ⬅️ 在本篇文章中小名会时常维护些来不及分类的日工作常用的复杂语句&#xff1a; 1、按照表id查询 db.getCollection(TABLE_NAME).find({"_id":ObjectId("62947c8fe2a399286a7259f7&q…

Web网站服务(二)

1、客户机地址限制。 Require all granted&#xff1a;表示允许所有主机访问。 Require all denied&#xff1a;表示拒绝所有主机访问。 Require local&#xff1a;表示仅允许本地主机访问。 Require [not] host <主机名或域名列表>&#xff1a;表示允许或拒绝指定主机或…

2、快速搞定Kafka术语

快速搞定Kafka术语 Kafka 服务端3层消息架构 Kafka 客户端Broker 如何持久化数据小结 Kafka 服务端 3层消息架构 第 1 层是主题层&#xff0c;每个主题可以配置 M 个分区&#xff0c;而每个分区又可以配置 N 个副本。第 2 层是分区层&#xff0c;每个分区的 N 个副本中只能有…

【sqli靶场】第二关和第三关通关思路

目录 前言 一、sqli靶场第二关 1.1 判断注入类型 1.2 判断数据表中的列数 1.3 使用union联合查询 1.4 使用group_concat()函数 1.5 爆出users表中的列名 1.6 爆出users表中的数据 二、sqli靶场第三关 2.1 判断注入类型 2.2 观察报错 2.3 判断数据表中的列数 2.4 使用union联合…

视频目标检测 yolov

目录 yolov相关介绍 预训练是检测动物世界的动物的&#xff0c;1060显卡单帧需要300毫秒 yolov相关介绍 论文地址&#xff1a; https://arxiv.org/pdf/2208.09686.pdf 代码地址&#xff1a; https://github.com/YuHengsss/YOLOV ModelsizemAP50valSpeed 2080Ti(batch size1)…

BGD 实战

梯度下降方法 2.1、三种梯度下降不同 梯度下降分三类&#xff1a;批量梯度下降BGD&#xff08;Batch Gradient Descent&#xff09;、小批量梯度下降MBGD&#xff08;Mini-Batch Gradient Descent&#xff09;、随机梯度下降SGD&#xff08;Stochastic Gradient Descent&…

ROB端口需求

对于一个 4-way 的超标量处理器来说&#xff0c;在重排序缓存&#xff08;ROB&#xff09;中每周期可以退休的指令个数应该是不小于四条的&#xff1b;如图给出的ROB,在那些最旧的指令中,有三条指令都已经变为了complete状态,那么在一个周期内就可以将这三条指令都退休。 要实现…

Vue路由跳转重定向动态路由VueCli

Vue路由跳转&重定向&动态路由&VueCli 一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话&#xff0c;需要给当前跳转的导航加样式&#xff0c;同时要移除上一个a标签的样式&#xff0c;太麻烦&#xff01;&#xff01;&#xff01; …

抖店一件代发怎么做?保姆级运营教程!

我是电商珠珠 抖店是抖音发展的电商平台&#xff0c;一些没有电商经验的新手&#xff0c;不想囤货&#xff0c;担心卖不出去。 听说可以一件代发&#xff0c;但却不知道怎么做。 今天&#xff0c;我就来详细的跟大家讲一下。 一、选品上架 在选品的时候可以参考后台的电商…

GZ029 智能电子产品设计与开发赛题第5套

2023年全国职业院校技能大赛高职组 “GZ029智能电子产品设计与开发”赛项赛卷五 题目&#xff1a;模拟工业传送带物品检测系统的设计与开发 1 竞赛任务 在智能电视机上播放工业传送带传输物品视频&#xff0c;模拟工业传送带物品检测系统&#xff08;以下简称物品检测系统&…