UEFI 笔记 004 — GPIO 小白笔记
声明:个人笔记,概不负责
本文实际串讲了,在码农眼中 MCU, UEFI, Windows Driver 里的 GPIO
软件小白 眼中的 GPIO
(狭义上)GPIO 是 chip 上一种 pin ,可以配置为 in 或 out ,配置后可以 read 或 write 高低电平逻辑。
GPIO 在 chip 的描述中,通常以 port + pin 两级地址定位,也有 一条心 pin 走到低的描述。
Windows GpioClx 驱动框架,也使用称为 bank + pin 的两级地址定位,一个 bank 下的 pin 最多 64 个。
以 port 为单位组织 pin ,通常是为了描述一组 pin 脚的功能,可以成组控制。
通常这种两级组织,一个 port 下的 pin 脚不会太多,我目前看到最多的是 32 个 pin 脚
不难推断,之所以 pin 脚个数不会太多,是为了完美的映射到 整数,每个 pin 脚对应一个 bit 位。
(Windows 之所以用 bank 这个术语,估计是为了名字不同而不同,或是为了避免混乱?)
使用单一 pin 脚编号,估计主要是为了方便。在 chip 内部,还是成组管理的。
若 pin 脚超过 64 个,采用 Windows GpioClx 写的驱动,则要做 连续地址 与 bank + pin 地址折算,这是主要为了让这个 驱动模型 开心。
(广义上)GPIO pin 脚除了承担传统的 GPIO in/out 功能外,还可能“成组的”分配成其他功能。
所以 chip 还有个对 pin 脚 function 选择,通常 function 0 做 gpio 功能。
这些 pin 脚严谨的措辞为 IO pin ,但业界通常(口头上还是)俗称 GPIO pin,让小白们困惑不已。
所谓 pin 脚的 function 选择,其实是 chip 内部对 pin 的 MUX 配置。
pin 脚挂在 MUX 的 1 端,各种功能散布在 MUX 的 n 端。
所以说,pin 脚的使用,首先冲上来就是对 function 的选择,然后再是 GPIO 的配置。
有些强大的芯片,把这个 function 选择放在冷僻的“安全”IP 模块中,避免 是个人、随时 都能改。
(首尾呼应)GPIO pin 亦可做 interrupt 来源
小白认为,可以把 interrupt 是一种特殊的 in 这时 硬件会做动作,而不是像普通 in 那样 等待读取
====
看几个实例
Infineon Cypress CY8C6 MCU 的 IO pin 用 port + pin 两级定位,一个 port 下 pin 最多 8 个
NXP RT600 MCU 的 IO pin 用 port + pin 两级定位,一个 port 下 pin 脚最多 32 个
ATMEGA32U4 MCU 的 IO pin 用 port + pin 两级定位,一个 port 下 pin 脚最多 8 个
IO Expander
NXP PCAL6416A 用 port + pin 两级定位,一个 port 下 pin 脚最多 16 个,(支持 8个一组访问)
NXP PCAL6524 用 port + pin 两级定位,一个 port 下 pin 脚最多 24 个,(支持 8个一组访问)
某强大的 SOC
使用 单一地址定位,Pin 脚最多 xx 个,其 Windows 驱动程序里折算
浙公网安备 33010602011771号