RK3399用户空间IO控制

1.准备
官方文档:Documentation/gpio.txt中“Sysfs Interface for Userspace (OPTIONAL)”部分
代码路径:drivers/gpio/gpiolib.c
sysfs路径:/sys/class/gpio
2.接口介绍:

GPIO sysfs路径下有两个使用的接口:export和unexport,他们都是只写的:
root@firefly:~# ll /sys/class/gpio/
...
--w------- 1 root root 4096 Jan 1 2011 export
--w------- 1 root root 4096 Jan 1 2011 unexport
...
expo

rt:向内核申请GPIO,写入对应的GPIO值直接申请,比如申请控制GPIO7A3,则使用命令:

echo 227 > /sys/class/gpio/export

写入后,可以看到已经生成节点:

/sys/class/gpio/gpio227/

如果申请不到,极大可能是已经申请过该GPIO,包括内核申请或者使用上述方法申请过,报的错误为:
-bash: echo: write error: Device or resource busy
GPIO值在RK3288中的计算方法为:bank×32+pin,如:
GPIO7A3: 7×32+3=227
GPIO0B5: 0×32+13=13
unexport:释放相应的GPIO,如:

echo 227 > /sys/class/gpio/unexport

相应的节点会被删掉。
下面看看相应gpio节点下面的接口,比如GPIO7A3:

GPIO SYSFSroot@firefly:/mnt/py/fireflyP# ll /sys/class/gpio/gpio227/
...
-rw-r--r-- 1 root root 4096 Aug 8 06:36 active_low
-rw-r--r-- 1 root root 4096 Aug 8 06:36 direction
-rw-r--r-- 1 root root 4096 Aug 8 06:36 edge
-rw-r--r-- 1 root root 4096 Aug 8 06:36 value
...

direction: 参数为“out”(输出)和“in”(输入),可读可写
value: 参数为“0”(低电平)和“1”(高电平),可读可写
edge:可以监听对应引脚的事件,需要把direction设置为输入。
参数为”none”(无中断触发), “rising”(上升沿触发), “falling”(下降沿触发), “both”(上升、下降都沿
触发)。
用户层可以使用poll,设置events为POLLPRI | POLLERR等待事件触发,当对应的模式触发后,会返回事
件的消息,此时需要读取value值,以表示改触发已经处理,否则会一直poll到原事件。
active_low:此值可以反转value中的值

猜你喜欢

转载自blog.csdn.net/zhuyong006/article/details/80907718