首页 > 代码库 > Android(Linux)控制GPIO的方法及实时性分析

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 offecho adb rootadb root >%temp%\_tmp@findstr "already" %temp%\_tmp@if NOT errorlevel 1 goto configtimeout /T 10:config@echo onadb shell chmod 0666 /sys/class/gpio/exportadb shell chmod 0666 /sys/class/gpio/unexportadb shell echo 62 ">" /sys/class/gpio/exportadb shell echo 63 ">" /sys/class/gpio/exportadb shell chmod 0666 /sys/class/gpio/gpio62/directionadb shell chmod 0666 /sys/class/gpio/gpio63/directionadb shell chmod 0666 /sys/class/gpio/gpio62/valueadb shell chmod 0666 /sys/class/gpio/gpio63/valueadb shell echo out ">" /sys/class/gpio/gpio62/directionadb shell echo out ">" /sys/class/gpio/gpio63/directionadb shell echo 1 ">" /sys/class/gpio/gpio62/valueadb shell echo 1 ">" /sys/class/gpio/gpio63/value@echo off:topadb shell echo 1 ">" /sys/class/gpio/gpio62/valueadb shell echo 1 ">" /sys/class/gpio/gpio63/valuerem @timeout /T 1for /l %%i in (1,1,768) do echo %%i>nulrem ping 0.0.0.1 -n 1 -w 500>nuladb shell echo 0 ">" /sys/class/gpio/gpio62/valueadb shell echo 0 ">" /sys/class/gpio/gpio63/valuerem @timeout /T 1for /l %%i in (1,1,768) do echo %%i>nulrem ping 0.0.0.1 -n 1 -w 500>nulgoto toppause.

  该批处理文件运行在PC上,通过adb发送shell命令操作/sys/class/gpio以控制GPIO。

  在MSM8996的开发板上测试,运行结果如下图所示。

  技术分享

  从图中可以看出,两个GPIO的控制时间间隔相差约40ms,说明GPIO控制延时较为严重。  

#!/system/bin/shchmod 0666 /sys/class/gpio/exportchmod 0666 /sys/class/gpio/unexportecho 62 > /sys/class/gpio/exportecho 63 > /sys/class/gpio/exportchmod 0666 /sys/class/gpio/gpio62/directionchmod 0666 /sys/class/gpio/gpio63/directionchmod 0666 /sys/class/gpio/gpio62/valuechmod 0666 /sys/class/gpio/gpio63/valueecho out > /sys/class/gpio/gpio62/directionecho out > /sys/class/gpio/gpio63/directionecho 1 > /sys/class/gpio/gpio62/valueecho 1 > /sys/class/gpio/gpio63/valuewhile :doecho 1 > /sys/class/gpio/gpio62/valueecho 1 > /sys/class/gpio/gpio63/valueusleep 100000echo 0 > /sys/class/gpio/gpio62/valueecho 0 > /sys/class/gpio/gpio63/valueusleep 100000done

   该脚本运行在MSM8996开发板上,通过操作/sys/class/gpio以控制GPIO,执行结果如下图所示。

技术分享

技术分享

  从图中可以看出,两个GPIO的控制时间间隔相差约0.6ms,说明GPIO控制延时较小。 

   Android脚本文件可通过如下命令发送到开发板上,并修改其属性。 

pushd %~dp0adb 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

Android(Linux)控制GPIO的方法及实时性分析