LinuxGPIO操作和MTK平台GPIO

GPIO口配置是一个历史性的问题,不管我们使用什么MCU,单片机也好,ARM也好,都离不开驱动GPIO口。Linux下有一个宏,GPIO_GPIO_SYSFS,打开这个宏后,编译烧录到设备端,去看看sys/class/gpio/这个目录。你会发现很多惊喜。

虽然是一个小知识点,但是我觉得对做Linux和安卓驱动开发的同学非常有用,当别人问你怎么操作一个GPIO口的时候,你不妨直接把这个链接发给他。

#GPIO_GPIO_SYSFS打开后,GPIO基本操作

  • 导出   /sys/class/gpio# echo 12> export

  • 设置方向      /sys/class/gpio/gpio12# echo out > direction

  • 查看方向      /sys/class/gpio/gpio12# cat direction

  • 设置输出      /sys/class/gpio/gpio12# echo 1 > value

  • 查看输出值  /sys/class/gpio/gpio12# cat value

  • 取消导出     /sys/class/gpio# echo 12> unexport

#MTK平台提供节点给我们在命令行下对GPIO口进行配置,节点如下

MTK的GPIO口有点奇怪,他需要一个excel表格来对比后才能知道GPIO口是哪个。

比如:

AB2对应的是UART1的RX,对应的GPIO口编号是64。这个EXCEL表格我就不给出来了,因为不同的CPU的GPIO口标号也是有所不同。

mtk8167_bsp:/sys/devices/platform/soc/1000b000.pinctrl # cat mt_gpioPIN: [MODE] [DIR] [DOUT] [DIN] [PULL_EN] [PULL_SEL] [IES] [SMT] [DRIVE] ( [R1] [R0] )
0: 210010100
1: 210010100
2: 010010100
3: 000111100
4: 210010100
5: 210010100
6: 210010100
7: 011110100
8: 000000100
9: 011110100
10: 010010100
.......................
119: 100111112 01
120: 100111112 01
121: 00001010ffffffff
122: 10001010ffffffff
123: 10001010ffffffff
124: 10001010ffffffff

#所有的GPIO口配置信息都能看到,其中每一位的含义如下

  • [MODE]:每个GPIO可以配置的模式可以参考这个头文件kernel-4.4/arch/arm64/boot/dts/mediatek/mt8167-pinfunc.h

  • [DIR]:0=输入;1=输出

  • [DOUT]:作为输出引脚的高低电平,0=低;1=高

  • [DIN]:输入引脚的电平

  • [PULL_EN]:是指GPIO是否使能上拉或下拉,只有当GPIO作为输入模式时才生效

  • [PULL_SEL]:上面只设置了是否使能上拉或下拉,但并没有指出到底是上拉还是下拉。0=下拉;1=上拉

  • [IES]:输入使能,控制输入是否有效。

  • [SMT]:是否使能斯密特触发器

  • [DRIVE]:驱动能力,一般可取值0~7

  • ( [R1] [R0] ):

当前GPIO pin的(上下拉)并联电阻的使能状态

1 0表示enable R1,disable R0
0 1表示disable R1,enable R0
1 1表示enable R1, enable R0

不打印出来,表示当前的GPIO pin不支持PUPD状况,即只有一个上拉电阻、一个下拉电阻。

#示例

一般作为GPIO模式的时候,可以这么调试:

echo mode 66 0 > mt_gpio   /*设置66号位IO模式*/
echo dir 66 1 > mt_gpio    /*设置66号 io为输出方向*/
echo out 66 1 > mt_gpio    /*拉高66号io*/

  回复「 篮球的大肚子」进入技术群聊

回复「1024」获取1000G学习资料

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

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

相关文章

Linux cpu亲和力

最近在对项目进行性能优化,由于在多核平台上,所以了解了些进程、线程绑定cpu核的问题,在这里将所学记录一下。不管是线程还是进程,都是通过设置亲和性(affinity)来达到目的。对于[进程]的情况,一般是使用sched_setaffi…

卷积神经网络(目标分类)

文章目录目标分类基本框架数据准备数据扩充数据规范模型设计任务分类局部更改训练细节目标分类基本框架 数据准备 现有数据集的子集,网络采集,现有数据人工标注 数据扩充 原始数据切割,噪声颜色等像素变化,旋转平移 数据规范…

unity获取电磁笔压感_【WPF】获取电磁笔的压感

WPF 不仅支持触控,也支持笔的输入,比如现在比较高大上的电磁笔。便宜的板子一般不配备电磁笔,而是配电容笔,虽然也号称XXX级压感,但是效果自然不可与电磁笔相比。UIElement 类规范了UI元素的基本轮廓,在该类…

安卓9.0添加服务修改SELinux

#文章目录#前言#SELinux来源#SELinux基本框架#SELinux 在不同版本的表现#使用audit2allow工具生成SELinux 权限#完整代码#前言先推荐下之前的SELinux文章,但是那个是7.1的,在9.0上已经在差别很大的了。Android7.1 在init.rc 添加shell服务题外话~在企业里…

