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 1 goto config
timeout /T 10

:config
@echo on
adb shell chmod 0666 /sys/class/gpio/export
adb shell chmod 0666 /sys/class/gpio/unexport

adb shell echo 62 ">" /sys/class/gpio/export
adb shell echo 63 ">" /sys/class/gpio/export

adb shell chmod 0666 /sys/class/gpio/gpio62/direction
adb shell chmod 0666 /sys/class/gpio/gpio63/direction
adb shell chmod 0666 /sys/class/gpio/gpio62/value
adb shell chmod 0666 /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 1 ">" /sys/class/gpio/gpio62/value
adb shell echo 1 ">" /sys/class/gpio/gpio63/value

@echo off
:top
adb shell echo 1 ">" /sys/class/gpio/gpio62/value
adb shell echo 1 ">" /sys/class/gpio/gpio63/value
rem @timeout /T 1
for /l %%i in (1,1,768) do echo %%i>nul
rem ping 0.0.0.1 -n 1 -w 500>nul
adb shell echo 0 ">" /sys/class/gpio/gpio62/value
adb shell echo 0 ">" /sys/class/gpio/gpio63/value
rem @timeout /T 1
for /l %%i in (1,1,768) do echo %%i>nul
rem ping 0.0.0.1 -n 1 -w 500>nul
goto top

pause.

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

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

  

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

#!/system/bin/sh
chmod 0666 /sys/class/gpio/export
chmod 0666 /sys/class/gpio/unexport

echo 62 > /sys/class/gpio/export
echo 63 > /sys/class/gpio/export

chmod 0666 /sys/class/gpio/gpio62/direction
chmod 0666 /sys/class/gpio/gpio63/direction
chmod 0666 /sys/class/gpio/gpio62/value
chmod 0666 /sys/class/gpio/gpio63/value

echo out > /sys/class/gpio/gpio62/direction
echo out > /sys/class/gpio/gpio63/direction
echo 1 > /sys/class/gpio/gpio62/value
echo 1 > /sys/class/gpio/gpio63/value

while :
do
echo 1 > /sys/class/gpio/gpio62/value
echo 1 > /sys/class/gpio/gpio63/value
usleep 100000
echo 0 > /sys/class/gpio/gpio62/value
echo 0 > /sys/class/gpio/gpio63/value
usleep 100000
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

时间: 2024-11-09 00:49:49

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

Android(Linux)控制GPIO方法二

前文<Android(Linux)控制GPIO的方法及实时性分析>主要使用Linux shell命令控制GPIO,该方法可在调试过程中快速确定GPIO硬件是否有问题,即对应的GPIO是否受控.实际项目中,一般需要对GPIO做特殊控制,如车载导航系统开机就给GPS模块上电,或在daemon程序中控制GPIO给一个脉冲以Reset蓝牙模块等,就不便用shell 命令来控制,而需要另想办法. http://elinux.org/RPi_GPIO_Code_Samples#sysfs介绍了如何在C代码

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

前面两篇分别介绍了通过脚本和C代码读写/sys/class/gpio以控制GPIO.实际项目调试时经常还需要在Java代码里控制GPIO,其实现与C代码类似,唯一不同是Android权限.本文重点介绍Android6.0权限的配置并对在Java层控制GPIO的耗时做简单分析. 以高通平台为例,权限配置主要修改HLOS/device/qcom/sepolicy/common目录下的file.te.file_contexts和system_app.te三个文件. file.te修改如下, # GPI

Windows Embedded CE 6.0实时性分析

     Windows Embedded CE 6.0是微软公司目前最新的嵌入式操作系统之一,支持四种体系结构的MCU(ARM.MIPS.SH4和x86).在众多的嵌入式操作系统中,它以自己独特的优势脱颖而出,在整个嵌入式操作系统的市场份额中占有很大比重.相比其他嵌入式操作系统,Windows Embedded CE 6.0主要有以下特点: 图形用户界面,与桌面操作系统的图形用户界面基本一致,便于用户接受: 网络连接的支持,包括PAN.LAN.WAN.BlueTooth和WIFI: 多媒体的支

arm-Linux下如何应用程序的实时性?

问题描述 Linux下如何应用程序的实时性? 现在正在做一个嵌入式软件,主要是激光雷达数据采集和实时处理,鉴于接口是USB的,所以我选择在ARM平台移植了Linux,在系统级来做,但是貌似实时性不是很强,不知到有什么办法尽量让应用程序跑的快一些? 解决方案 实时性的话,感觉很模糊,你既可以从硬件上来做,也可以考虑在软件上. 解决方案二: 数据采集和数据处理进行分离另外要看你是什么类型的usb设备,获取数据的性能如何 解决方案三: 开启高精度时钟试试看吧

linux驱动-linux下写驱动控制gpio时的两种方法区别

问题描述 linux下写驱动控制gpio时的两种方法区别 linux下写驱动控制gpio时,见过两种方法: 用request_mem_region函数和ioremap等得到控制寄存器的地址,然后用iowrite32函数控制该gpio 用gpio_request 和 gpio_set_value函数来控制gpio引脚 请问:这两种方法有什么区别,分别适用什么场合? 解决方案 http://blog.csdn.net/mirkerson/article/details/8464290http://b

android同时控制EditText输入字符个数和禁止特殊字符输入的方法_Android

本文实例讲述了android同时控制EditText输入字符个数和禁止特殊字符输入的方法.分享给大家供大家参考.具体分析如下: 这里总结了三种方法如下: 方法一: 1. 引用两个命名空间: import android.text.TextWatcher; import android.text.Editable; 用于禁止特殊字符输入控制 定义EditText mEditText对象 2. 控制字符长度: 通过InputFilter过滤来实现字符长度控制,这样的好处是可以实现动态长度控制,而不是

Android(Linux)实时监控串口数据

    之前在做WinCE车载方案时,曾做过一个小工具TraceMonitor,用于显示WinCE系统上应用程序的调试信息,特别是在实车调试时,用于监控和显示CAN盒与主机之间的串口数据.因为需要抢占市场先机,经常在新车上市前,就得配合CAN解码盒厂商同步调试车机端软件.这时候,TraceMonitor就可能派上大用场.遇到说不清是哪一边的问题时,抓数据一看,就清清楚楚了.有时终端客户的机器出现了原车功能异常的问题,也可以直接运行该工具,实时抓取串口数据提供给我们以分析问题原因.不过该工具需要业

Android控制闪光灯的方法(打开与关闭)

本文实例讲述了Android控制闪光灯的方法.分享给大家供大家参考,具体如下: 最近想做一个手电筒,在网上搜到一点资料 首先闪光灯可以用android.hardware.camera来控制 1. 在Manifest.xml文件中添加权限复制代码 代码如下:<uses-permission android:name="android.permission.CAMERA" /> 2. 打开闪光灯 try{ m_Camera = Camera.open(); Camera.Par

Android开发控制ScrollView滑动速度的方法

本文实例讲述了Android开发控制ScrollView滑动速度的方法.分享给大家供大家参考,具体如下: 前言 由于各个Android平板触摸屏的材质不一样,滑动效果会有一些区别,有的比较灵敏,有的比较迟钝,这里就遇到了要求控制滑动速度的需求... 正文 翻阅查找ScrollView的文档并搜索了一下没有发现直接设置的属性和方法,这里通过继承来达到这一目的. /** * 快/慢滑动ScrollView * @author 农民伯伯 * */ public class SlowScrollView