环境:RK3399-JD4 ubuntu18.04
SDK提供了一个io工具可以很方便的控制所有gpio口,但是当我想控制gpio3_d时却发现控制不了。DR,DDR寄存器不管怎么写都没有变化
root@firefly:/usr/bin# io -4 -w 0xff788000 0xffffffff
root@firefly:/usr/bin# io -4 -r 0xff788000
ff788000: 00008400
root@firefly:/usr/bin# io -4 -w 0xff788000 0x0
root@firefly:/usr/bin# io -4 -r 0xff788000
ff788000: 00008400
root@firefly:/usr/bin# io -4 -r 0xff788004
ff788004: 00008400
iomux对应的寄存器0xff77e01c可以写成功,我把gpio3_d的8个gpio都设成了gpio模式。(要写这个寄存器必须要把高16bit的对应位置1才能生效。)
root@firefly:/usr/bin# io -4 -r 0xff77e01c
ff77e01c: 00005555
root@firefly:/usr/bin# io -4 -w 0xff77e01c 0xffff0000
root@firefly:/usr/bin# io -4 -r 0xff77e01c
ff77e01c: 00000000
看wiki这个io操作也没什么特别的啊,read是没问题的,因为我用/sys/class/gpio节点操作某个gpio是可以的,设成输出之后通过io读发现确实设成了输出。
于是研究了一下io的实现,其实也没什么,就是通过dev