在嵌入式設備中,PMIC(電源管理集成電路)是“能源管家”——它不僅為CPU、內存、外設提供穩定電壓,還需處理休眠喚醒、異常保護、動態調壓等核心邏輯。瑞芯微RK806作為一款高集成度PMIC,支持10路DCDC穩壓器、6路PLDO+5路NLDO,廣泛應用于工業控制、智能硬件等場景。
本文將從驅動架構出發,逐層拆解RK806的電源處理流程(初始化、電壓調節、休眠喚醒、關機保護),結合核心代碼與流程圖,幫你吃透底層邏輯,為定制電源方案、調試問題提供參考。
一、RK806驅動架構:四大核心模塊分工
RK806的Linux驅動基于MFD(多功能設備)框架設計,通過4個核心文件實現功能解耦,各模塊職責清晰:
|
文件名
|
核心功能
|
關鍵接口/作用
|
|
rk806-spi.c
|
SPI總線通信層
|
實現regmap讀寫接口,對接硬件SPI
|
|
rk806-core.c
|
核心控制層
|
設備初始化、中斷管理、子設備加載
|
|
pinctrl-rk806.c
|
引腳控制層
|
GPIO管理、引腳復用(DVS/PWRCTRL)
|
|
rk806-regulator.c
|
穩壓器驅動層
|
電壓調節、DVS動態調壓、異常保護
|
核心設計思路:以regmap為數據交互核心(屏蔽總線差異),core層統一調度,子模塊(regulator/pinctrl)專注細分功能,形成“總線→核心→子設備”的分層架構。
二、第一步:RK806初始化流程(從SPI匹配到電源就緒)
初始化是PMIC工作的基礎——從SPI設備被系統識別,到完成寄存器配置、子設備加載,最終進入可工作狀態。整個流程可分為SPI通信初始化和核心參數配置兩大階段。
2.1初始化數據流程
1.SPI設備匹配:系統枚舉SPI設備時,通過rk806_of_match(兼容rockchip,rk806)或spi_id_table匹配驅動;
2.SPI通信層初始化:調用rk806_spi_probe,分配rk806結構體,綁定SPI設備的dev、irq;
3.regmap初始化:通過devm_regmap_init,將SPI總線的讀寫函數(rk806_spi_bus_read/write)封裝為regmap接口,上層無需關心SPI協議細節;
4.核心初始化入口:調用rk806_device_init(core.c),啟動核心配置;
5.設備樹解析:rk806_parse_dt讀取電壓閾值(如low_voltage_threshold)、關機序列(shutdown-sequence)、DVS控制參數,默認值兜底(如低電壓閾值默認3400mV);
6.寄存器字段映射:初始化regmap_field,將寄存器某幾位映射為獨立字段(如BUCK1_EN對應0x00寄存器0位),方便單獨讀寫;
7.芯片信息校驗:讀取CHIP_NAME_H/L、CHIP_VER,打印芯片ID(如RK806的ID為RKxx)和版本,確認硬件匹配;
8.中斷系統初始化:添加regmap_irq_chip,管理16路中斷(如PWRON按鍵、VDC電壓變化、過溫),啟用喚醒中斷(如VDC中斷);
9.加載MFD子設備:通過devm_mfd_add_devices加載3個子設備——rk806-pinctrl(引腳)、rk805-pwrkey(電源鍵)、rk806-regulator(穩壓器);
10.電源參數配置:rk806_init設置電壓保護閾值(如VB_UV_SEL)、TSD過溫閾值(140℃/160℃)、啟用2MHz時鐘,初始化強制關機序列;
11.調試節點創建:在sysfs創建debug節點,支持通過命令讀寫寄存器(如echo "w 0x00 0x01" > /sys/rk806/debug)。
2.2初始化流程圖(Mermaid)