卷积神经网络-目标探测

文章目录目标探测介绍任务思路DPMRCNN1)候选区域选择2)CNN特征提取3)分类与边界回归R-CNN总结优点缺陷FAST-RCNNFASTER-RCNNYOLO目标探测介绍 任务 分类获取坐标 目标探测 图片分割 思路 回归问题:利用神经网络进行目标识别&am…

相机视场角和焦距_镜头小讲堂(一)镜头的焦距

在刚购买完相机的时候,我们久会考虑需要什么样的镜头来配合机身来使用。而市场上的镜头种类是在太多了,所以我们就要学习了解下镜头都有哪些种类,选择哪种镜头比较有优势。这也是学习摄影必备的基础知识。01 镜头的焦距焦距是镜头的重要指标&…

小程序开发过程注意事项

尽量避免使用 this.setData({});会让小程序页面会重新渲染,耗性能资源。 比如 ,clickShow: function(e) {this.setData({comment: ""});var comment e.currentTarget.dataset.comment && this.data.comment "" ? e.curre…

C语言指定初始化器解析及其应用

由于笔者能力有限,文中如果出现错误的地方,欢迎大家给我指出来,我将不胜感激,谢谢~#指定初始化器的概念C90 标准要求初始化程序中的元素以固定的顺序出现,与要初始化的数组或结构体中的元素顺序相同。但是在…

python self 序列_python中序列化对象

# 序列化对象p1import pickle # 内置库class People:def __init__(self, name, age):self.name nameself.age agedef sayhi(self):print("Hi, my name is {}, and Im {}".format(self.name, self.age))p1 People(name"Jack&qu…

递归神经网络

文章目录LSTM![在这里插入图片描述](https://img-blog.csdnimg.cn/20200609171449198.pngLSTM 4INPUTS 1outputs

程序媛计划——mysql连接表

#inner join等值连接/内连接 mysql> select * from info; ----------------------------- | name | phone | address | ----------------------------- | zhao | 13199999999 | Beijing | | qian | 1328888888 | Harbin | | sun | 13366666666 | Sha…

CNN+RNN

文章目录相同点不同点组合意义组合方式图片标注基本思路模型设计-数据准备视频行为识别视频行为识别图片问答相同点 传统神经网络的扩展 前向计算产生结果,反向计算模型更新 每层神经网络横向可以多个神经元共存,纵向可以多层神经网络链接 …

jsr 正则验证_Java数据校验(Bean Validation / JSR303)

#简介JSR303是JAVA EE6中的子规范。用于对Java Bean的字段值进行校验,确保输入进来的数据在语义上是正确的,使验证逻辑从业务代码中脱离出来。JSR303是运行时数据验证框架,验证之后验证的错误信息会马上返回。有两个版本JSR303(BeanValidatio…

css 透明度使用

设置元素整体透明度: div{opacity: 0.5; } 设置背景色透明度 div{background: rgba(0,0,0,0.5); } 转载于:https://www.cnblogs.com/chenglj/p/7498107.html

深入理解Linux内核链表

之前写过的链表文章,再结合这篇,我觉得是一道硬菜。Linux内核链表C语言,链表大家五一节日快乐,我知道劳动节大家都辛苦了,吃点硬菜好顶住饿肚子~#一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构&#x…

GAN

文章目录生成对抗网络(GAN)基础生成对抗网络 优点:缺点:生成对抗网络深度GANDCGAN结构细节特征研究DCGAN总结条件GAN模型结构INFOGANInfoGAN: 自动学习z中部分变量意义Wasserstein GANGAN存在问题原因WGAN特点改进方法:生成对抗网络(GAN)基础…

sql 查询统计最近7天,30天,1年的数据

统计最近7天每天的数据 第一个查询统计了最近7天内,每天创建的’WAIT_SEND’状态的订单数量。这是通过将当前日期向前推移6天(DATE_SUB(CURDATE(), INTERVAL 6 DAY))实现的。然后,它会按照创建日期对结果进行分组(GROU…

1200可以读取modbus tcp_S7-1200 作 MODBUS TCP服务器

S7-1200 Modbus TCP 通信指令块STEP 7 V13 SP1 软件版本中的Modbus TCP库指令目前最新的版本已升至V4.0,该版本的使用需要具备以下两个条件:1. 软件版本: STEP 7 V13 SP1及其以上2. 固件版本: S7-1200 CPU 的固件版本V4.1图1. Mod…

判断对象oStringObject是否为String

1.操作符 (1)typeof操作符 格式:resulttypeof variable 返回值: undefined 值未定义 boolean 布尔值 string 字符串 number 数值 object 对象、null function 函数 (2)instanceof操作符 格式:re…

Linux一定需要文件系统吗?

开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题! 一语破天机:“尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如…