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]
树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...
随机推荐
- 【C#进阶系列】30 学习总结
前面学起来还是很顺的,毕竟很多都接触过. 后面学起来只能用“磨”来形容,以至于八章用了2个月.(当然也有相当一些原因是这两个月中发生了一些个人生活上的问题) 总的来说收获超大,这种感觉就像大一的时候学 ...
- EC笔记,第二部分:9.不在构造、析构函数中调用虚函数
9.不在构造.析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #; } 上述程序会产生什么样的输出呢? 你一定会以为会输出: cls2 make cls2 delete ...
- adb命令
一下是记录一些日常经常用的adb command, adb root: adb shell -> su -> return -> adb root(首先让安卓设备获得root权限,然 ...
- GJM : 中断被Socket.Accept阻塞的线程
原帖地址:http://blog.csdn.net/kingfox/article/details/7233350 原文作者:狐帝 刚刚学习C#,在编写一个网络通讯的程序的时候,遇到了点麻烦.监听代码 ...
- 在 Visual Studio 等编辑器/IDE中自动切换输入法,不需要手动的有没有?
使用Visual Studio写代码,经常遇到的一个问题就是切换中文输入法麻烦,输入完注释//,要切换到中文,输入完引号,要输入中文,然后还需要切换回来,有没有? 有时候中文输入法忽然失效有没有?明明 ...
- 实用CSS3的transform实现多种动画效果
查看效果:http://keleyi.com/a/bjad/b6x9q8gs.htm 以下是代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. ...
- AMD and CMD are dead之KMDjs内核之分号
在老版本的kmdjs中,强制了分号的要求.但是总感觉不爽,因为在开发Ket - Kmdjs Extension Tools的时候,总需要导入一些开源的库,然后痛苦就来了,总是报错,一查,就是缺少分号! ...
- Apache日志按天切割
Linux系统配置方法: 将其改为 ErrorLog "| /usr/local/apache/bin/rotatelogs /home/logs/www/error_%Y%m%d.log ...
- 数组Array,集合List与字符串String,整形int的get类方法。
比如 public static List<DownCountCmd> getDownCountCmdList() { return downCount; } List<DownCo ...
- CoreGraphics-基本图形绘制-直线、三角形、矩形、椭圆形、弧形
框架:CoreGraphics 步骤: 1."获取"图形上下文 let cxtRef = UIGraphicsGetCurrentContext()! 2.添加路径 3.渲 ...