Rockchip 平台通过命令控制gpio的方法

Rockchip 平台通过命令控制gpio的方法

Rockchip平台的GPIO通常有5组:GPIO0-GPIO4(不同的芯片会不一样),每组有32个GPIO。
每组GPIO又分为A/B/C/D4个小组,每个小组8个GPIO。所以GPIO的命可以从:GPIO0A0到GPIO4D8。

在开发调试的时候可以通过命令行直接操作GPIO输出高低电平,具体操作命令如下:
以GPIO2C4 为例说明:

  1. GPIO2C4 转换成具体的GPIO值:2x32+8x2+4=84

  2. 生成节点/sys/class/gpio/gpio84

echo 84 > /sys/class/gpio/export 
  1. 设置gpio为输出口
echo out > /sys/class/gpio/gpio84/director

这个操作自动会切换iomux为gpio状态

  1. 控制输出高电平
echo 1 > /sys/class/gpio/gpio84/value
  1. 控制输出低电平
echo 0 > /sys/class/gpio/gpio84/value

查看状态GPIO的状态

cat /d/gpio 
### GPIO 控制模块源码解析 #### GPIO 子系统的初始化过程 在 Linux 内核中,`gpiolib` 是用于管理通用输入输出 (GPIO) 引脚的核心框架。当系统启动时,GPIO 子系统会被初始化,这涉及到多个阶段的工作[^1]。 ```c static int __init gpiolib_init(void) { int ret; /* 注册字符设备 */ ret = register_chrdev(GPIO_MAJOR, "gpio", &gpio_fops); if (ret < 0) { pr_err("Unable to register gpio char device\n"); return ret; } /* 创建 /sys/class/gpio */ gpio_class = class_create(THIS_MODULE, "gpio"); if (IS_ERR(gpio_class)) { unregister_chrdev(GPIO_MAJOR, "gpio"); return PTR_ERR(gpio_class); } return 0; } ``` 这段代码展示了 `gpiolib` 初始化函数的一部分,其中包含了注册字符设备以及创建 sysfs 接口的操作。 #### 设备树中的 GPIO 节点定义 对于现代 SoC 来说,通常会在设备树中定义具体的 GPIO 配置信息。下面是一个典型的例子: ```dts gpio0: gpio@ff040000 { compatible = "rockchip,gpio-bank"; reg = <0x0 0xff040000 0x0 0x100>; interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>; clocks = <&pmucru PCLK_GPIO0_PMU>; gpio-controller; #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; }; ``` 此片段描述了一个 Rockchip 平台上的 GPIO 控制器实例及其属性设置[^3]。 #### 用户空间访问 GPIO 的方式 为了允许应用程序直接操控硬件资源而不必深入理解底层细节,Linux 提供了一套标准 API 给用户程序调用。这些接口位于 `/sys/class/gpio/` 下,并支持基本的读写操作来改变引脚状态或获取当前值[^2]。 例如要导出某个编号为 N 的 GPIO 到用户态以便进一步控制,则可以通过向文件 `/sys/class/gpio/export` 中写入该数值实现;而取消导出则相反地往对应的 unexport 文件里写同样的数即可。 ```bash echo N > /sys/class/gpio/export # 导出第N号GPIO给用户空间 echo out > /sys/class/gpio/gpioN/direction # 设置方向为输出模式 echo 1 > /sys/class/gpio/gpioN/value # 将其设为高电平 ``` 以上命令序列实现了对指定 GPIO 进行简单配置并驱动它进入特定逻辑电平的过程。 #### GPIO 操作的具体流程 针对具体应用场合下如何利用上述机制完成实际任务,一般遵循如下几个主要步骤:使能相应的外设电源域 -> 获取目标管脚的功能映射关系 -> 根据需求设定工作模式(如输入还是输出)-> 执行高低电平切换动作。 通过这种方式不仅可以灵活调整单片机上各个 I/O 口的行为特性,而且也方便与其他外部电路建立联系从而构建复杂控制系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loitawu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值