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

news2024/9/24 15:20:56

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.coloradmin.cn/o/1312883.html

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

相关文章

OceanMind海睿思案例入选第二届中国数据治理年会“DCMM百项优秀案例”

近日&#xff0c;中国电子信息行业联合会在北京成功举办“第二届中国数据治理年会”。 本届大会以“数据强基、智领未来”为主题&#xff0c;汇聚我国数据治理领域的资深专家、学者、企业大咖同台论道&#xff0c;共话数据未来的发展与创新。 中新赛克海睿思作为DCMM3级乙方代…

Python自动化批量篆刻Polygon动物铭文$ANTS

铭文介绍 Polygon马蹄链动物主题铭文 A N T S 总量 2100 w 张&#xff0c;当前还剩余 76 ANTS 总量2100w张&#xff0c;当前还剩余76%&#xff0c;成本很低0.003MATIC一张&#xff0c;可以打了防身。 BRC20比特币铭文生态有RATS老鼠大军&#xff0c;PRC20马蹄有ANTS蚂蚁大军&a…

浅析:智能化视频安全监管系统的设计与实现步骤

关于智能化视频监管方案&#xff0c;小编已经和大家分享了很多&#xff0c;今天就和大家来探讨一下关于智能化视频安全监管系统的设计与实现步骤。 首先需要分析需求。要与使用者和业务部门合作&#xff0c;明确系统的功能和需求&#xff0c;例如&#xff0c;确定监控区域、安…

vsftp 使用虚拟用户 —— 筑梦之路

很久之前写过一遍安装vsftp的文章&#xff1a; CentOS 7 vsftpd服务器搭建记录——筑梦之路-CSDN博客 安装一条命令就可以搞定&#xff0c;这里不再赘述。 配置vsftpd.conf # /etc/vsftpd/vsftpd.conf文件修改以下配置#不允许匿名用户认证 anonymous_enableNO #NO表示所有用…

天猫数据分析(天猫数据查询平台):11月天猫啤酒市场销售数据分析报告

在酒类市场中&#xff0c;被视作“气氛担当”的啤酒&#xff0c;是派对聚会或者自饮场景中的常客&#xff0c;消费人群广泛&#xff0c;如今&#xff0c;啤酒市场已进入存量时代&#xff0c;市场中啤酒的销售也在稳步增长。 鲸参谋数据显示&#xff0c;今年11月份&#xff0c;天…

【Lidar】基于Python格网法计算点云体积(eg.树木体积)

这两天一直不在状态&#xff0c;不是特别想分享文章&#xff0c;所以也没怎么更新。但是代码放在文件里始终不是它的归宿&#xff0c;只有被不断使用它才能进步&#xff0c;才能诠释它的意义。所以今天抽空给大家分享一下如何基于Python利用格网法计算点云的体积&#xff0c;我…

docker的资源限制及容器应用

一、docker资源限制 在使用 docker 运行容器时&#xff0c;一台主机上可能会运行几百个容器&#xff0c;这些容器虽然互相隔离&#xff0c;但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制&#xff0c;那么容器之间会互相影响&#xff0c;小的来说…

解决多卡机器CUDA Error Code 802(CUDA_ERROR_SYSTEM_NOT_READY)

解决多卡机器安装完CUDA后&#xff0c;出现802错误码&#xff1a;Fabric Manager需要和Driver具有完全一致的版本号。 现象 检查 查看service状态&#xff1a; 显示failed&#xff0c;查看nvidia-smi中的Driver版本&#xff1a; 切换版本 sudo yum list installed | grep…

BERT大模型:英语NLP的里程碑

BERT的诞生与重要性 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;大模型标志着自然语言处理&#xff08;NLP&#xff09;领域的一个重要转折点。作为首个利用掩蔽语言模型&#xff08;MLM&#xff09;在英语语言上进行预训练的模型&…

初学python的体会心得20字,初学python的体会心得2000

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;学了python的心得体会200字&#xff0c;初学python的体会心得20字&#xff0c;现在让我们一起来看看吧&#xff01; 本学期&#xff0c;我们学习了杨老师的《python语言程序设计》这门课程&#xff0c;其实早在大一期间…

【每日一题】【12.15】2415.反转二叉树的奇数层

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 2415. 反转二叉树的奇数层https://leetcode.cn/problems/reverse-odd-levels-of-binary-tree/ 今天终于碰到了一个mid题目&#x…

[Unity]关于Unity接入Appsflyer并且打点支付

首先需要去官方下载Appsflyer的UnityPackage 链接在这afPackage 然后导入 导入完成 引入此段代码 using AppsFlyerSDK; using System.Collections; using System.Collections.Generic; using UnityEngine;public class AppflysManager : MonoBehaviour {public static App…

【算法与数据结构】332、LeetCode重新安排行程

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题比较属于困难题目&#xff0c;难点在于完成机票、出发机场和到达机场之间的映射关系&#xff0c;再…

Airtest-Selenium实操小课①:爬取新榜数据

此文章来源于项目官方公众号&#xff1a;“AirtestProject” 版权声明&#xff1a;允许转载&#xff0c;但转载必须保留原链接&#xff1b;请勿用作商业或者非法用途 1. 前言 最近看到群里很多小伙伴都在用Airtest-Selenium做一些web自动化的尝试&#xff0c;正好趁此机会&…

我的NPI项目之Android 安全系列 -- Google Wallet and Secure Element(SE)

随着电子支付的兴起&#xff0c;越来越多的支付方式出现在我们的生活中。其中就有基于NFC的“碰一碰”的支付&#xff0c;支付宝的“扫一扫”支付&#xff0c;我们还知道有Google Pay(Wallet), Apple Pay(Wallet)。作为Android BSP的开发者&#xff0c;我比较关心的是Google Pa…

Backtrader 文档学习-Quickstart

Backtrader 文档学习-Quickstart 0. 前言 backtrader&#xff0c;功能十分完善&#xff0c;有完整的使用文档&#xff0c;安装相对简单&#xff08;直接pip安装即可&#xff09;。 优点是运行速度快&#xff0c;支持pandas的矢量运算&#xff1b;支持参数自动寻优运算&#x…

【Qt QML入门】Button

Button表示一个推按钮控件&#xff0c;用户可以按下或单击它。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: truetitle: qsTr("Hello World")Button {id: btnwidth: 200height: 100anchors.centerIn…

Spring+SpringMVC+SpringBoot

Spring bean bean基础配置 bean别名配置 注意事项&#xff1a; 获取bean无论是通过id还是name获取。如果无法获取到&#xff0c;将抛出异常NoSuchBeanDefinitionException bean的作用范围配置 适合交给容器进行管理的bean 表现层对象、业务层对象、数据层对象、工具对象 不…

【数学知识】LCP42: 玩具套圈

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的基础知识点 优化后&#xff0c;就不需要二分了。 二分查找算法合集 题目 「力扣挑战赛」场地外&#xff0c;小力组织了一个套玩具的游戏。所有的玩具摆在平地上&#xff0c;toys…

开源BI 平台AJ-Report —— 筑梦之路

AJ-Report: AJ-Report是一个完全开源&#xff0c;拖拽编辑的可视化设计工具。三步快速完成大屏&#xff1a;配置数据源---->写SQL配置数据集---->拖拽生成大屏。让管理层随时随地掌控业务动态&#xff0c;让每个决策都有数据支撑。