平台: MSM8X39
OS: Android4.4
Kernel: 3.10.28
術語及縮寫:
TLMM:
Top-Level Mode Multiplexer. 此子產品提供了一種機制可以讓一組GPIO pads共享使用不同的功能。
另外,對于 pin的縮寫定義,有如下表格作參考。
這裡要說明的”H”: 是指pin可以接高電壓,例如3.0V,不過它的驅動能力最大隻能到8mA了。
GPIO HW:
GPIO Ports:
GPIO的内部框圖如下。
系統由Input, Output, Pull三個子子產品組成。
系統一共有122個GPIO。
隻有一部分GPIO才可以wakeup系統。
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 框圖:
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引腳都不依賴于時鐘而是異步的,這樣能確定快速控制。
使用注意事項:
Boot config:
帶有Boot Config的GPIO請慎用,可能會導緻開機不正常!!!
帶Boot Config的GPIO:
Boot Config用途:
參考文檔:
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.