工作日志-Linux系统下GPIO口驱动调试_linux 打开gpio调试选项-程序员宅基地

技术标签: 驱动程序  linux  工作日志  gpio  

工作日志-Linux系统下GPIO口驱动调试

一、调试命令

1.1、文件位置:gpio口文件在/sys/class/gpio目录下。

1.2、申请gpio口:echo gpio口序号 > /sys/class/gpio/export
例:echo 23 > /sys/class/gpio/export
通过上面命令,系统会在/sys/class/gpio/目录下生成gpio23文件夹,此文件夹出现代表gpio口申请成功。

1.3、控制gpio口输入/输出方向:echo in/out > /sys/class/gpio/gpio口序号/direction
输入:echo in > /sys/class/gpio/gpio23/direction;
输出:echo out > /sys/class/gpio/gpio23/direction;
即设置gpio23口为输入/输出,后续可以通过其它命令来读取/设置gpio23口电平状态。

1.4、读取gpio口状态:cat /sys/class/gpio/gpio口序号/value
例:cat /sys/class/gpio/gpio23/value
通过以上命令,无论gpio口设置为输入/输出,都可查看该gpio口状态。

1.5、设置输出gpio口电平高低:echo 0/1 > /sys/class/gpio/gpio口序号/value
例:echo 0 > /sys/class/gpio/gpio23/value
通过以上命令可以设置gpio23口为低电平状态。(注:需先设置gpio23为输出方向)
例:echo 1 > /sys/class/gpio/gpio23/value
通过以上命令可以设置gpio23口为高电平状态。(注:需先设置gpio23为输出方向)

通过以上所有命令,即可对gpio口进行调试。

二、接口函数

2.1、头文件:include <linux/gpio.h>

2.2、gpio申请:int gpio_request(unsigned gpio, const char *label)
gpio为要申请哪一个gpio口;label为该gpio口的名字;返回值为0则表示申请成功,否则失败。
例:gpio_request(23, gpio23)

2.3、设置gpio口为输入:int gpio_direction_input(unsigned gpio)
gpio为需要设置输入的gpio口序号;成功返回0,失败返回一个负的错误码。
例:gpio_direction_input(23)

2.4、设置gpio口方向为输出:int gpio_direction_output(unsigned gpio, int value)
gpio为设置为输出的gpio口序号;value为设置gpio口状态;成功返回0,失败返回一个负的错误码。
功能:该函数的功能为设置gpio口为输出,同时设置gpio口状态为0/1;与其相识的一个函数为void gpio_set_value(unsigned gpio, int value);它的功能为将gpio口设置为value,但后者不设置gpio口方向,只设置gpio口电平状态。
例:gpio_direction_output(23,0);gpio_set_value(23,0)

2.5、获得gpio口状态:int gpio_get_value(unsigned gpio)
gpio为想要获得状态的gpio口序号,返回值为该gpio口状态;
注意:gpio为输出模式时,也能通过该API获取当前IO值

2.6、释放gpio口:void gpio_free(unsigned gpio)
例:gpio_free(23)

三、设置gpio口工作模式

在特定模式下,会因为设计原因导致该gpio口即使申请成功后还是不能正常进行读写操作,出现该情况可以考虑更改该gpio口的工作模式。

3.1、调试命令:
devmem 0x12345678 32 :读取0x12345678地址32bit的数据;
devmem 0x12345678 32 0xC1:向0x12345678地址写32bit的0x87654321值;
上述读写大小可根据需要自行改变为8/16/32bit。

3.2、通过函数修改GPIO模式
根据寄存器地址进行修改,以读写内存的方式修改gpio工作模式。

void * ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
入口: phys_addr:要映射的起始的IO地址,即:物理地址
size:要映射的空间的大小;
flags:要映射的IO空间的和权限有关的标志(可以不使用);

iounmap((void *)virt); //撤销映射关系

unsignedint ioread32(void *addr);

void iowrite32(u32 value, void *addr);
通过以上函数可以读写内存,从而改变gpio口模式。