三、核心能力:電壓調節與DVS動態調壓流程
電壓調節是PMIC的核心功能——既要為不同外設提供固定電壓(如CPU核心1.2V、內存1.8V),也要支持DVS(動態電壓調節)(根據負載調整電壓,降低功耗)。
3.1常規電壓調節流程(固定電壓設置)
當應用層需要設置某路穩壓器電壓(如DCDC_REG1輸出1.2V)時,流程如下:
1.應用層請求:通過sysfs或regulator API發起請求(如echo 1200000 > /sys/class/regulator/DCDC_REG1/microvolts);
2.regulator框架調度:Linux regulator框架調用rk806_set_voltage(regulator.c);
3.電壓→VSEL映射:調用regulator_map_voltage_linear_range,將目標電壓(1200000μV)映射為VSEL值——
以DCDC為例,電壓范圍分兩段:500mV~1500mV(步長6.25mV)、1500mV~3400mV(步長25mV),1200mV對應VSEL=112((1200-500)/6.25=112);
4.確定目標寄存器:調用rk806_get_write_vsel_register,根據DVS模式選擇寫入寄存器(正常模式寫ON_VSEL,休眠模式寫SLP_VSEL);
5.寫入寄存器:通過regmap_update_bits將VSEL值寫入目標寄存器(如DCDC_REG1對應BUCK1_ON_VSEL=0x1A);
6.同步電壓狀態:調用rk806_regulator_sync_voltage,確認電壓已更新并打印調試信息。
3.2 DVS動態調壓流程(負載自適應)
DVS用于“按需調壓”——比如CPU負載低時降為0.9V,負載高時升為1.2V,實現功耗優化。RK806支持GPIO觸發和軟件觸發兩種DVS模式:
模式1:GPIO觸發DVS(硬件信號控制)
1.DVS引腳配置:通過設備樹配置dvs-pin1_ctrl,將PWRCTRL1引腳復用為DVS觸發引腳;
2.電平變化檢測:DVS引腳電平變化(如從高變低),觸發GPIO中斷;
3.切換VSEL寄存器:調用rk806_do_gpio_dvs,讀取GPIO電平——
?電平= 0:切換為休眠電壓(讀SLP_VSEL);
?電平= 1:切換為工作電壓(讀ON_VSEL);
1.更新輸出電壓:regmap自動加載對應VSEL值,完成電壓切換。
模式2:軟件觸發DVS(軟件命令控制)
1.DVS模式初始化:通過rk806_dvs_mode_init配置為“start bit控制”模式;
2.軟件觸發:應用層觸發DVS(如CPU負載升高),調用rk806_do_soft_dvs;
3.設置DVS_START位:向DVS_START1~3寄存器(0x70)寫入1,觸發DVS切換;
4.切換電壓:regmap根據預設的DVS_CTRL_SEL,加載對應電壓值。
3.3電壓調節流程圖

