高通平台中gpio简单操作和调试

2023-11-19

        做底层驱动免不了gpio打交道,所以对其操作和调试进行了一下简单的梳理

一、gpio的调试方法

        在Linux下,通过sysfs,获取gpio状态,也可以操作gpio。

1、获取gpio状态

        cd /sys/kernel/debug/

        cat gpio

2、操作gpio(以gpio99为例)

        cd /sys/class/gpio/

        echo 99 > export

        cd gpio99

        echo in/out > direction    //设置gpio输入或输出

        cat direction                    //获取gpio输入输出状态

        echo 'value' > value        //设置gpio寄存器值

        cat value                        //获取gpio寄存器的值


二、在kernel代码中操作gpio

        在代码中有两种方式操作gpio,一种是一次申请单个gpio,成功后操纵该gpio,另一种是使用pinctrl,通过设备树设置,一次操作多个gpio。

1、方法一

        设备树设备节点中添加gpio    //可选

        device_node {

                ...

                gpio_name = <&tlmm 99 0>;    //gpio_99

                ...

        }

        驱动代码:

  
  
  1.        int gpio_99 = of_get_named_gpio_flags(dev->of_node, "gpio_name", 0, NULL);    //从设备数节点, 可选
  2.        gpio_request(gpio_99, "gpio_name");        //通过gpio号申请gpio
  3.        gpio_direction_output(gpio_99, 1);            //设置gpio_99输出,初始值为1
  4.        gpio_set_value(gpio_99, 0);                    //设置gpio_99值为0
  5.        gpio_free(gpio_99);                                //gpio_99不再使用后应当释放

        注:

        gpio的申请和设置都可能会出现失败的情况,应该做好异常处理


