一、概述
通用输入输出端口(General-purpose input/output,GPIO),可以通过软件来控制其输入和输出。通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-高/低电平。用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等,GPIO口的使用非常广泛。
对于一个IO Port来讲,有两方面需要配置,一是本身的功能设定,二是如果作为GPIO的话输入输出的设定。前者由Pin Controller控制,后者由GPIO Controller控制。GPIO Controller控制包括:1、配置GPIO的方向;2、如果是输出,可以配置high level或者low level;3、如果是输入,可以获取GPIO引脚上的电平状态。
本文主要描述GPIO接口输入输出的测试方案。
二、环境信息
linux系统、串口线、硬件设备(如监控摄像机)
三、测试方案
测试方案一:申请创建新的GPIO口:设置申请的GPIO口为输入/输出,获取/设置gpio口的电平状态,确定查看/设置电平状态是否生效。
测试方案二:使用已有GPIO口:通过系统驱动调试命令,查看/设置GPIO引脚的电平状态,确定查看/设置电平状态是否生效。
注意:输入GPIO引脚仅可以获取电平状态,输出GPIO引脚可以获取/设置电平状态。
四、操作步骤及预期结果
测试方案一:
操作步骤:
1、在串口或ssh连接下打开打印:cat /proc/kmsg &
2、查看所有GPIO接口的状态:cat /sys/kernel/debug/gpio(in代表输入、out代表输出、hi代表高电平、lo代表低电平)
3、申请gpio口:echo gpio口序号 > /sys/class/gpio/export(不要与之前已有GPIO口序号重复)【GPIO口文件在/sys/class/gpio目录下。】
例:echo 93 > /sys/class/gpio/export,系统会在/sys/class/gpio/目录下生成gpio93文件夹,此文件夹出现代表gpio口申请成功。
4、控制gpio93口为输入方向:echo in > /sys/class/gpio/gpio93/direction
控制为输入方向后查看方向是否正确:cat /sys/kernel/debug/gpio|grep 93
获取gpio输入引脚的电平状态:cat /sys/class/gpio/gpio口序号/value
5、控制gpio93口为输出方向:echo out > /sys/class/gpio/gpio93/direction
控制为输入方向后查看方向是否正确:cat /sys/kernel/debug/gpio|grep 93
设置gpio输出引脚的电平状态:echo 0/1 > /sys/class/gpio/gpio口序号/value【0为低电平、1为高电平】。
例:设置gpio93口为低电平状态:echo 0 > /sys/class/gpio/gpio93/value(注:需先设置gpio23为输出方向)
例:设置gpio93口为高电平状态echo 1 > /sys/class/gpio/gpio93/value(注:需先设置gpio23为输出方向)
设置后查看电平状态是否设置成功:cat /sys/class/gpio/gpio口序号/value
预期结果:
1、控制gpio93口为输入方向时,获取gpio输入引脚的电平状态成功
2、控制gpio93口为输出方向时:
设置gpio输出引脚为低电平状态成功
设置gpio输出引脚为高电平状态成功
测试方案二:
操作步骤:
1、在串口或10023端口下打开打印:cat /proc/kmsg &
2、查看设备GPIO接口的控制功能node号:cat /proc/sys/klsp/klsp_debug(各个设备会有差异,需要先查看)
3、查看所有GPIO接口的状态:cat /sys/kernel/debug/gpio(in代表输入、out代表输出、hi代表高电平、lo代表低电平)
4、设置GPIO输出引脚的电平状态:echo node号#w 0 [pin] [val] > /proc/sys/klsp/klsp_debug(其中pin指的是GPIO的pin_id即GPIO引脚序号,val是指设置输出电平【0为低电平、1为高电平】。
例:输出GPIOG引脚GPIO-86本身是低电平,将输出电平设置为高电平:echo 6#w 0 86 1 > /proc/sys/klsp/klsp_debug。设置成功后获取GPIO-86的状态:echo 6#r 0 86
5、对比获取GPIO输入引脚的电平状态:echo node#r 0 [pin] > /proc/sys/klsp/klsp_debug(其中pin指的是GPIO的pin_id即GPIO引脚序号)
例:获取输出引脚GPIO-81的电平状态: echo 6#r 0 81 > /proc/sys/klsp/klsp_debug 对比 cat /sys/kernel/debug/gpio|grep 81
预期结果:
1、设置输出引脚GPIO-86输出电平为高电平成功
2、获取输入引脚GPIO-81的电平状态成功,对比一致