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]
树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...
随机推荐
- 设置Textview最大长度,超出显示省略号
<TextView android:id="@+id/tvUserNameUgcListItem" android:layout_height="@dimen/dp ...
- css遮罩代码(已验证)
#mask { background-color: rgb(0, 0, 0); display:none; opacity: 0.0; /* Safari, Opera */ -moz-opacity ...
- Laravel安装方法 (windows)
Laravel安装方法(windows) 安装PHP 下载PHP7 http://windows.php.net/download#php-7.0 进入上述网站下载PHP7 选择zip包解压安装 配置 ...
- thinkcmf 常用操作
11-16 thinkcmf 核心文件结构:simplewind--model--lite--model.class.php /controller.class.php Mobile---contr ...
- jQuery实现侧边导航栏效果
效果图: 效果体验:http://keleyi.com/keleyi/phtml/jqmenu/2.htm 以下是完整代码: <!DOCTYPE html> <html> &l ...
- 前后端分离之前端项目构建(grunt+require+angular)
前言 前段时间做了一个项目,前端开发页面,然后把代码给到后端同学,后端同学通过vm再来渲染页面.后来才发现,这种方式简直是太low了,因为前端代码在服务端同学那里,每次前端需要更改的时候都需要去到服务 ...
- Jq基础简介
jQuery就是用原生js写出的框架集(Write less do more ) 1.需要注意的问题?(1).jQuery语法需要重新学习(2).jQuery需要注意版本之间的兼容性 (3)不是越新的 ...
- MySQL外键与外键关系说明(简单易懂)
MySQL主键和外键使用及说明 一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后 ...
- [JS]笔记14之事件委托
-->什么是事件委托-->事件委托原理-->事件委托优点-->事件源 / 目标源 一.什么是事件委托 通俗的讲,onclick,onmouseover,onmouseout等这 ...
- 1-1 node 基础
1.什么是nodejs? 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js ...