扩展:
GPIO端口各种模式:
(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
(5)GPIO_Mode_Out_OD 开漏输出
(6)GPIO_Mode_Out_PP 推挽输出
(7)GPIO_Mode_AF_OD 复用开漏输出
(8)GPIO_Mode_AF_PP 复用推挽输出

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lf295455/article/details/109435037

智能推荐

剑指offer第五题:替换空格_class solution: # s 源字符串 def replacespace(self, s)-程序员宅基地

文章浏览阅读272次。思路应该使用指针从后向前替换字符串。不过python用不到。 class Solution: # s 源字符串 def replaceSpace(self, s): # write code here new_s='' for j in s: if j==' ': ne..._class solution: # s 源字符串 def replacespace(self, s): # write code here if

python学习之滚动页面函数execute_script-程序员宅基地

文章浏览阅读1.4w次,点赞7次,收藏60次。python学习之滚动页面函数execute_script滚动到底部:window.scrollTo(0,document.body.scrollHeight)滚动到顶部:window.scrollTo(0,0)说明:window:js的window对象scrollTo():window的方法,可以滚到页面的任何位置scrollHeight:是dom元素的通用属性,docu..._execute_script

记录一个有趣BUG的感悟_有趣的软件bug-程序员宅基地

文章浏览阅读1.4k次。 BUG还挺简单的,就是看了解决过程觉得很有趣,记录下来。 在随便点击地图,查看点的时候,发现地图上有个错别字。 我就写个BUG提交。当时提的时候就觉得很好玩,印象中地图应该是非常严谨的东西,竟然出现了错别字这样的错误。感觉可能不止这一处错误,不过其他我应该没发现。内容如下:测试前提:安装好卡车APP,网络连接状态为WIFI,定位打开,一切正常的情况下。 操作步骤: 1、打开卡车..._有趣的软件bug

初学者python编辑器_Thonny:适合初学者的Python编辑器-程序员宅基地

文章浏览阅读8.9k次,点赞4次,收藏17次。初学者python编辑器Are you a Python beginner looking for a tool that can support your learning? This article is for you! Every programmer needs a place to write their code. This article will discuss an aweso..._thonny调试灰色

Java开发中token 的使用_java中token用法-程序员宅基地

文章浏览阅读8.7k次,点赞2次,收藏47次。Token流程: 1.建立token工具类,先编辑token签名sign():设置超时时长、token秘钥。 2.配置拦截器类,拦截器中重写preHandle()方法,对每次请求进行自定义的拦截操作。 3.建立配置类:定义拦截与不拦截的接口信息。页面请求登录接口→登录成功后,返回登录信息+token秘钥给前端→前端记住密钥信息,并赋予每个接口(例:在每个接口访问时将秘钥信息放置于headers中的参数下)→拦截器接到请求,从headers获取token密钥进行匹配,通过则继续访问,不通过则返回提示信_java中token用法

Web安全之PHP的伪协议漏洞利用,以及伪协议漏洞防护方法_php伪协议是漏洞吗-程序员宅基地

文章浏览阅读1.6k次,点赞3次,收藏14次。单纯看伪协议利用与之前的文件包含漏洞及其相似,但是在真实环境中是对用户输入进行了过滤替换的,在使用漏洞就需要不断考虑如何绕过这些过滤条件。只要我们开发过程中对于使用了伪协议这些函数的时候,一定要严格对用户参数进行过滤,避免一时偷懒导致服务器被黑,其实最终难逃其就。如有还不太理解或有其他想法的小伙伴们都可以私信我或评论区打出来哟,如有写的不好的地方也请大家多多包涵。_php伪协议是漏洞吗

随便推点

HDU 1010 Tempter of the Bone 搜索 奇偶剪枝-程序员宅基地

文章浏览阅读221次。Tempter of the Bone Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStatusDescriptionThe doggie found a bone in an ancient maze, which fascinated him a lot. However,

SRv6 TE Policy场景-原理浅谈及配置示例-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏12次。EVPN L3VPN for IPv4 Over SRv6 TE Policy场景介绍;SRv6 TE policy原理介绍;RFC9256简介_srv6 te policy

【计算机操作系统】实时操作系统-程序员宅基地

文章浏览阅读1.9k次。1. 实时内核:实时内核是实时系统的核心组成部分,它具有实时调度器、实时任务管理器、实时中断处理器等功能,能够确保任务在预定的时间内得到执行。实时任务通常分为硬实时任务和软实时任务两种类型,硬实时任务要求任务必须在预定的时间内完成,而软实时任务只需要尽量满足时间限制。它通常分为硬实时系统和软实时系统,其中硬实时系统要求任务的响应时间必须严格满足预定的时间限制,而软实时系统只需要尽量满足时间限制。实时调度算法必须满足实时系统的基本要求,例如任务的可预测性和响应时间的最小化等。_实时操作系统

手机可用熵_什么是熵?-程序员宅基地

文章浏览阅读279次。病房中的不确定性首先我们专注于一个简单的问题。在其他条件都相同的情况下,这三个病人中的哪个面临着最大的不确定性?这个问题的答案是显而易见的,病人 C。他所面临的是在这种情况下可能呢存在的最大程度的不确定性:就像医疗版本的抛硬币试验一样。对于病人 A 来说,虽然他的情况不容乐观,但是至少他对于是否患病这个问题有最小的不确定性。对于病人 B,他的不确定性在病人 A 和病人 C 之间。这就是为什么要引入..._熵用手机计算机怎么算

php 画验证码 header(image/png),php画图应用之验证码-程序员宅基地

文章浏览阅读416次。在画图里面,就像之前所说的。php的画图是真正动态画图,尽管自己承认会出的图是非常不好看的。但我们主要关注的应该还是数据处理。验证码我们差点儿无处不见,它的产生和画图技术是密不可分的。事实上,简单的验证码绘制出来是非常easy的,就像以下的一段代码就能够绘制出包括字母和数字的元素:$checkCode="";for($i=0; $i<=3;$i++){$checkCode.=dechex(r..._php header png

HTML期末作业-基于HTML+CSS+JavaScript制作学生信息管理系统模板_javascript、html进行信息管理-程序员宅基地

文章浏览阅读140次。‍ 学生管理系统网页设计 、OA管理系统、后台管理模板、智能停车系统、等网站的设计与制作。️HTML网页设计,采用DIV+CSS布局,共有多个页面,排版整洁,内容丰富,主题鲜明,首页使用CSS排版比较丰富,色彩鲜明有活力,导航与正文字体分别设置不同字号大小。导航区域设置了背景图。子页面有纯文字页面和图文并茂页面。 一套优质的网页设计应该包含 (具体可根据个人要求而定)网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程序方面:计划采用最新_javascript、html进行信息管理

推荐文章

热门文章

相关标签