Android(Linux)控制GPIO的方法及实时性分析
Linux下控制GPIO的方法有N种,详细请参考《RPi GPIO Code Samples》,文中用十多种语言演示了如何控制GPIO,非常全面详尽。因此,这里不再多做赘述,仅把调试过程中整理的脚本贴上并做简单的分析。特别说明,Linux必须有root权限!!!否则会出现/system/bin/sh: can't create /sys/class/gpio/export: Permission denied等错误。
@echo off
echo adb root
adb root >%temp%\_tmp
@findstr "already" %temp%\_tmp
@if NOT errorlevel goto config
timeout /T :config
@echo on
adb shell chmod /sys/class/gpio/export
adb shell chmod /sys/class/gpio/unexport adb shell echo ">" /sys/class/gpio/export
adb shell echo ">" /sys/class/gpio/export adb shell chmod /sys/class/gpio/gpio62/direction
adb shell chmod /sys/class/gpio/gpio63/direction
adb shell chmod /sys/class/gpio/gpio62/value
adb shell chmod /sys/class/gpio/gpio63/value adb shell echo out ">" /sys/class/gpio/gpio62/direction
adb shell echo out ">" /sys/class/gpio/gpio63/direction
adb shell echo ">" /sys/class/gpio/gpio62/value
adb shell echo ">" /sys/class/gpio/gpio63/value @echo off
:top
adb shell echo ">" /sys/class/gpio/gpio62/value
adb shell echo ">" /sys/class/gpio/gpio63/value
rem @timeout /T
for /l %%i in (,,) do echo %%i>nul
rem ping 0.0.0.1 -n -w >nul
adb shell echo ">" /sys/class/gpio/gpio62/value
adb shell echo ">" /sys/class/gpio/gpio63/value
rem @timeout /T
for /l %%i in (,,) do echo %%i>nul
rem ping 0.0.0.1 -n -w >nul
goto top pause.
该批处理文件运行在PC上,通过adb发送shell命令操作/sys/class/gpio以控制GPIO。
在MSM8996的开发板上测试,运行结果如下图所示。

从图中可以看出,两个GPIO的控制时间间隔相差约40ms,说明GPIO控制延时较为严重。
#!/system/bin/sh
chmod /sys/class/gpio/export
chmod /sys/class/gpio/unexport echo > /sys/class/gpio/export
echo > /sys/class/gpio/export chmod /sys/class/gpio/gpio62/direction
chmod /sys/class/gpio/gpio63/direction
chmod /sys/class/gpio/gpio62/value
chmod /sys/class/gpio/gpio63/value echo out > /sys/class/gpio/gpio62/direction
echo out > /sys/class/gpio/gpio63/direction
echo > /sys/class/gpio/gpio62/value
echo > /sys/class/gpio/gpio63/value while :
do
echo > /sys/class/gpio/gpio62/value
echo > /sys/class/gpio/gpio63/value
usleep
echo > /sys/class/gpio/gpio62/value
echo > /sys/class/gpio/gpio63/value
usleep
done
该脚本运行在MSM8996开发板上,通过操作/sys/class/gpio以控制GPIO,执行结果如下图所示。


