linux用户空间如何控制gpio?

linux用户空间如何控制gpio?_mob604756e8ada8的技术博客_51CTO博客

1. 架构

2. 有两种操作方法

2.1 第一种: sysfs接口(旧, 已废弃)

2.2 第二种: 字符设备接口(新)

3. 如何使用sysfs接口控制gpio?

3.1 确定要使用的gpio号(怎么知道gpio号呀?)

3.2 将gpio号写入文件/sys/class/gpio/export中

# echo 333 > /sys/class/gpio/export
3.3 将gpio配置为输入还是输出

配置为输出示例如下:

# echo out > /sys/class/gpio/gpio333 direction

3.4 如果3.3设置为输入,那么读取gpio的值
# cat /sys/class/gpio/gpio333/value

3.5 如果3.3设置为输出, 那么向gpio写入值

# echo 1 > /sys/class/gpio/gpio333/value

4. 如何使用字符设备接口控制gpio?

4.1 有两种方法

4.1.1 使用libgpiod编程

4.1.2 使用命令行工具

4.2 使用libgpiod编程

示例如下:

void main() {
    struct gpiod_chip *chip;
    struct gpiod_line *line;
    int req, value;

    chip = gpiod_chip_open("/dev/gpiochip0");
    if (!chip)
        return -1;

    line = gpiod_chip_get_line(chip, 3);
    if (!line) {
        gpiod_chip_close(chip);
        return -1;
    }

    req = gpiod_line_request_input(line, "gpio_state");
    if (req) {
        gpiod_chip_close(chip);
        return -1;
    }

    value = gpiod_line_get_value(line);

    printf("GPIO value is: %d\n", value);

    gpiod_chip_close(chip);
}
 

4.3 使用命令行工具(gpiod-tools)

4.3.1 gpiodetect: 列出所有的gpio

# gpiodetect
gpiochip0 [209c000.gpio] (32 lines)
gpiochip1 [20a0000.gpio] (32 lines)
gpiochip2 [20a4000.gpio] (32 lines)
gpiochip3 [20a8000.gpio] (32 lines)
gpiochip4 [20ac000.gpio] (32 lines)
gpiochip5 [20b0000.gpio] (32 lines)
gpiochip6 [20b4000.gpio] (32 lines)
gpiochip7 [mcp23s08.0] (8 lines)
-----------------------------------
 

4.3.2 gpioinfo: 列出某个gpio控制器的情况

# gpioinfo 0
gpiochip0 - 32 lines:
        line   0:      unnamed       unused   input  active-high
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3:      unnamed        "scl"  output  active-high [used open-drain]
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed        "sda"  output  active-high [used open-drain]
        line   7:      unnamed "Push Button"  input  active-low  [used]
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed          "?"  output  active-high [used]
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high、

4.3.3 gpioset: 设置gpio

设置gpio控制器0的第9个gpio输出0 (注意在4.3.2中这个gpio是设置为输出的)

# gpioset 0 9=0
1.


4.3.4 gpioget: 读取gpio

# gpioget 0 9
1.


4.3.5 gpiomon: 监控gpio的状态

# gpiomon 0 9

linux用户空间如何控制gpio?_mob604756e8ada8的技术博客_51CTO博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值