四、休眠喚醒與關機保護:電源狀態管理
RK806需處理設備的“休眠-喚醒”狀態切換,以及“低電壓/過溫”的異常保護,確保系統穩定。
4.1休眠-喚醒流程
休眠流程(系統進入低功耗)
1.休眠觸發:系統執行suspend(如echo mem > /sys/power/state);
2.核心中斷處理:調用rk806_core_suspend,禁用RK806主IRQ,啟用IRQ喚醒(如VDC中斷、PWRON按鍵);
3.regulator休眠配置:調用regulator_suspend,設置休眠電壓(寫入SLP_VSEL),切換DVS控制方式為“休眠模式”;
4.引腳狀態切換:pinctrl_select_state將引腳切換到sleep狀態(如禁用非必要外設引腳)。
喚醒流程(系統恢復工作)
1.喚醒源觸發:喚醒源(如PWRON按鍵、VDC電壓恢復)觸發IRQ;
2.核心中斷恢復:調用rk806_core_resume,啟用主IRQ,禁用IRQ喚醒;
3.regulator恢復:調用regulator_resume,恢復工作電壓(加載ON_VSEL),重置DVS控制為“正常模式”;
4.引腳恢復:pinctrl_select_state將引腳切換回default狀態,外設恢復供電。
4.2關機與異常保護流程
RK806支持正常關機和異常關機(低電壓/過溫),核心是“按序列關閉電源”,避免硬件損壞。
1.正常關機流程
1.關機觸發:系統執行shutdown,調用rk806_regulator_shutdown;
2.加載關機序列:調用rk806_shutdown_requence_config,從設備樹讀取shutdown-sequence(如先關DCDC10,再關DCDC9...);
3.引腳狀態切換:pinctrl_select_state切換到power_off狀態,觸發電源關閉信號;
4.按序列關電:按預設序列關閉所有DCDC/LDO,完成關機。
2.異常保護流程(低電壓為例)
1.低電壓檢測:SYS_STS寄存器(0x5D)的VB_LO_STS位變為1(檢測到輸入電壓低于閾值);
2.保護策略判斷:讀取VB_LO_ACT配置(0x5E寄存器)——
?VB_LO_ACT_SD(0x00):直接觸發關機;
?VB_LO_ACT_INT(0x01):先發送中斷通知系統;
1.強制關機:調用rk806_vb_force_shutdown_init,加載vb-shutdown-sequence,按序列關閉電源;
2.硬件復位:若電壓持續過低,觸發DEV_RST(0x72寄存器),硬件復位系統。
4.3休眠喚醒與關機流程圖



五、RK806電源處理的核心設計亮點
1.分層解耦架構:SPI總線層(屏蔽硬件差異)、核心控制層(統一調度)、子設備層(專注細分功能),便于維護和擴展;
2.靈活的調壓機制:支持線性電壓映射、多模式DVS,適配不同負載場景;
3.完善的異常保護:低電壓(2800-3500mV)、過溫(140℃/160℃)雙重保護,避免硬件損壞;
4.便捷的調試接口:sysfs節點支持寄存器讀寫,無需修改代碼即可調試電源參數;
5.設備樹驅動分離:電壓閾值、關機序列等參數通過設備樹配置,無需重新編譯驅動,適配不同硬件。
總結
RK806的電源處理流程,本質是“以regmap為核心,分層實現通信、控制、調壓、保護”——從SPI通信初始化,到電壓調節、休眠喚醒,再到異常關機,每一步都圍繞“穩定供電”和“低功耗”展開。
對于工程師而言,理解這一流程不僅能快速定位電源問題(如電壓不穩定、DVS失效),還能根據實際需求定制電源方案(如調整DVS閾值、優化關機序列)。后續我們還將拆解RK806的中斷處理、GPIO控制細節,敬請關注!
如果覺得本文有幫助,歡迎點贊、在看,轉發給身邊的嵌入式同行~
-
穩壓器
+關注
關注
24文章
4926瀏覽量
99894 -
內存
+關注
關注
9文章
3209瀏覽量
76354 -
PMIC
+關注
關注
15文章
480瀏覽量
113060
發布評論請先 登錄
開關電源pcb設計實例 分析RK806電源方案的PCB設計
RK3588 EVB開發板原理圖講解【一】
RK3588 EVB開發板原理圖講解【三】
RK3588 EVB開發板原理圖講解【七】
RK3128 Android 7.1 進入深度休眠流程分析
請問WiFi模塊通過串口通信到ZigBee模塊的程序嗎?
一文解析RK3288 PMU配置RK808
求一種RK3588+FPGA高速圖像處理通信處理機解決方案
瑞芯微:已有多款搭載RK3588M芯片乘用車面世
解決RK806+RK3588休眠異常!從硬件特性到軟件優化的完整方案
深入解析U-Boot image.c:RK平臺鏡像處理核心邏輯
深度拆解RK806 PMIC電源處理流程:從SPI通信到DVS動態調壓
評論