Pinctrl
芯片名称与内核版本
芯片名称 | 内核版本 |
---|---|
RK3568/RK3399/RK3368/RK3288/PX30/RK3128/RK3126/RV1126 | Linux-4.19 |
RK3588/RV1106 | Linux-5.10 |
前言
概述
本文介绍 Rockchip PIN-CTRL 驱动及 DTS 使用方法。
读者对象
本文档主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
1. 引脚命名规则
Rockchip Pin 的 ID 按照 控制器(bank)+端口(port)+索引序号(pin) 组成。
1.1 GPIO(通用输入输出)
控制器和 GPIO 控制器数量一致,
端口固定为 A、B、C 和 D,
索引序号固定为 0、1、2、3、4、5、6、7。
例如 RK3588,从 RK3588-TRM.pdf 的 Chapter 20 GPIO 章节可以看到
There are five GPIOs (GPIO0 in PD_PMU,GPIO1/GPIO2/GPIO3/GPIO4 in PD_BUS)
有 5 个 GPIO 控制器,每个控制器可以控制 32 个 IO,作为 GPIO 功能时,端口行为由 GPIO 控制器寄存器配置。
1.2 IOMUX(输入输出复用)
Rockchip Pin 可以复用成多种功能,同一个控制器如果存在多种复用引脚,一般叫做 m0、m1、m2 等等。例如 I2C 控制器有两组复用引脚,分别是 2cm0、i2cm1。
引脚复用配置的寄存器是在 GRF/PMUGRF(RK3588 叫做 IOC)。
例如 RK3588 BUS_IOC_GPIO1B_IOMUX_SEL_H Address: Operational Base + offset (0x002C):
- gpio1b7_sel
- 4'h0: GPIO
- 4'h2: MIPI_CAMERA2_CLK_M0
- 4'h3: SPDIF1_TX_M0
- 4'h4: PCIE30X2_PERSTN_M3
- 4'h5: HDMI_RX_CEC_M2
- 4'h6: SATA2_ACT_LED_M1
- 4'h9: I2C5_SDA_M3
- 4'ha: UART1_RX_M1
- 4'hb: PWM13_M2
如下是 RK3588 I2C5 的 IOMUX:
多通路复用支持硬件设计更为灵活,当外设工作电压是 1.8V 或 3.3V 时,可以选择不同电压域 VCCIO 的 引脚。
注意:多通路复用的寄存器配置,对 TX 类的引脚没有用,对 RX 类的引脚起作用。
1.3 PULL(端口上下拉)
Rockchip IO PAD 的 bias 一般支持 3 种模式:
- bias-disable
- bias-pull-up
- bias-pull-down
上下拉配置是作用于 IO PAD,配置对 GPIO/IOMUX 都起作用。
1.4 DRIVE-STRENGTH(端口驱动强度)
Rockchip IO PAD 的驱动强度,根据不同工艺,支持不同强度配置。RK3399 之前的芯片,驱动强度配置按 mA 为单位配置;RK1808 之后芯片,一般按照 Level 为单位,档位的数值即为寄存器配置值。
例如 RK3588 TRM 中 GPIO0_C7 的驱动强度等级如下:
- gpio0c7_ds
- GPIO0C7 DS control Driver Strength Selection
- 3'b000: 100ohm
- 3'b100: 66ohm
- 3'b010: 50ohm
- 3'b110: 40ohm
- 3'b001: 33ohm
- 3'b101: 25ohm
- GPIO0C7 DS control Driver Strength Selection
软件驱动依然按照 Level 来处理,即上述寄存器描述对应:
- 3'b000: Level0
- 3'b100: Level4
- 3'b010: Level2
- 3'b110: Level6
- 3'b001: Level1
- 3'b101: Level5
DTS 中 drive-strength=<5>;
表示配置为 Level5,即寄存器写 3'b101。