【LED子系统】八、小试牛刀

news2024/10/5 17:17:32
img
个人主页:董哥聊技术
我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司!
创作理念:专注分享高质量嵌入式文章,让大家读有所得!
img

文章目录

    • 1、硬件管脚确定
    • 2、设备树配置
    • 3、子系统配置
    • 4、编译烧录
    • 5、验证
      • 5.1 设备树验证
      • 5.2 驱动加载验证
      • 5.3 效果验证

经过前面的层层关卡,终于到了我们的小试牛刀环节!

如何控制LED灯的亮灭?又如何实现LED心跳灯的效果?

下面我以imx6ull为例来实现!首先说明一点,无论在哪个平台上玩,底层原理万变不离其宗,我只能来总结其套路和方法,其中的细节必有差异!

1、硬件管脚确定

我们来控制LED的时候,首先第一件事要做的就是明确要操作的LED硬件设备,查看我们开发板对应的原理图

LED原理图1

在这里我们RGB灯,所对应因较为GPIO_4CSI_HSYNCCSI_VSYNC,找到对应到芯片的引脚

LED原理图2

LED原理图3

可知GPIO_4为引脚GPIO1_IO04CSI_HSYNCCSI_HSYNCCSI_VSYNC为引脚CSI_VSYNC

2、设备树配置

明确我们的LED引脚之后,我们就要配置设备树啦!

设备树的作用就是方便管理不同的硬件设备,说大实话就是:配置相关硬件设备,与内核子系统关联起来


设备树一般怎么写?——照葫芦画瓢!

我们的内核驱动中,已经有各个驱动的设备树示例了,以LED为例,我们可以参考

  • Documentation/devicetree/bindings/leds/leds-gpio.txt
  • Documentation/devicetree/bindings/gpio/gpio.txt

不同平台设备树编写也有所差异,请按照自己的开发板来进行配置。

设备树的相关知识点可以看我们的设备树章节的详解!

配置好的设备树如下:

/*
 * Copyright (C) 2019 - All Rights Reserved by 
 * filename : imx-fire-led-overlay.dts
 * brief : Device Tree overlay for EBF6ull led device
 * author : embedfire
 * date : 2019-11-15 
 * version : A001
 */
 /dts-v1/;
 /plugin/;
#include "../imx6ul-pinfunc.h"
#include "../imx6ull-pinfunc.h"
#include "dt-bindings/gpio/gpio.h"
 / {
        fragment@0 {
            target-path = "/";
            __overlay__ {
                normal_led{
                    compatible = "gpio-leds";
                    red {
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_red>;
                        label = "red";
                        gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
                        default-state = "off";
                        linux,default-trigger = "none";                       
                    };

                    green {
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_green>;    
                        label = "green";
                        gpios = <&gpio4 20 GPIO_ACTIVE_LOW>;
                        default-state = "off";
                        linux,default-trigger = "none";                          
                    };

                    blue
                    {
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_blue>;    
                        label = "blue";
                        gpios = <&gpio4 19 GPIO_ACTIVE_LOW>;
                        default-state = "off";
                        linux,default-trigger = "heartbeat";                           
                    };
                };
            };
        };

        fragment@1 {
            target= <&iomuxc>;
            __overlay__{
                pinctrl_red:redgrp{
                    fsl,pins = < MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0x1b0b0 >;
                };
                pinctrl_green:grngrp{
                    fsl,pins = < MX6UL_PAD_CSI_HSYNC__GPIO4_IO20 0x1b0b0 >;
                };

                pinctrl_blue:bluegrp{
                    fsl,pins = <MX6UL_PAD_CSI_VSYNC__GPIO4_IO19 0x1b0b0 >;
                };
            };
        };

 };

在这里我们说明几个设备树属性:

  • linux,default-trigger:该属性为默认触发的方式,我们在这里配置为heartbeat心跳触发
  • default-state:该属性为LED默认状态,即亮灭状态。

3、子系统配置

Linux子系统默认未打开LED子系统,如果我们要想使用LED子系统需要打开如下配置

  • CONFIG_NEW_LEDS
  • CONFIG_LEDS_CLASS
  • CONFIG_LEDS_GPIO

如果需要触发器功能,需要打开:

  • CONFIG_LEDS_TRIGGERS

在这里我们选择对应的触发器,我们这里选择心跳触发器:

  • CONFIG_LEDS_TRIGGER_HEARTBEAT

4、编译烧录

到这里,我们已经配置好了LED子系统所需要的信息,下面我们就进行编译设备树和内核,然后烧录!

这里不同平台也有差异,下面仅供参考。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- npi_v7_defconfig

make ARCH=arm -j4 CROSS_COMPILE=arm-linux-gnueabihf- dtbs

