晶片裡面的電源管理電源主要功能描述如下:
* 複位
* 鎖相環和分頻器
* HWCFG[2:0] 引腳訊號識別和解碼
* 睡眠模式
* 模組電源管理
* 頂層控制寄存器
一、複位
複位的訊號源有以下幾種:
1、PIN_RESETN(低有效):PIN_RESETN 將會把整個晶片都恢複到預設狀態
2、PIN_A11STRST(低有效):PIN_A11STRST 通常串連到 ARM 調試工具,它能恢複晶片的大部分模組(除了以下模組):
a、ARM 副處理器 CP14 調試邏輯
b、鎖相環
3、看門狗複位:除了軟體配置寄存器 SWRSTR 其他的都將會被複位
4、SWRSTR 寄存器複位:除了自己本身不被複位,其他的都將被複位
二、鎖相環
晶片裡面共有 5 路鎖相環:PLL1、PLL2、PLL3、PLLM 和 PLLA
* PLL1 和 PLL2 是通用的鎖相環
* PLL3 是高速鎖相環專用於基帶
* PLLM 是通用鎖相環專用於 MDDR
* PLLA 是高速鎖相環專用於 ARM CPU
1、通用鎖相環
下面是通用鎖相環(PLL1、PLL2、PLLM)的結構圖
CLKIN 是輸入時鐘(通常為 26M)。CLKIN 通過輸入分頻器提供 13M 的參考時鐘給鎖相環,如果輸入時鐘為 13M,則需要將 SEL_13M 置 1 繞開輸入分頻器。鎖相環的反饋分頻器由 FDIV 控制,輸出分頻器將會對 Fvco 進行 1、2、4、8 分頻,由 ODIV[1:0] 控制。當 SEL_13M = 0 時,輸出時鐘頻率計算公式如下:
當 BYPASS = 1,輸出時鐘等於輸入時鐘。當 PWRDN = =1,鎖相環關閉。PLL1、PLL2 和 PLLM 的 Fvco 頻率範圍為 [650M,1300M],即 FDIV 的範圍為 (50,100]。QP、VCO 和 D2C 控制鎖相環內部的電流。
2、高速鎖相環
下面是高速鎖相環(PLL3、PLLA)的結構圖
高速鎖相環的控制訊號和通用鎖相環基本一致,輸出時鐘頻率計算公式如下:
3、分頻器
數組電路有 40 組分頻器(D0 - D39),類比電路有 8 組分頻器(A0 - A7)。每個分頻器都能通過編程設定輸入時鐘(PLL1、PLL2、PLL3、晶振、外部時鐘),輸出時鐘為輸入時鐘除以 n,n 為寄存器取值 [1, 32]。晶片預設的狀態將會開啟所有的分頻器,軟體必須在合適的情況下關掉不必要的分頻器以降低功耗,還有一些分頻器通過級聯的方式提供更低的輸出頻率。分頻器通過相應的寄存器來設定,硬體電路通過一個狀態機器自動保證時鐘變化時的瞬時時鐘不會影響到下遊的邏輯。在硬體狀態機器完成之前 AHB 匯流排上的其他寄存器都不能訪問,這段時間大約為 160 晶振刻度。下面是各時鐘在 000 - 011 四種啟動模式下的預設設定:
其中SRC_SEL: 0 為 晶振時鐘,1 為 PLL1, 2 為 PLL2,3 為 PLL3。另外外設的時鐘源由 D17 控制即 clk_app 提供。
三、HWCFG 模式選擇
晶片的操作模式通過 PIN_NDDAT[2:0] 來選擇,可以通過上下拉來控制其狀態,所有的模式列表如下:
000 Boot from NAND
001 UART download
010 Boot from SD
011 Boot from MSD
100 Reserved
101 PLL bypass(boot from NAND)
110 External boot
111 External boot(debug bus enabled)
四、睡眠模式
處理器通過進入睡眠模式以降低功耗,在睡眠模式,ARM 的核心時鐘以及 AXI 匯流排都將會被關閉,直到中斷將處理器喚醒。當處理器睡眠時,可以通過寄存器設定 app bus 是否關閉。同樣 L2 cache 在處理器睡眠的時候也將被關閉,所以在睡眠之前軟體需要對 L2 cache 做同步操作。下面是處理器進入和退出睡眠的操作順序:
a、設定中斷事件以喚醒處理器(通常為 timer 或者 GPIO)
b、設定 ARM 配置寄存器 ARMCFGR 的 bit0 為 1 啟動睡眠流程
c、執行 WFI 指令,這個指令將會讓 ARM 執行必要的操作以安全的進入待機模式,一旦 ARM 進入待機模式,STANDBYWFI 標記將會被置位 ARMCFGR bit1
d、關閉 ARM 時鐘,硬體標記 ARM_SLEEP 將會被設定 ARMCFGR bit2
e、當喚醒中斷來臨,ARM_SLEEP 標記將會被清除,ARM 時鐘將會開啟,然後 ARM 退出待機模式進入運行模式
基帶睡眠的時候,STACH processor 和 PHY processor 將會獨立的進入睡眠,可以從 PMSTATR 寄存器擷取相應的狀態標記。為了最大限度的節省電能,晶片可以進入深度睡眠模式,在深度睡眠模式所有的鎖相環電路和時鐘都將被關閉,只有 32.768 KHz 時鐘存在。在深度睡眠時,處理器可以通過一個 GPIO 控制外部 PMU 進入低功耗模式。
在深度睡眠模式可以通過如下方法控制DDR self-refresh,軟體首先編程式控制制 DDR 控制器進入自動低功耗模式,在該模式下 DDR 控制器在指定刻度內沒有收到活躍的操作就將開啟 DDR self-fresh 並將 CKE_STATUS 標記置位,處理器在進入深度睡眠之前會一直等到這個標記的置位,當退出深度睡眠時,首先會開啟 DDR 的時鐘並等到 DLL 穩定,然後再開啟其他模組的時鐘,DDR 控制將會在第一次存取 DDR 資料時退出 self-fresh。在深度睡眠模式下仍然可以指定一些時鐘保持開啟狀態,比如:USB。下面是深度睡眠的狀態機器:
五、模組電源管理
晶片裡面的一些功能模組有內建的電源開關,可以獨立的開啟或者關閉,這些模組包括:ARM_CPU、DSP、MM_GE,他們可以通過寄存器 ARMPWDR、DSPPWDR、MMGEPWDR 控制。
ARM 的關閉流程如下:首先設定 ARMPWDR.SLEEP_PWD 為 1,然後開始 ARM 的正常睡眠流程,當 ARM_SLEEP 被設定,電源管理單元將會自動關閉 ARM 直到喚醒中斷來臨。當 ARM 再次上電的時候,ARM 將會被複位並從地址 0x0 開始執行。
六、頂層控制寄存器
* 時鐘控制寄存器
* USB PHY 控制器
* 基帶頂層控制寄存器
* 類比前端頂層控制寄存器