从图中可以看出,两个GPIO的控制时间间隔相差约0.6ms,说明GPIO控制延时较小。
Android脚本文件可通过如下命令发送到开发板上,并修改其属性。
pushd %~dp0
adb push .\gpio.sh /data/local/
adb shell chmod 777 /data/local/gpio.sh
参考:
How to use GPIO signals(Linux应用程序控制GPIO) PNG
https://developer.ridgerun.com/wiki/index.php/How_to_use_GPIO_signals
树莓派上使用多种语言(C、Python、shell)控制GPIO
http://elinux.org/RPi_GPIO_Code_Samples
安卓应用程序通过JNI控制GPIO
http://android.serverbox.ch/?p=972
Device Tree Usage
http://elinux.org/Device_Tree_Usage
BeagleBone Black (BBB) Pin Muxes
http://www.valvers.com/embedded-linux/beaglebone-black/step04-gpio
Beaglebone Pin Muxes
http://www.valvers.com/embedded-linux/beaglebone/step04-gpio1
Using Device Trees To Configure PRU IO Pins
http://www.ofitselfso.com/BeagleNotes/UsingDeviceTreesToConfigurePRUIOPins.php
BeagleBone Black GPIOs
http://kilobaser.com/blog/2014-07-15-beaglebone-black-gpios
gpio-header
https://github.com/nomel/beaglebone/tree/master/gpio-header
beaglebone-universal-io
https://github.com/cdsteinkuehler/beaglebone-universal-io
Android(Linux)控制GPIO的方法及实时性分析的更多相关文章
- Android(Linux)控制GPIO方法二
前文<Android(Linux)控制GPIO的方法及实时性分析>主要使用Linux shell命令控制GPIO,该方法可在调试过程中快速确定GPIO硬件是否有问题,即对应的GPIO是否受 ...
- Android(Java)控制GPIO的方法及耗时分析
前面两篇分别介绍了通过脚本和C代码读写/sys/class/gpio以控制GPIO.实际项目调试时经常还需要在Java代码里控制GPIO,其实现与C代码类似,唯一不同是Android权限.本文重点介绍 ...
- Linux操作系统实时性分析
1. 概述 选择一个合适的嵌入式操作系统,可以考虑以下几个因素: 第一是应用.如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者uCLinux ...
- Linux 2.6 内核实时性分析 (完善中...)
经过一个月的学习,目前对linux 下驱动程序的编写有了入门的认识,现在需要着手实践,编写相关的驱动程序. 因为飞控系统对实时性有一定的要求,所以先打算学习linux 2.6 内核的实时性与任务调 ...
- CNC系统实时性分析
该系统有哪些强实时功能需求?需要对哪些实时事件进行实时响应,对允许的实时延迟的数量级进行估计. 答:数控系统中控制装置与现场设备通信的实时性要求,数控系统要快速而有效的对复杂而庞大的操作任务进行处理. ...
- android jni控制gpio (rk3288)
1.添加驱动程序 2.编写jni c程序编译为库给java调用 3.app调用jni静态链接库操作底层驱动 1.添加驱动程序 修改/work/rk3288/firefly-rk3288_android ...
- android linux 休眠 深度睡眠 查看 方法 调试【转】
本文转载自:https://blog.csdn.net/u011006622/article/details/72900552 在Android移动设备中,有时按下Power键(未接电源,USB)时, ...
- RaspberryPi2B使用bcm2835c库控制GPIO
RaspberryPi2B使用bcm2835c库控制GPIO 网上有很多RaspberryPi控制GPIO的方法,有Python.WiringPi.bcm2835 C library 使用bcm283 ...
- 为树莓派添加一个强实时性前端[原创cnblogs.com/helesheng]
树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...
随机推荐
- Java程序员必须掌握的8大排序算法
分类: 1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序) 所需辅助空间最多:归并排序所需辅助空间最少:堆 ...
- [moka同学笔记]七、Yii2.0课程笔记(魏曦老师教程)[新增管理员,重置密码]
- FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!
一些struts2的教程都是比较早的,当我们基于较新版本的struts2来实现代码的时候,往往会出现一些问题.比如这个警告:FilterDispatcher isdeprecated! 在web.xm ...
- webpack初体验
本人菜鸟一枚,最近一直在研究webpack的使用,记录下自己的学习体会,由于网上关于webpack的资源(技术博客)太多,对于初学webpack的新手来说,看着五花八门的技术博客,真是头晕眼花(可能是 ...
- IIS10中使用OpenSSL来创建CA并且签发SSL证书
参考: http://www.cnblogs.com/lierle/p/5140187.html http://alvinhu.com/blog/2013/06/12/creating-a-certi ...
- 一句话知识:如何解决winform自动缩放产生的布局问题.
转自http://www.cnblogs.com/KenBlove/articles/1281823.html有时候你会发现本来好好的WinForm程序在别的机器上显示的尺寸就不对了.这些问题主要发生 ...
- Linux学习心得之 linux命令
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本篇博客是对 每日一linux命令(http://www.cnblogs.com/pe ...
- C#中的泛型
写在前面:好几个月没更新了,这些天换了份工作,原来的公司出了很多事所以辞职了.这篇文章写的超级好,让我终于明白了困扰在我心里好久的C#泛型的概念,不仅收藏了,还手动转发一下 哈哈哈~ 1.1 C#中的 ...
- Android Studio 2.2.2导入Eclipse中创建的项目
最近随视频教程学习Android,原本都是用Adt写Android程序,中途教程换成了Android Studio,于是我自己下了android studio 2.2.2安装好,并下载好sdk,也跟着 ...
- SDK的制作详解
一个简单的SDK制作是很容易的,复杂的sdk其实就和复杂化的应用一样,都是从简单开始的,这里介绍一下sdk的简单制作 步骤: 1.创建sdk,公开文件 2.编译.获取sdk文件 3.导入工程,配置文件 ...