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

简介:   Linux下控制GPIO的方法有N种,详细请参考《RPi GPIO Code Samples》,文中用十多种语言演示了如何控制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

目录
相关文章
|
3天前
|
Linux Python
在Linux下升级到Python3的两种方法
在Linux下升级到Python3的两种方法
16 0
|
4天前
|
Java Android开发 iOS开发
深入探讨移动操作系统的性能优化:安卓与iOS的对比分析
在现代移动设备中,操作系统的性能优化至关重要。本文从系统架构、内存管理、电池续航和应用程序运行效率等多个维度,深入探讨了安卓(Android)和iOS两大主流移动操作系统的优化策略及其实际效果,旨在为开发者和用户提供更清晰的了解和选择依据。
12 0
|
1天前
|
安全 Android开发 iOS开发
探索Android与iOS开发的差异:平台特性与用户体验的对比分析
在移动应用开发的广阔天地中,Android和iOS两大阵营各据一方。本文将深入探讨这两个操作系统在开发环境、编程语言、用户界面设计及市场分布等方面的主要区别。通过比较分析,我们将揭示各自平台的特有优势,并讨论如何根据目标受众和业务需求选择适合的开发平台。
|
4天前
|
搜索推荐 安全 Android开发
安卓与iOS操作系统的对比分析
在移动设备市场上,安卓和iOS操作系统一直是主要竞争对手。本文将从用户界面、应用生态系统、定制化程度和安全性等方面对安卓和iOS进行对比分析,并探讨两者在不同场景下的适用性。
|
4天前
|
关系型数据库 Linux 数据处理
深入了解Linux命令gprof:数据处理和分析利器
gprof是Linux下的一款命令行工具,用于分析程序性能,找出代码瓶颈。它通过分析函数调用和执行时间,提供函数级别的性能报告和图形化展示。使用gprof需在编译时添加`-pg`选项,然后运行程序并用gprof生成报告。注意覆盖所有执行路径,并可与其他性能工具结合使用,以优化代码性能。
|
4天前
|
Linux 编译器 C语言
编译Linux内核:基础、重要性和交叉编译方法
Linux内核作为操作系统的心脏,负责管理计算机的硬件资源,同时也是运行所有其他程序的基础。理解如何编译Linux内核对于系统管理员、开发者乃至高级用户来说都是一项极其宝贵的技能。本文将介绍编译Linux内核的基本知识、编译的重要性、具体步骤以及交叉编译的概念。
13 0
|
9天前
|
Linux Python
在 Linux 中查看目录文件数的方法
【6月更文挑战第7天】在 Linux 中查看目录文件数的方法包括:使用 `ls` 命令结合 `wc -l`,`find` 命令,`tree` 命令,以及编程方式(如 Python)。`ls` 和 `find` 命令通过管道传递给 `wc -l` 统计行数,而 `tree` 命令提供树状视图并显示文件数。编程方式则允许自定义实现,例如 Python 中的 `os.walk()`。注意权限、效率和场景适用性,选择合适的方法以提高 Linux 操作效率。
28 3
|
9天前
|
监控 Linux Perl
在 Linux 中显示文件指定行内容的方法和技巧
【6月更文挑战第7天】在 Linux 中查看文本文件指定行,可使用 head/tail 显示文件头/尾部行,sed 的行号指定功能或 awk 进行处理。在代码审查、日志分析和文本处理等场景下,这些命令能提升效率。注意文件编码、行号准确性,并组合使用命令以实现更多功能。通过练习,能更好地掌握这些工具。
34 0
|
10天前
|
安全 Android开发 iOS开发
安卓与iOS操作系统的比较分析
【6月更文挑战第5天】本文将深入探讨安卓和iOS两大主流操作系统的特点、优势和劣势。通过对比分析,我们将揭示这两个系统在性能、安全性、用户体验等方面的差异,帮助用户更好地了解这两个系统,从而做出更明智的选择。
|
11天前
|
Ubuntu Shell Linux
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程