We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我前面讲的和Android SDK无关,有一种方式可以直接控制GPIO的方式来操作屏幕的开关。
GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。嵌入式系统中经常有数量众多。可是结构却比較简单的外部设备/电路。对这些设备/电路有的须要CPU为之提供控制手段,有的则须要被CPU用作输入信号。
并且,很多这种设备/电路仅仅要求一位。即仅仅要有开/关两种状态就够了。比方灯亮与灭。
对这些设备/电路的控制。使用传统的串行口或并行口都不合适。
所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。
接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。
数据寄存器的各位都直接引到芯片外部,而对这样的寄存器中每一位的作用,即每一位的信号流通方向,则能够通过控制寄存器中相应位独立的加以设置。这样。有无GPIO接口也就成为微控制器差别于微处理器的一个特征。
其实Linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。 Android和Linux出自”同门“,也有这个功能
C:\Users\xxxx>adb shell shell@pegasus:/ $ cd /sy sys/ system/ shell@pegasus:/ $ cd /sys/class/gpio shell@pegasus:/sys/class/gpio $ ls export gpio1049 gpio1189 gpio1237 gpiochip1024 gpiochip1088 gpiochip1152 gpiochip1216 unexport gpio1048 gpio1051 gpio1218 gpiochip1000 gpiochip1056 gpiochip1120 gpiochip1184 gpiochip1248
首先浏览下 /sys/class/gpio目录下有哪些内容?
文件用于通知系统需要导出控制的GPIO引脚编号
用于通知系统取消导出
目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数 导出一个引脚的操作步骤
已经导出的引脚,名字直接和编号一一对应
root@pegasus:/sys/class/gpio # for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done gpio0: 1000 gpio1: 1024 gpio2: 1056 gpio3: 1088 gpio4: 1120 gpio5: 1152 gpio6: 1184 gpio7: 1216 gpio8: 1248
运行下脚本,可以看到本机有9个寄存器,以及他们的初始引脚编号
定位到已经导出的1189引脚
root@pegasus:/sys/class/gpio # cat /sys/class/gpio/gpio1189/value 1 root@pegasus:/sys/class/gpio # cat /sys/class/gpio/gpio1189/direction out
可以了解到这是一个输出引脚,并且当前是高电平。
尝试去修改value
root@pegasus:/sys/class/gpio # echo 0 > /sys/class/gpio/gpio1189/value root@pegasus:/sys/class/gpio # echo 1 > /sys/class/gpio/gpio1189/value root@pegasus:/sys/class/gpio # echo 0 > /sys/class/gpio/gpio1189/value root@pegasus:/sys/class/gpio # echo 1 > /sys/class/gpio/gpio1189/value
操作后,果然屏幕受到控制
图文并茂一下,只是原理上解释下,真实接线可能还有差异
如图为实物寄存器 具体硬件引脚的说明
实体接线图 电路示意图
图的例子是接了一个led灯,具体例子可以换成其他东西包括屏幕,大家可以尽情脑补
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
我前面讲的和Android SDK无关,有一种方式可以直接控制GPIO的方式来操作屏幕的开关。
什么是GPIO
GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。嵌入式系统中经常有数量众多。可是结构却比較简单的外部设备/电路。对这些设备/电路有的须要CPU为之提供控制手段,有的则须要被CPU用作输入信号。
并且,很多这种设备/电路仅仅要求一位。即仅仅要有开/关两种状态就够了。比方灯亮与灭。
对这些设备/电路的控制。使用传统的串行口或并行口都不合适。
所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。
接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。
数据寄存器的各位都直接引到芯片外部,而对这样的寄存器中每一位的作用,即每一位的信号流通方向,则能够通过控制寄存器中相应位独立的加以设置。这样。有无GPIO接口也就成为微控制器差别于微处理器的一个特征。
操作GPIO用户接口sysf
其实Linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。
Android和Linux出自”同门“,也有这个功能
首先浏览下 /sys/class/gpio目录下有哪些内容?
/sys/class/gpio/export
文件用于通知系统需要导出控制的GPIO引脚编号
/sys/class/gpio/unexport
用于通知系统取消导出
/sys/class/gpio/gpiochipX
目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数 导出一个引脚的操作步骤
/sys/class/gpio/gpio{编号}
已经导出的引脚,名字直接和编号一一对应
运行下脚本,可以看到本机有9个寄存器,以及他们的初始引脚编号
定位到已经导出的1189引脚
可以了解到这是一个输出引脚,并且当前是高电平。
尝试去修改value
操作后,果然屏幕受到控制
GPIO控制实现原理
图文并茂一下,只是原理上解释下,真实接线可能还有差异
如图为实物寄存器
具体硬件引脚的说明
实体接线图
电路示意图
图的例子是接了一个led灯,具体例子可以换成其他东西包括屏幕,大家可以尽情脑补
参考链接
The text was updated successfully, but these errors were encountered: