[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结

平台: MSM8X39
OS: Android4.4
Kernel: 3.10.28


术语及缩写:

TLMM:
Top-Level Mode Multiplexer. 此模块提供了一种机制可以让一组GPIO pads共享使用不同的功能。

另外,对于 pin的缩写定义,有如下表格作参考。
[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结

[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结

这里要说明的”H”: 是指pin可以接高电压,例如3.0V,不过它的驱动能力最大只能到8mA了。


GPIO HW:

GPIO Ports:

GPIO的内部框图如下。
 系统由Input, Output, Pull三个子模块组成。
 系统一共有122个GPIO。
 只有一部分GPIO才可以wakeup系统。

[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结

GPIO Output:

Output types:
有三种output type可以支持:
1. Normal.
也就是作为一般的的GPIO输出。 可以通过GPIO_OUT_X和GPIO_OE_X 寄存器控制。
2. Alternate.
因为GPIO可以作为复用,这里就是选择除了普通GPIO的另外一种功能,如UIM,I2C,具体可参见文档Q1.
可以通过ALT_FUNTION和ALT_FUNCTION_OE寄存器设置。
3. Special.
例如ETM, 开了此功能就会覆盖GPIO的设置。不过从目前使用角度来看,我们还用到
过。

Output driver strength:
可通过 GPIO_PAD_HDRIVE_MSEL_n 寄存器的bit 2:0来控制,设置的范围是2mA 到 16mA, 以2mA为单位。
在pad的support voltage是1.8V的时候,可以设置2 ~ 16mA。
在Pad的support voltage是高电压(3.0V)的时候,设置的范围只能是2 ~ 8mA。

GPIO Input:

Input types:
有两种input types可以支持:
1. Buffer.
也就是我们所说的作为一般的GPIO input,可从GPIO_IN_X读到值。
2. Interrupt.
作为一个中断pin存在。 并且可以设置触发方式。

Input 框图:

[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结

Pull types:

可以有四种状况:
1. Pull up.
上拉的电源电压各个GPIO不太一样,参见Q1.
2. Pull down.
接地。
3. Keeper.
不管是input还是output,可以维持上一次的电压。在system sleep的时候会被用到。不过它无法驱动外部电路。
4. No pull.
也就是高阻态。

TLMM:

TLMM主要是方便快速对引脚的功能配置,以及对GPIO多个一起配置,否则GPIO只能一个个引脚独立配置。模式是通过硬件关键MODE[1:0]和寄存起来控制的。所有的GPIO引脚都不依赖于时钟而是异步的,这样能确保快速控制。

[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结

使用注意事项:

Boot config:
带有Boot Config的GPIO请慎用,可能会导致开机不正常!!!
带Boot Config的GPIO:

[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结
Boot Config用途:
[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结
[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结

[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结
[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结
[笔记分享] [GPIO] MSM8x39 GPIO 硬件部分小结


参考文档:

Q1: 80-NM683-1B MSM8936-MSM8939 GPIO PIN ASSIGNMENT SPREADSHEET.xlsm
Q2: 80-NM683-22 PRESENTATION- MSM8X36-MSM8X39 DIGITAL BASEBAND.pdf
Q3: 80-NM683-1 MSM8239-MSM8939-MSM8236-MSM8936 DEVICE SPECIFICATION (ADVANCE INFORMATION).pdf  chapter 2.