2、方法二

        设备树代码:

        平台pinctrl节点下添加如下子节点:

        相关文档和设备树配置详解见kernel/Document/pinctrl.txt和Documentation/devicetree/bindings/pinctrl/下多个文件

        gpio_group {

                gpio_active: gpio_active {

                       mux {

                                pins = "gpio99", "gpio98";    //复用引脚99和98

                                functions = "gpio";            //引脚功能配置为普通gpio

                        };

                        config {

                                pins = "gpio99", "gpio98";

                                drive-strength = <8>;    //最大电流限制为8mA

                                bias-pull-up;                //配置上拉

                                output-high;                //输出高电平

                         };

                };

                gpio_sleep: gpio_sleep {

                       mux {

                                pins = "gpio99", "gpio98";    //复用引脚99和98

                                functions = "gpio";            //引脚功能配置为普通gpio

                        };

                        config {

                                pins = "gpio99", "gpio98";

                                drive-strength = <2>;    //最大电流限制为2mA

                                bias-no-pull;                //不上拉也不下拉

                                output-low;                //输出低电平

                         }; 

        };


        设备节点中引用pinctrl:

        device_node {

                    ...

                    pinctrl-names = "gpio_active", "gpio_sleep";    //分别对用pinctrl-0和pinctrl-1

                    pinctrl-0 = <&gpio_active>;                               //引用

                    pinctrl-1 = <&gpio_sleep>;                                //引用

                    ...

        };


        内核驱动代码:


  
  
  1.        struct pinctrl *pinctrl = devm_pinctrl_get(device);    //获取device对应节点下的pinctrl
  2.        struct pinctrl_state = pinctrl_lookup_state(pinctrl, "gpio_active");    //通过pinctrl名获取pinctrl对应状态
  3.        pinctrl_select_state(pinctrl, pinctrl_state);        //设置pinctrl的状态为'gpio_active
  4.        devm_pinctrl_put(pinctrl);          //使用完了释放资源

        也可以同时使用方法一和方法二,方法一操作简单,但是只能拉高或拉低,而方法二可全面配置GPIO。在一个设备驱动中同时使用方法一和方法二可保证资源不被其他模块操作。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高通平台中gpio简单操作和调试 的相关文章

  • [BJOI2014]大融合【LCT维护子树信息】

    题目链接 本题保证不会构成环 此为前提 然后操作是查询 或者接上一条边 保证之前两点不连通 好了 接下去就是正经事儿了 在此之前 已经有了利用LCT来维护树链信息了 现在只要在这基础上稍加改变 就可以维护某点 也可以是不定根 的子树信息了
  • nginx:实时流量拷贝mirror模块

    ngx http mirror module模块 实时流量拷贝 precontent阶段的mirror模块 默认编译进nginx模块 通过 without ngx http mirror module禁用模块 功能 创造一份镜像流量 生产环
  • React函数式组件渲染、useEffect顺序总结

    参考资料 深入React的生命周期 上 出生阶段 Mount 深入React的生命周期 下 更新 Update 精读 useEffect 完全指南 React组件重新渲染理解 优化大全React渲染顺序及useEffect执行顺序探究 含并
  • mysql创建定时任务

    一 前言 自 MySQL5 1 6起 增加了一个非常有特色的功能 事件调度器 Event Scheduler 可以用做定时执行某些特定任务 例如 删除记录 对数据进行汇总等等 来取代原先只能由操作系统的计划任务来执行的工作 更值得 一提的是
  • pytorch小问题

    pytorch张量的保存和恢复 tensor本身就是对象 如果想要保存和恢复对应的对象 使用 torch save 和 torch load即可 就像picke的load 和dump一样 t2 torch randn 1024 1024 t
  • Java Spring @Scheduled 定时任务crontab表达式设置

    Java Spring Scheduled 定时任务crontab表达式设置 1 Cron详解 2 例子 参考 1 Cron详解 Cron表达式是一个字符串 字符串以5或6个空格隔开 分为6或7个域 每一个域代表一个含义 Cron有如下两种
  • React(一):React的设计哲学 - 简单之美

    React 一 React的设计哲学 简单之美 React 二 React开发神器Webpack React 三 理解JSX和组件 React 四 虚拟DOM Diff算法解析 React 五 使用Flux搭建React应用程序架构 Rea
  • Java程序员开发软件(工具)清单

    亲 你准备好了吗 001 项目管理 禅道 JIRA 002 办公协同 钉钉 003 工作邮件 Foxmail OutLook 004 项目文档 MS Office Word Excel PowerPoint WPS 005 MD 笔记 Ty
  • openGL之API学习(六十九)水平同步 垂直同步

    垂直和水平是CRT中两个基本的同步信号 水平同步信号决定了CRT画出一条横越屏幕线的时间 垂直同步信号决定了CRT从屏幕顶部画到底部 再返回原始位置的时间 而恰恰是垂直同步代表着CRT显示器的刷新率水平 垂直同步打开 那么在游戏中 或许强劲
  • 用 LangChain 构建基于资料库的问答机器人(二):从资料源中提取文本信息

    大家好 我是学生大使 Jambo 这个系列的目标是做出一个根据资料回答问题的机器人 那么从资料源中提取文本信息就是一件必要的事 但我们的资料源格式是多样的 比如 PDF Word HTML PPT 等等 甚至有的资料源来自于网络 这些格式都
  • Android studio 怎样连接手机运行,Android studio连接手机调试

    今天百度了一下如何在在Android studio如何在真机上运行 比较复杂 看了很多 现在给大家总结一下 1 首先要将手机连接到电脑上 直接在电脑上安装一个应用宝 然后在手机上也安装一个应用宝 通过应用宝将手机连接到电脑上 2 打开手机的
  • Nacos下载安装与配置(windows)

    一 Nacos下载 外网不好下载以下提供了两个版本 官网地址 https nacos io zh cn 蓝奏云地址 nacos server 1 4 1 zip 蓝奏云 1 4 1 版本 windows nacos server 2 0 0
  • 像智能手机一样造车,可能吗?

    造车这件事有多火 从小鹏 理想等昔日 造车新势力 在互联网军团的入局浪潮中 都变成了 前浪 就可见一斑 春节前后 我们见证了一波波互联网企业在汽车领域的布局 百度与吉利组建合资公司 苹果传出与韩国现代合作 阿里与上汽的智己汽车注册不到20天
  • 2023年VSCode插件最新推荐(54款)

    本文介绍前端开发领域常用的一些VSCode插件 插件是VSCode最重要的组成部分之一 本文列出了我自己在以往工作经验中积累的54款插件 个人觉得这些插件是有用或有趣的 根据它们的作用 我粗略的把它们分成了代码管理 文本和图片处理 前端框架
  • 端到端学习在车辆测距中的探索与实践

    yolo车距1 订阅车距专栏获得源码 http t csdn cn sU3U6 随着深度学习技术的快速发展 端到端学习在计算机视觉领域取得了显著的成果 端到端学习是一种直接从输入数据到输出结果的模型训练方法 无需进行复杂的特征工程 在车辆测
  • 【Arduino学习】05.驱动4个数码管

    数码管介绍 如图 本次使用的数码管为共阴极 四个数码管有 12 个引脚 可以分为位选脚和段选脚 段选脚 8个引脚a b c d e f g 位选脚 4 个引脚 D1 D2 D3 D4 哪个数码管显示由片选脚决定 片选脚为高电平 则该数码管点
  • 九宫格人车识别

    一 原理 通过霍夫检测圆的个数来识别小人位置 二 过程 1 二值图像 2 去掉宫格内容 便于分割 3 对二值图填补 减少纹理 4 分割九宫格 依次检测每个宫格中圆个数 5 最终显示小人所在宫格图片 在img6 jpg中 详细程序运行结果 三
  • xshell连接提示Linux服务器发送了一个意外的数据包

    服务器发送了一个意外的数据包received 3 expected 20 打开需要连接的Linux主机 编辑vim etc ssh sshd config 在最后一行添加 KexAlgorithms curve25519 sha256 li
  • Java通过自定义类加载器模拟冰蝎免杀功能

    一 Java类加载器 类加载器属于JVM的一个重要知识点 也是Java安全里命令执行 webshell管理器编写的常用技术 类加载器简介 我们知道java源文件在运行前会被编译为class类文件 存放着编译后JVM虚拟机指令的二进制字节流
  • 字符编码悉知

    1 查看windows系统代码页 代码页是字符集编码的别名 也有人称 内码表 早期 代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称 当时通用的操作系统都是命令行界面系统 这些操作系统直接使用BIOS供应的VGA功能来显示字符 操作

随机推荐