GPIO API

Chinese, Simplified

1.      概述

原生Android系统并没有提供接口函数访问GPIO,为了调试方便,用户开发app更简单,AmLink平台增加了java层的GPIO API。这里强调下,软件的gpio编号和模块引脚编号是不一致的,请参考第6点说明。

2.      GPIO API

public class GPIO_Pin

GPIO API都放在GPIO_Pin类里面,该类提供的方法如下:

public GPIO_Pin(int pin,boolean forceMap)

的构造函数,用于初始化gpiopin参数代表模块硬件引脚编号, forceMap 一般请填true。

public void setModeOUTPUT()

该函数用来设置gpio工作模式为 输出模式

public void setModeINPUT()

该函数用来设置gpio工作模式为 输入模式

public void setHIGH()

该函数gpio设为输出高。

public void setLOW()

该函数gpio设为输出低。

public int getInputVal()

该函数获取gpio输入值,“1”表示高电平,“0”表示低电平。


public int setToGpioMode()

模块很多引脚是复用的,有些引脚默认是设为gpio模式,有些默认是其它模式如串口等。该函数把引脚设为gpio mode


public int setMuxMode(String mode)

该函数把引脚设为期望的复用模式,mode如取“0”,等同于上面的setToGpioMode()。



public void close()

释放对该gpio的控制。否则会影响其它应用或驱动对该gpio的操作。



3. jar 库文件

API库文件地址如下:

tml_lib.zip

(zip包里的aar和jar功能相同,用一个就行)

4. 测试APK

测试apk地址如下:

gpio.apk.zip



模块引脚137为例,在EVB板上,该GPIO是控制闪光灯的,运行Demo App,在GPIO Num下面输入137,点击GPIO OUT HIGH按钮,该gpio会输出高,闪光灯亮,点击GPIO OUT LOW按钮,该GPIO输出低,灯灭。

5.      参考代码

// GPIO_Pin class is belong to package com.temolin.hardware
import com.temolin.hardware.GPIO_Pin;

private void GPIO_Test() {
    int value;
    //for output; 0 for input 
    int testCase=1; 
    GPIO_Pin pin = new GPIO_Pin(137,true);
    
    //该函数不建议频繁调用。如果已经是gpio mode就不需要调用,调试阶段请加上这句。
    pin.setToGpioMode();
 
    if(testCase){
        //set output mode for gpio
        if(!pin.getPinMode().equals("out")){
            pin.setModeOUTPUT();        
        }
 
        //output high level
        pin.setHIGH();
 
        Thread.sleep(5000);
 
        //output low level
        pin.setLOW();
 
        Thread.sleep(5000);
    }else{
        //set input mode for gpio
        pin.setModeINPUT();
 
        //get input value from gpio
        value = pin.getInputVal();
 
        Log.d(TAG, “GPIO input value is: " + value);
   }  
   pin.close();
}


6. m100模块引脚对应的GPIO编号及:

m100模块引脚编号请参考下面附件(第Q列和第S列):

m100_evb_Customer_GPIO_Formal_Application_Spec_v3.xlsx


表中第S列代表模块的硬件引脚编号,第Q列代表对应的软件gpio编号(老的api需要用,现在请忽略,直接用模块的硬件引脚编号即可)

*如果引脚用作普通的gpio,请参考上述文档备注栏,优先使用推荐的引脚


7. GPIO 模式切换

gpio是复用引脚,即可工作于其它非gpio模式,每个gpio可用的模式也请上述附件Aux Func栏:

Aux Func.0即mode 0一般是gpio模式.

引脚模式一般是初始化的时候设定的,如需修改请告知我们,后续我们会提供工具让用户自行修改。


下面adb命令可查看当前gpio的工作状态:


adb shell "cat /sys/devices/virtual/misc/mtgpio/pin"            // android 6

adb shell "cat /sys/devices/platform/1000b000.pinctrl/mt_gpio"        //android 9

8. EVB板上可用GPIO如下图(有GPIO标示的引脚都可用于GPIO)

*下图只适用于evb2, 请注意*

Camera_Header_EVBV3.pngGPIO_Header_EVBV3.png


LCM_Header.png


文档中心

以上内容是否对您有帮助?