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

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

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



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