然后把生成的dtbo替换到系统的指定位置中。

5、验证

烧录进系统之后,我们就到了验证阶段!

5.1 设备树验证

root@npi:~# cat /sys/firmware/devicetree/base/normal_led/
blue/       compatible  green/      name        red/     

root@npi:~# cat /proc/device-tree/normal_led/
blue/       compatible  green/      name        red/    

通过查看我们的devicetree文件夹下面的节点,我们能够看到我们配置的redbluegreen等节点,说明设备树配置生效!

5.2 驱动加载验证

root@npi:~# ls /sys/class/leds/
blue/   cpu/    green/  mmc0::/ mmc1::/ red/    

驱动加载成功之后,我们能够在/sys/class/leds/下面看到我们的设备节点。

5.3 效果验证

root@npi:~# echo 0 > /sys/class/leds/green/brightness 	#绿色等灭
root@npi:~# echo 1 > /sys/class/leds/green/brightness 	#绿色灯亮
root@npi:~# echo 0 > /sys/class/leds/red/brightness 	#红色等灭
root@npi:~# echo 1 > /sys/class/leds/red/brightness 	#红色灯亮
# 此时,我们上面将blue灯配置为heartbeat,这里蓝色灯在闪烁

到这里,我们的LED子系统就告一段落了,同时也非常感谢大家的支持,支持原创,支持董哥!
 

点赞+关注,永远不迷路

img
欢迎关注【嵌入式艺术】,董哥原创!

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

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

相关文章

2023电工杯数学建模B题完整模型代码【原创首发】

文末获取全部资料 摘要 近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的发展和广泛应用&#xff0c;其在教育领域的潜力和影响引起了广泛关注。本研究旨在通过一项全面的问卷调查&#xff0c;探讨AI学习工具在大学生学习过程中的影响。 在本项研究中&#…

认识HTTP协议---1

hello,大家好,今天为大家带来http协议的相关知识 1.HTTP协议 &#x1f437;1.应用层协议 &#x1f437;2.HTTP协议的工作过程 2.HTTP协议格式 &#x1f437;1.认识抓包工具Fidder &#x1f437;2.学会使用fidder &#x1f437;3.协议格式总结 3.HTTP请求 &#x1f437…

常用本地事务和分布式事务解决方案模型

目录 1 DTP模型2 2PC2.1 方案简介2.2 处理流程2.2.1 阶段1&#xff1a;准备阶段2.2.2 阶段2&#xff1a;提交阶段 2.3 方案总结 3 3PC3.1 方案简介3.2 处理流程3.2.1 阶段1&#xff1a;canCommit3.2.2 阶段2&#xff1a;preCommit3.3.3 阶段3&#xff1a;do Commit 3.3 方案总结…

使用本地的chatGLM

打开终端 wsl -d Ubuntu conda activate chatglm cd cd ChatGLM-6B python3 cli_demo.py 依次输入以上命令。

随机森林Proximity实现及应用

随机森林Proximity实现及应用 1 算法1.1 随机森林Proximity简介1.2 RF-GAP1.3 实现代码 2 应用2.1 离群点(outlier)检测2.1.1 原理和实现2.1.2 实验结果 附录 项目主页&#xff1a;randomforest C implementation of random forests classification, regression, proximity and…

可以免费使用的ChatGPT保姆级教程 (New Bing)

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 最近&#xff0c;ChatGPT已经非常流行&#xff0c;但由于各种原因&#xff0c;国内用户无法直接免费使用ChatGPT的API&#xff0c;各种伟大的神也利用这…

沉浸式翻译 安装及使用

介绍一下最近非常或的沉浸式翻译工具&#xff0c;非常有助于外文阅读&#xff0c;包括网页、pdf等。可以同时显示原文和译文&#xff0c;操作简单&#xff0c;使用起来还是非常友好的。 先上链接&#xff1a;介绍 - 沉浸式翻译 如何使用 - 沉浸式翻译 1.安装 支持Edg…

仙人掌之歌——权力的游戏(2)

他是特级战斗英雄 “那个李通&#xff0c;会不会看起来好吓人呀&#xff1f;” 云冰洁有些紧张的样子&#xff0c;几乎要让陈速笑出来。 “哪有&#xff0c;一个很 nice 的人好吧。就是看起来比较严肃而已&#xff0c;我也从没看他笑过倒是。” 陈速让云冰洁看菜单&#xff0…

【极海APM32F4xx Tiny】学习笔记01-模板工程创建

本项目的使用的开发板 关于芯片使用的其他笔记 外部晶振时钟 模板工程创建/LED工程 项目仓库 https://gitcode.net/u010261063/apm32_test_part 创建模板工程的核心要素 复制官方的标准外设库复制启动文件复制cmsis文件复制相关的公共头文件如apm32f4xx_int.h 和 system_apm…

