linux下imx6ul处理器用户空间操作GPIO方法

linux下imx6ul处理器用户空间操作GPIO方法


一、在用户空间配置并操作GPIO的必要性

    有时,为了快速方便的测试IO口,我们可以将GPIO暴露给用户空间,直接在用户空间配置并操作GPIO,前提是没有驱动使用这个GPIO。

二、IMX6UL处理器GPIO编号算法

GPIO计算公式:
        id = (m - 1) * 32 + n
例如:
        有gpio3.13,则m = 3,n = 13,则id = (3 - 1) * 32 + 13 = 77
这是IMX6UL GPIO的编号算法,理论上所有IMX6处理其都是这样的编号算法。

三、用户空间配置操作GPIO方法

1. 使能linux内核选项CONFIG_GPIO_SYSFS
	CONFIG_GPIO_SYSFS=y
2. 测试方法
2.1 关注/sys/class/gpio下的文件
	--export 使能gpio配置
	--unexport 取消gpio配置
	--gpioX 指代具体的gpio引脚
	--gpio_chipY 指代gpio控制器
2.2 申请将某个gpio(假设申请gpio3的第13个gpio)的控制权导出到用户空间,按照前面的算法,gpio3.13的id为77。
echo 77 > /sys/class/gpio/export

此操作会生成目录/sys/class/gpio/gpio77, 指代具体的gpio引脚gpio77目录下有以下文件: 
   direction: 表示gpio端口的方向,读取结果是in或out。该文件也可以写,写入out 时该gpio设为输出同时电平默认为低。写入low或high则不仅可以设置为输出还可以设置输出的电平。
    value: 表示gpio引脚的电平,0(低电平)1(高电平),如果gpio被配置为输出,这个值是可写的,记住任何非零的值都将输出高电平。
    edge: 表示中断的触发方式,edge文件有如下四个值:none, rising, falling,both。
      none表示引脚为输入,不是中断引脚
      rising表示引脚为中断输入,上升沿触发
      falling表示引脚为中断输入,下降沿触发
      both表示引脚为中断输入,边沿触发
      这个文件节点只有在引脚被配置为输入引脚的时候才存在。 当值是none时可以通过如下方法将变为中断引脚, echo “both” > edge;对于是both,falling还是rising依赖具体硬件的中断的触发方式。此方法即用户态gpio转换为中断引脚的方式
    ***active_low:***目前还不知其功能。

2.3 /sys/class/gpio/gpiochipN

   gpiochipN表示的就是一个gpio_chip,用来管理和控制一组gpio端口的控制器,该目录下存在以下属性文件:
   base: 和N相同,表示控制器管理的小的端口编号。
   lable: 诊断使用的标志(并不总是唯一的)
   ngpio: 表示控制器管理的gpio端口数量

你可能感兴趣的:(Linux内核驱动)