用户空间控制GPIO的方式

    在sysfs中访问GPIO的方法


    (a)kernel/arch/arm/boot/dts/芯片厂名字(比如rockchip,imx)/xxxx-pinctrl.dtsi
        GPIOA :  0 -31
        GPIOB:  32-60
        GPIOC:  61-90
        GPIOD:  91-112
        GPIOE: : 113-132
        GPIOF:  133-164
        GPIOG  165:-175
        GPIOH: 176-187
        GPIOK: 188-206
        GPIOMA:  207-236
        GPSD0: 237-251
        GPSD1: 252-262
        GPSD2: 263-272

    (b).从板子中获取GPIO的信息:在板子的串口输入 ls /sys/class/gpio
    # ls -l sys/class/gpio/
    --w-------    1 root     root          4096 Apr 23 03:43 export
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip0 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip0
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip113 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip113
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip133 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip133
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip165 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip165
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip176 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip176
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip188 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip188
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip207 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip207
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip237 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip237
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip252 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip252
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip263 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip263
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip32 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip32
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip61 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip61
    lrwxrwxrwx    1 root     root             0 Apr 23 03:43 gpiochip91 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip91
    --w-------    1 root     root          4096 Apr 23 03:43 unexport
    
    可以看出以上结果从/sys/devices/platform/14200000.pinctrl/gpio链接过来的。0x14200000是GPIO的基地址。
    

/sys/devices/platform/14200000.pinctrl/gpio# ls -l
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip0
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip113
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip133
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip165
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip176
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip188
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip207
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip237
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip252
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip263
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip32
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip61
    drwxr-xr-x    3 root     root             0 Apr 23 03:43 gpiochip91

    在每个文件下面都有下面的内容:
    base       device     label      ngpio      power      subsystem  uevent
    
    /sys/devices/platform/14200000.pinctrl/gpio/gpiochip32# cat lable
    gpb
    /sys/devices/platform/14200000.pinctrl/gpio/gpiochip32# cat base
    32
    /sys/devices/platform/14200000.pinctrl/gpio/gpiochip32# cat ngpio
    29
    gpiochip32所在的GPIO组名为gpb。base的表明gpb这组GPIO的基准引脚号是32(从32号开始)。ngpio表示gpb这组GPIO的总数量为29.(这样,gpb的下一组GPIO基准引脚号就是61)
    通过上面的步骤,可以得到每一组GPIO包含所少个GPIO pin数目,对某一具体的GPIO也可以知道它的GPIO号码是多少。
    
    (c). 通过串口读取GPIO的状态:
    读取GPIO91的状态:
    #echo 91 > /sys/class/gpio/export   //向export文件写入GPIO编号,暴露该GPIO的操作接口到用户空间
    # echo in > /sys/class/gpio/gpio91/direction //设置方向
    # cat /sys/class/gpio/gpio91/value //查看GPIO的值
    0

    #echo "rising" > /sys/class/gpio/gpio91/edge 或者 echo "falling" > /sys/class/gpio/gpio77/edge  //当GPIO被设置为输入时,可以配置中断的触发方式,rising或falling edge

    echo 91 > /sys/class/gpio/unexport 
    
    (d). 假设引脚号为191,可以用如下方法设置其为输出、值为1:
    #echo 191 > /sys/class/gpio/export
    #echo out > /sys/class/gpio/gpio191/direction
    #echo 1 > /sys/class/gpio/gpio191/value
    #echo 191 > /sys/class/gpio/unexport

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值