mybatis trim标签使用详解

mybatis trim标签使用详解 mybatis的trim标签一般用于去除sql语句中多余的and关键字&#xff0c;逗号&#xff0c;或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀&#xff0c;或者添加“)“等后缀&#xff0c;可用于选择性插入、更新、删除或者条件查询等操作。…

Dubbo框架

文章目录 1. 什么是Dubbo2. Dubbo架构3. SpringBoot整合Dubbo框架3.1 前期准备3.1.1 Zookeeper的安装 3.2 项目创建3.3 添加依赖3.4 定义服务接口3.5 服务端的实现3.6 消费端请求任务3.7 服务端配置文件3.8 消费端配置文件3.9 启动应用 4. Dubbo负载均衡5. Dubbo集群容错 1. 什…

第一部分-基础篇-第一章:PSTN与VOIP(上篇)

文章目录 序言引言&#xff1a;什么是VOIP和PSTN1.1 PSTN起源与发展1.1.1 最早的电话网1.1.2 人工电话交换时代1.1.3自动电话交换时代1.1.4半电子交换机时代1.1.5空分交换机时代1.1.6 数字交换机时代1.1.7现代PSTN时代1.1.8 下一代网络及VoIP时代 1.2 电话实现技术1.2.1 电话号…

【MySQL】如何速通MySQL(1)

&#x1f4cc;前言&#xff1a;本篇博客介绍如何速通MySQL&#xff0c;主要介绍Mysql中主要的基础的入门&#xff0c;学习MySQL之前要先安装好MySQL&#xff0c;如果还没有安装的小伙伴可以看看博主前面的博客&#xff0c;里面有详细的安装教程。或者看一下下面这个链接~ &…

“AI孙燕姿”爆火背后,是内容合规问题的再次升级|上云那些事

“讽刺的是&#xff0c;人类再怎么快也无法超越它。”这是歌手孙燕姿关于自己AI分身遍布网络一事&#xff0c;在MAKE MUSIC网站的博客上发表的看法。 来源&#xff1a;孙燕姿MAKE MUSIC网站博客 当大家还在担心AIGC会不会让自己失业时&#xff0c;歌手孙燕姿就因为“AI孙燕姿”…

LDA算法实现鸢尾花数据集降维

目录 1. 作者介绍2. LDA降维算法2.1 基本概念2.2 算法流程 3. LDA算法实现3.1 数据集介绍3.2 代码实现3.3 结果展示 1. 作者介绍 唐杰&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生 研究方向&#xff1a;机器视觉与人工智能 电子邮件&#xff…

深度学习笔记(八)——语义分割标注转换

核心思想&#xff1a;“将颜色转换成对应的标号” 形式一&#xff1a;Json格式的标注转换成调色板mask 形式二&#xff1a;RGB类型mask(24位三通道&#xff09;转成调色板mask&#xff08;8位单通道&#xff09;&#xff0c;调色板的格式为.png 形式三&#xff1a;对于二分类的…

oracle安装

服务端安装&#xff08;公司中不需要&#xff0c;只安装客户端就行&#xff09; 1、挂载一个Windows系统 双击vmx文件 启动 2、网络配置 添加一个网络 自己电脑看控制面板是否添加虚拟网卡 查看连接的网络&#xff0c;ip地址不能为1&#xff0c;为1就自己修改&#xff0c;…

深度剖析:C++内存池的设计与实现

深度剖析&#xff1a;C内存池的设计与实现 一、引言&#xff08;Introduction&#xff09;1.1 内存管理的重要性1.2 内存池的基本概念1.3 内存池的应用场景 二、C内存管理机制&#xff08;C Memory Management Mechanism&#xff09;2.1 C内存分配与释放2.2 C内存管理的问题2.3…

《Kali渗透基础》04. 主动信息收集(一)

kali渗透 1&#xff1a;主动信息收集2&#xff1a;发现3&#xff1a;二层发现3.1&#xff1a;arping3.2&#xff1a;nmap3.3&#xff1a;netdiscover3.4&#xff1a;Scapy 4&#xff1a;三层发现4.1&#xff1a;ping4.2&#xff1a;Scapy4.3&#xff1a;nmap4.4&#xff1a;fpi…

Win2016服务器DNS服务搭建

文章目录 前言一、什么是DNS&#xff1f;1.为什么需要DNS系统2.为DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;的功能3.域名解决方案的演进 二、域名介绍1.域名空间结构2.常见的顶级域名 三、DNS解析原理1.查询过程及方式2.DNS的查询分类 四、配置DNS服…