1. RK3588 GPIO控制基础入门
刚拿到ArmSoM-W3开发板时,我最先折腾的就是GPIO控制。作为嵌入式开发的"Hello World",GPIO操作看似简单,但要在RK3588上玩转,还得先摸清它的脾气。这块芯片的GPIO控制器设计挺有意思,总共5个bank,每个bank管理32个IO,编号规则是控制器(bank)+端口(port)+引脚序号(pin)。比如GPIO0_C0,就是bank0的C端口第0个引脚。
实际开发中踩的第一个坑是复用功能配置。记得有次调试PWM,死活不出波形,后来发现是引脚复用没设对。RK3588的引脚可以复用成多种功能,比如GPIO0_C0这个脚,既能当普通GPIO用,也能配置为PWM1_M0、I2C2_SDA_M0等。在dts里配置时,rockchip,pins那行最后的数字就是功能选择,3表示GPIO模式,其他数字对应不同功能。
新手常问的问题是如何计算GPIO编号。sysfs接口用的编号公式是:(bank-1)32 + port8 + pin。比如GPIO1_D3对应的编号就是(1-1)32 + 38 + 3 = 27。不过现在更推荐用libgpiod库,它直接用bank和pin定位,省去计算的麻烦。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 设备树(DTS)配置详解
2.1 引脚定义规范
给自定义外设配GPIO时,得先在dts里声明。我习惯在arch/arm64/boot/dts/rockchip/rk3588s-armsom-w3.dts里添加节点,保持与板级dts隔离。一个完整的GPIO配置包含三要素:
- 引脚位置(如<0 RK_PC0 3>)
- 电气特性(如&pcfg_pull_none)
- 功能模式(最后那个数字)
最近做传感器项目时,发现上拉电阻配置很关键。测量按键信号时用&pcfg_pull_up,而I2C总线最好设成&pcfg_pull_none。曾有个诡异现象:I2C设备时好时坏,最后发现是GPIO误配了上拉。
2.2 典型配置实例
以控制LED为例,完整dts配置如下:
c复制&pinctrl {
leds {
led_work: led-work {
rockchip,pins = <0 RK_PB7 RK_FUNC_G
