為了滿足複雜的power管理的需求,arm提供了P_Channel的低功耗接口,來滿足這樣的應用場景。
一、P_Channel
P_Channel,提出了一個概念,叫power state transition,power狀态的切換。在P_Channel的應用場景中,power的狀态有很多,這個是實作自己定義的。power的各個狀态之間,是可以切換的。
2個最基本的狀态:
- lower-power狀态:在這個狀态下,power消耗比較少,device處于低功耗狀态(具有部分功能)
- higher-power狀态:在這個狀态,power消耗比較大,device處于正常狀态(具有完整功能)
1、接口
以下是P_Channel接口。

分為device端和power控制端(下文簡稱PMU)。
信号 | 說明 | 驅動端 |
PACTIVE [N-1:0] | 提供wakeup功能 | device |
PSTATE [M-1:0] | 需要切換的目的power狀态 | PMU |
PREQ | 為高,表示power狀态切換請求 | PMU |
PACCEPT | 為高,表示device接受power狀态切換請求 | device |
PDENY | 為高,表示device拒絕power狀态切換請求 | device |
PACCEPT和PDENY在握手中,隻能有一個為高。PACCEPT表示接受請求,PDENY表示拒絕請求。
PACCEPT,PDENY,PREQ,PSTATE,必須是從寄存器直接輸出。
2、P_Channel接口握手狀态
對P_Channel的接口,arm也定義了一些握手狀态。不過狀态,有加入了RESETn信号的影響。
- P_RESET: device處于reset狀态
- P_STABLE: device處于非reset狀态,并且PMU沒有發送power狀态切換請求
- P_REQUEST: PMU向device發送power狀态切換請求
- P_ACCEPT: device接受PMU的power狀态切換請求
- P_DENIED: device拒絕PMU的power狀态切換請求
- P_COMPLETE: device接受PMU的power狀态切換請求後,PMU取消power狀态切換請求
- P_CONTINUE: device拒絕PMU的power狀态切換請求後,PMU取消power狀态切換請求
編碼:
以下是狀态轉移圖:
握手協定規則:
- PREQ隻有在PACCEPT和PDENY都為低情況下,才可以從低變為高
- PREQ要滿足以下的任意條件,才可以從高變為低:
- PACCETP是高,PDENY為低
- PACCEPT為低,PDENY為高
- PSTATE滿足以下的任意條件,才可以變化:
- PREQ,PACCEPT,PDENY都為低
- PREQ和PDENY為高,PACCEPT為低
- PACCEPT隻有在PREQ為高,并且PDENY為低,才可以從低變為高
- PACCETP隻有在PREQ為低,并且PDENY為低,才可以從高變為低
- PDENY隻有在PREQ為高,并且PACCEPT為低,才可以從低變為高
- PDENY隻有在PREQ為低,并且PACCEPT為低,才可以從高變為低
3、P_Channel的握手協定
握手協定,涉及到PREQ,PSTATE,PACCEPT,PENDY這4個信号。
3.1、device接受power狀态切換
下圖是該時序圖:
在T2時刻之前,P_Channel處于P_STATBLE狀态。
T2時刻,PMU拉高PREQ,将PSTATE置為STATE B。向device發送power狀态切換請求,請求将device切換到STATE B的power狀态。P_Channel進入P_REQUEST狀态。
T3時刻,device将PACCEPT拉高,表示接受PMU的power狀态切換請求。P_Channel進入P_ACCEPT狀态。
T4時刻,PMU接收device的PACCEPT響應,拉低PREQ,取消請求。P_Channel進入P_COMPLETE狀态。
T5時刻,device将PACCEPT拉低,表示完成power狀态切換。P_Channel進入P_STABLE狀态。
3.2、device拒絕power狀态切換
下圖是時序圖:
T2時刻以前,P_Channel處于P_STABLE狀态。
T2時刻,PMU将PREQ拉高,将PSTATE置為STATE B。向device發送power狀态切換請求,請求将device切換到STATE B的power狀态。P_Channel進入P_REQUEST狀态。
T3時刻,device将PDENY拉高,表示拒絕PMU的power切換請求。P_Channel進入P_DENIED狀态。
T4時刻,PMU接收到device的PDENY響應,将PREQ拉低,取消請求,并且把PSTATE置為STATE A。P_Channel進入P_CONTINUE狀态。
T5時刻,device将PDENY拉低,P_Channel進入P_STABLE狀态。
4、device的複位和初始化
device在複位時,必須将PACCEPT和PDENY置為低,但對PACTIVE沒有要求。
P_Channel的狀态為P_STABLE時,device的複位信号,才可以設定為有效。
當device的複位無效時,device要進入初始化,此時PMU要設定PSTATE信号值,device會在複位之後,采樣該信号值,進而采用合适的初始化流程。PSTATE要在複位信号無效後要保持穩定。
device,要提供一個初始化周期時間,tinit。用來表示,複位之後,PSTATE需要保持多久時間,供device初始化使用。PSTATE在tinit時間之内,必須要保持穩定。
以下是時序圖:
T1時刻之前,RESETn為低,複位有效,P_Channel處于P_RESET狀态。
T1時刻,RESETn為高,PMU将PSTATE置為STATE A。P_Channel進入P_STABLE狀态。
T2時刻,由于tinit的限制,PMU要将PSTATE一直保持在STATE A,以便device正确的初始化。device必須要在tinit時間内,采樣PSTATE。此後,PMU就可以發送power切換請求了。
T3時刻,PMU将PREQ置高,并且将PSTATE置為STATE B,發送power切換請求。P_Channel進入P_REQUEST狀态。
T4時刻,device将PACCEPT拉高,表示接受PMU的power狀态切換請求。P_Channel進入P_ACCEPT狀态。
T5時刻,PMU接收device的PACCEPT響應,拉低PREQ,取消請求。P_Channel進入P_COMPLETE狀态。
T6時刻,device将PACCEPT拉低,表示完成power狀态切換。P_Channel進入P_STABLE狀态。
T7時刻,P_Channel在P_STATBLE狀态,可以進行複位,外部拉低RESETn,P_Channel進入P_RESET狀态。
下圖,展示了,當複位時,PMU發送power切換情況的時序圖。
T1時刻,PMU将PREQ拉高,并置PSTATE為STATE A,但是複位信号有效,device不接收PMU請求。P_Channel保持為P_RESET狀态。
T2時刻,複位信号釋放,因為PREQ為高,P_Channel進入P_REQUEST狀态。device接收PMU的power切換請求。
之後的就和上面的分析原理是一樣的了。
下圖,展示了,複位後,PMU發送使device進入STATE A的power狀态請求,當該轉換完成後,PMU又繼續發送使device進入STATE B的power狀态請求。
PMU在發送下一個power切換請求前,必須保證上一個power切換請求,傳輸完畢。
5、多個power狀态切換
利用P_Channel,PMU可以使device,來回切換不同的power狀态。
在T0,device處于STATE A狀态。
在T1到T4,通過P_Channel,使device進入STATE B狀态。在T4,P_Channel進入P_STABLE狀态。
在T5-T8,通過P_Channel,使device進入STATE C狀态。在T8,P_Channel進入P_STABLE狀态。
6、PACTIVE
PACTIVE,提供給device給PMU發送請求。PACTIVE的每一個bit,表示一種請求。bit為高,表示device發送請求給PMU,讓PMU處理,bit為低,表示device沒有發送請求給PMU處理。
PACTIVE和握手協定,是獨立開的。PACTIVE是設計自定義的,請求完全自己定義。當然,也可以不使用PACTIVE,如果不是用PACTIVE,需要将PACTIVE置為0。
以下是PACTIVE的例子:
PACTIVE有3個bit,每個bit,映射到一個power狀态,MSB具有高優先級。
- PACTIVE[2]: STATE C
- PACTIVE[1]: STATE B
- PACTIVE[0]: STATE A
T1時刻,device将PACTIVE設定為3'b011,表示device向PMU發送power切換請求,将自己切換為STATE B。
PMU接收到device的請求後,從T2到T5,向device發送power切換請求,并且切換到STATE B狀态。最後P_Channel進入P_STABLE狀态。
T6時刻,device将PACTIVE設定為3'b111,表示device向PMU發送power切換請求,将自己切換為STATE C。
PMU接收到device的請求後,從T7到T10,向device發送power切換請求,并且切換到STATE C狀态。最後P_Channel進入P_STABLE狀态。
7、對于device,需要提供的資訊
為了PMU的設計的正确性,device需要向PMU提供以下的一些資訊:
- device支援的power狀态,包括以下:
- PSTATE定義和編碼
- PACTIVE每個bit代表的請求
- 用于初始化power狀态,推薦的PACTIVE輸出
- PACTIVE需要被忽略,或者一直置0的bit資訊
- power狀态的切換,包括以下:
- power狀态切換之後的device行為
- device拒絕power狀态切換的條件
- 複位釋放後,用于初始化device的PSTATE的合理值
- tinit值
8、實作
對于device和PMU來說,有各自的時鐘,是以他們的時鐘,是當成異步來進行處理的,是以需要同步化的操作。
下圖展示了,P_Channel的實作框圖:
對于PSTATE,PREQ,PACCETP,PDENY,需要從寄存器直接輸出,在接收端,需要使用同步器,對異步輸入信号進行同步化輸出。
對于PACTIVE,如果是多個來源的組合,ARM建議使用或門來實作。并且每個對PACTIVE貢獻的來源,必須是寄存器直接輸出。
9、P_Channel使用例子
以下是P_Channel使用的2個例子。
9.1、獨立的power domain使用P_Channel
device0處于power domain0,PMU使用PD0來控制。
device1處于power domain1和power domain2,PMU使用PD1和PD2來分别控制。
9.2、父子關系的power domain使用P_Channel
device1内部有3個power domain,分别為power domain0,power domain1,power domain2,但是domain0是domain1和domain2的父domain,也就是domain0控制domain1和domain2。
PMU和device1有3個P_Channel接口,但是都是在power domain0中。