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的方法及实时性分析的更多相关文章

  1. Android(Linux)控制GPIO方法二

    前文<Android(Linux)控制GPIO的方法及实时性分析>主要使用Linux shell命令控制GPIO,该方法可在调试过程中快速确定GPIO硬件是否有问题,即对应的GPIO是否受 ...

  2. Android(Java)控制GPIO的方法及耗时分析

    前面两篇分别介绍了通过脚本和C代码读写/sys/class/gpio以控制GPIO.实际项目调试时经常还需要在Java代码里控制GPIO,其实现与C代码类似,唯一不同是Android权限.本文重点介绍 ...

  3. Linux操作系统实时性分析

    1. 概述 选择一个合适的嵌入式操作系统,可以考虑以下几个因素:  第一是应用.如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者uCLinux ...

  4. Linux 2.6 内核实时性分析 (完善中...)

      经过一个月的学习,目前对linux 下驱动程序的编写有了入门的认识,现在需要着手实践,编写相关的驱动程序. 因为飞控系统对实时性有一定的要求,所以先打算学习linux 2.6 内核的实时性与任务调 ...

  5. CNC系统实时性分析

    该系统有哪些强实时功能需求?需要对哪些实时事件进行实时响应,对允许的实时延迟的数量级进行估计. 答:数控系统中控制装置与现场设备通信的实时性要求,数控系统要快速而有效的对复杂而庞大的操作任务进行处理. ...

  6. android jni控制gpio (rk3288)

    1.添加驱动程序 2.编写jni c程序编译为库给java调用 3.app调用jni静态链接库操作底层驱动 1.添加驱动程序 修改/work/rk3288/firefly-rk3288_android ...

  7. android linux 休眠 深度睡眠 查看 方法 调试【转】

    本文转载自:https://blog.csdn.net/u011006622/article/details/72900552 在Android移动设备中,有时按下Power键(未接电源,USB)时, ...

  8. RaspberryPi2B使用bcm2835c库控制GPIO

    RaspberryPi2B使用bcm2835c库控制GPIO 网上有很多RaspberryPi控制GPIO的方法,有Python.WiringPi.bcm2835 C library 使用bcm283 ...

  9. 为树莓派添加一个强实时性前端[原创cnblogs.com/helesheng]

    树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...

随机推荐

  1. 【配置属性】—Entity Framework 对应表字段的类型的设定配置方法

    摘自:http://www.cnblogs.com/nianming/archive/2012/11/07/2757997.html Entity Framework Code First的默认行为是 ...

  2. Java初始化顺序

    package com.helei.init; class Log { public static String fatherStaticString(){System.out.println(&qu ...

  3. adb命令

    一下是记录一些日常经常用的adb command, adb root: adb shell -> su -> return -> adb root(首先让安卓设备获得root权限,然 ...

  4. GetEnumerator();yield

    GetEnumerator()方法的实质实现: 说明:只要一个集合点出GetEnumerator方法,就获得了迭代器属性,就可以用MoveNext和Current来实现foreach的效果,如上图. ...

  5. 移动端UC /QQ 浏览器的部分私有Meta 属性

    <meta name="format-detection" content ="telephone=no"/>   格式检测 禁止识别我们页面中的数 ...

  6. arcgis server10.2.2的安装步骤过程

    1.找到ArcGIS Server软件包目录下的esri.exe,打开运行,选择安装ArcGIS for Server,见下图: 2.确定之后,会弹出让用户输入用户名和密码的界面,这个可以自己定义,但 ...

  7. VS2013新建MVC5项目,使用nuget更新项目引用后发生Newtonsoft.Json引用冲突的解决办法

    错误信息如下: 错误    3    类型“Newtonsoft.Json.JsonPropertyAttribute”同时存在于“c:\Program Files (x86)\Microsoft V ...

  8. [Android]官网《UI/Application Exerciser Monkey》中文翻译

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5049041.html 翻译自 Android Develope ...

  9. iOS开发-UI 从入门到精通(一)

    一.UI概述 (1)UI(User Interface)用户界面,用户能看到的各种各样的页面元素: (2)iOS App = 各种各样的UI控件+业务逻辑和算法: (3)想要开发出一款精美的应用程序, ...

  10. React Native知识7-TabBarIOS组件

    一:简介 两个TabBarIOS和TabBarIOS.Item组件可以实现页面Tab切换的功能,Tab页面切换的架构在应用开发中还是非常常见的.如:腾讯QQ,淘宝,美团外卖等等 二:TabBarIOS ...