1. GPIO 基础概念
GPIO(General Purpose Input/Output,通用输入输出)是嵌入式系统中最基础、最常用的外设接口。理解 GPIO 的引脚功能、电气特性、上下拉电阻和驱动能力,是后续进行 pinctrl 配置和中断调试的前提。本章从硬件底层出发,系统梳理这些核心概念。
1.1 GPIO 引脚功能
GPIO 引脚通常具有多种可配置的功能模式,通过内部多路复用器(MUX)选择。常见功能包括:
- 数字输入:读取引脚上的高/低电平状态。
- 数字输出:驱动引脚输出高/低电平。
- 复用功能(Alternate Function, AF):引脚被分配给片内外设(如 UART、I2C、SPI、PWM、ADC 等)。
- 中断触发:配置为边沿触发或电平触发的中断源。
- 模拟输入:直接连接至 ADC 等模拟模块,此时数字部分通常被禁用。
关键点:同一引脚在不同模式下,其内部电路连接路径完全不同。配置错误可能导致外设无法工作甚至损坏引脚。
1.2 电气特性
GPIO 引脚的电气特性决定了其与外部电路交互时的电压、电流和时序行为。主要参数包括:
| 参数 | 典型值(3.3V 系统) | 说明 |
|---|---|---|
| VIH(输入高电平阈值) | ≥ 2.0 V | 高于此值被识别为逻辑 1 |
| VIL(输入低电平阈值) | ≤ 0.8 V | 低于此值被识别为逻辑 0 |
| VOH(输出高电平) | ≥ 2.4 V(典型 VDD - 0.4V) | 输出高时引脚上的电压 |
| VOL(输出低电平) | ≤ 0.4 V | 输出低时引脚上的电压 |
| IOH / IOL | ±4 mA ~ ±20 mA(视芯片而定) | 引脚可提供的最大拉/灌电流 |
| 上升/下降时间 | 几 ns ~ 几十 ns | 受负载电容和驱动强度影响 |
注意:不同 SoC 的电气参数差异较大。例如,1.8V 系统的 VIH 约为 1.2V,VIL 约为 0.6V。务必查阅对应芯片的数据手册(Datasheet)。
1.3 上下拉电阻
上下拉电阻用于在引脚悬空(高阻态)时,将电平钳位到一个确定的状态,防止引脚电平浮动导致逻辑不确定或功耗增加。
- 上拉电阻(Pull-Up):将引脚通过电阻连接到 VDD,默认状态为高电平。
- 下拉电阻(Pull-Down):将引脚通过电阻连接到 GND,默认状态为低电平。
- 内部上下拉:SoC 内部集成的可配置电阻,通常为 30kΩ ~ 100kΩ。
- 外部上下拉:在 PCB 上额外焊接的电阻,阻值可根据需求选择(如 4.7kΩ、10kΩ)。
应用场景:I²C 总线需要外部上拉电阻(通常 4.7kΩ);按键检测通常使用内部上拉,按键按下时引脚接地。
1.4 驱动能力
驱动能力指 GPIO 引脚在输出模式下能够提供的最大电流。它直接影响引脚驱动外部负载(如 LED、继电器、MOSFET 栅极)的能力。
- 拉电流(Source Current, IOH):引脚输出高电平时,从 VDD 流向负载的电流。
- 灌电流(Sink Current, IOL):引脚输出低电平时,从负载流入 GND 的电流。
- 驱动强度配置:许多 SoC 允许通过寄存器调整驱动强度(如 2mA、4mA、8mA、12mA),以平衡信号完整性和功耗。
风险提示:超过最大额定电流可能导致引脚永久损坏。驱动大负载(如继电器线圈)时必须使用外部驱动电路(如三极管、MOSFET 或专用驱动芯片)。
| 驱动强度设置 | 典型应用 | 注意事项 |
|---|---|---|
| 低(2~4 mA) | 控制逻辑输入、LED 指示灯(串联电阻) | 信号上升沿较缓,适合低速信号 |
| 中(6~8 mA) | 驱动小功率晶体管、I²C 总线 | 平衡功耗与速度 |
| 高(10~20 mA) | 高速信号(SPI、SDIO)、驱动光耦 | 可能引入 EMI 问题,需注意 PCB 布局 |