驅動開發硬核特訓 · Day 22(上篇): 電源管理體系完整梳理:I2C、Regulator、PMIC與Power-Domain框架

📘


一、電源子系統總覽

在現代Linux內核中,電源管理不僅是系統穩定性的保障,也是實現高效能與低功耗運行的核心機制。

系統中涉及電源管理的關鍵子系統包括:

  • I2C子系統:硬件通信基礎
  • Regulator子系統:電源輸出抽象
  • PMIC驅動:芯片寄存器操作執行
  • Power-domain子系統:功能域電源策略控制
  • Device Model子系統:支撐所有device/bus/driver關系

它們之間層次清晰,職責分明,共同支撐了完整的電源控制體系。

🔥 整體邏輯關系圖

[Power-domain子系統]↓ 調用 regulator 接口
[Regulator子系統]↓ 調用 PMIC驅動注冊的 regulator_ops
[PMIC驅動]↓ 調用 regmap + i2c API
[I2C子系統]↓
[I2C適配器硬件驅動]↓
[PMIC芯片(如 PCA9450)]

同時所有 device/driver 掛接由 Device Model 統一管理。
在這里插入圖片描述


二、I2C子系統詳解

?? 基礎定義

I2C(Inter-Integrated Circuit)是一種簡單而高效的串行總線協議,用于連接微控制器與外設(如PMIC、傳感器等)。

🏛? 代碼結構位置

  • drivers/i2c/
  • drivers/i2c/busses/(適配器驅動)

🔎 核心數據結構

結構體作用
struct i2c_adapter表示I2C總線控制器(硬件控制器)
struct i2c_client表示I2C總線上一個從設備(如PMIC)
struct i2c_driver設備驅動程序,負責與i2c_client匹配

🛠? 調用鏈示例

regmap_write(regmap, reg, val)i2c_transfer(adapter, msgs, num)↓
adapter->master_xfer()↓
發送I2C信號到總線

? 小結:I2C子系統專注于數據可靠傳輸,不關心具體設備邏輯。


三、Regulator子系統詳解

?? 基礎定義

Regulator子系統統一管理系統中所有可以動態控制的電源輸出,提供標準接口給上層(如power-domain、驅動程序)。

🏛? 代碼結構位置

  • drivers/regulator/

🔎 核心概念與結構體

結構體作用
struct regulator_desc定義regulator屬性(電壓范圍、步進等)
struct regulator_ops定義控制方法(enable/disable/set_voltage)
struct regulator_dev注冊后的regulator實例對象

🔗 調用鏈邏輯

regulator_enable(dev)↓
找到regulator_dev↓
調用 regulator_ops->enable()↓
PMIC驅動操作寄存器

🛠? 真實代碼示例(PCA9450)

static const struct regulator_ops pca9450_buck_regulator_ops = {.enable = regulator_enable_regmap,.disable = regulator_disable_regmap,.set_voltage_sel = regulator_set_voltage_sel_regmap,.get_voltage_sel = regulator_get_voltage_sel_regmap,
};

? 小結:Regulator子系統是電源控制的標準抽象,所有開關/調壓動作通過它完成。


四、PMIC驅動工作機制

?? 基礎定義

PMIC(Power Management IC)集成多個電源模塊(Buck/LDO等),PMIC驅動負責初始化芯片并注冊各個電源通道到regulator子系統。

🏛? 代碼結構位置

  • drivers/regulator/pca9450.c

🔎 主要工作

  1. 解析設備樹(I2C地址、中斷號、regulator屬性)
  2. 使用 devm_regulator_register() 注冊regulator
  3. 調用 regmap 框架,通過i2c操作寄存器

🛠? PCA9450代碼片段

rdev = devm_regulator_register(dev, &pca9450a_regulators[i].desc, &config);

? 小結:PMIC驅動是連接硬件與Regulator框架的橋梁。


五、Power-domain子系統概覽

?? 基礎定義

Power-domain(電源域)是指一個可獨立控制上電/斷電的功能塊,比如GPU、ISP、VPU等模塊。

Power-domain子系統(GENPD)統一調度各域的電源狀態。

🏛? 代碼結構位置

  • drivers/power/
  • kernel/power/

🔎 主要機制

  • 設備通過設備樹綁定 power-domains 屬性
  • Runtime PM框架觸發 suspend/resume
  • Power-domain 調用 regulator 開關電源

🛠? 設備樹示例

gpu: gpu@0 {power-domains = <&gpu_pd>;
};power-domain@1 {compatible = "fsl,imx8mq-gpu-pd";#power-domain-cells = <0>;
};

? 小結:Power-domain更關注邏輯域整體電源狀態,而非單個電源輸出。


六、從設備樹到硬件動作的完整調用鏈

🔥 完整邏輯圖

設備樹 (dts)↓
平臺設備注冊 (of_platform_populate)↓
綁定power-domains屬性 (of_genpd_bind)↓
Runtime PM 調用 pm_runtime_suspend/resume↓
調用genpd power_off/power_on↓
調用 regulator_disable/enable↓
PMIC驅動執行寄存器操作 (regmap+i2c_transfer)↓
PMIC芯片控制 Buck/LDO 模塊

🛠? 真實例子小節

  • PCA9450注冊6個Buck+5個LDO
  • GPU模塊通過Power-domain統一管理供電
  • 實際動作由regulator調到PMIC驅動,再經i2c傳輸完成

七、系統總結與思考

?? 層次總結

層次內容
策略層power-domain子系統
抽象層regulator子系統
設備層PMIC驅動(如PCA9450)
通信層I2C子系統
基礎層Device Model(統一管理device/driver)

🚀 工程啟示

  • 嚴格分層設計:每一層職責單一、接口標準
  • 模塊獨立演進:I2C、Regulator、PMIC驅動可以獨立修改升級
  • 統一設備樹描述:軟硬件靈活適配,簡化系統集成

? 當你掌握了這套體系,就能真正駕馭嵌入式Linux電源管理架構,具備解決復雜功耗優化與系統穩定性問題的能力!


📺 視頻教程請關注 B 站:“嵌入式Jerry”

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77508.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77508.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77508.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式全解析:23種經典設計模式及其應用

創建型模式 1. 單例模式&#xff08;Singleton Pattern&#xff09; 核心思想&#xff1a;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。適用場景&#xff1a;需要共享資源的場景&#xff0c;如配置管理、日志記錄等。 public class Singleton {// 靜態變量保存…

力扣熱題100題解(c++)—矩陣

73.矩陣置零 給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 int m matrix.size(); // 行數int n matrix[0].size(); // 列數bool firstRowZero false; // 標記第一行是否包含 0bool f…

本地部署DeepSeek-R1(Dify升級最新版本、新增插件功能、過濾推理思考過程)

下載最新版本Dify Dify1.0版本之前不支持插件功能&#xff0c;先升級DIfy 下載最新版本&#xff0c;目前1.0.1 Git地址&#xff1a;https://github.com/langgenius/dify/releases/tag/1.0.1 我這里下載到老版本同一個目錄并解壓 拷貝老數據 需先停用老版本Dify PS D:\D…

PostSwigger Web 安全學習:CSRF漏洞3

CSRF 漏洞學習網站&#xff1a;What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy CSRF Token 基本原理 CSRF Token 是服務端生成的唯一、隨機且不可預測的字符串&#xff0c;用于驗證客戶端合法校驗。 作用&#xff1a;防止攻擊…

用 Nodemon 解決 npm run serve 頻繁重啟服務

Nodemon 是一個基于 Node.js 構建的開發工具&#xff0c;專為幫助開發者自動監控項目文件的更改而設計。每當文件發生變更時&#xff0c;Nodemon 會自動重啟 Node.js 服務器&#xff0c;無需手動停止并重啟。這對于提升開發速度、減少人工操作非常有幫助&#xff0c;尤其適用于…

django admin 中更新表數據 之后再將數據返回管理界面

在Django中&#xff0c;更新數據庫中的數據并將其重新顯示在Django Admin界面上通常涉及到幾個步驟。這里我將詳細說明如何在Django Admin中更新表數據&#xff0c;并確保更新后的數據能夠立即在管理界面上顯示。 定義模型 首先&#xff0c;確保你的模型&#xff08;Model&…

真.從“零”搞 VSCode+STM32CubeMx+C <1>構建

目錄 前言 準備工作 創建STM32CubeMx項目 VSCode導入項目&配置 構建錯誤調試 后記 前言 去年10月開始接觸單片機&#xff0c;一直在用樹莓派的Pico&#xff0c;之前一直用Micropython&#xff0c;玩的不亦樂乎&#xff0c;試錯階段優勢明顯&#xff0c;很快就能鼓搗一…

C語言學習之結構體

在C語言中&#xff0c;我們已經學了好幾種類型的數據。比如整型int、char、short等&#xff0c;浮點型double、float等。但是這些都是基本數據類型&#xff0c;而這些數據類型應用在實際編程里顯然是不夠用的。比如我們沒有辦法用一旦數據類型來定義一個”人“的屬性。因此這里…

架構-計算機系統基礎

計算機系統基礎 一、計算機系統組成 &#xff08;一&#xff09;計算機系統層次結構 硬件組成 主機&#xff1a;包含CPU&#xff08;運算器控制器&#xff09;、主存儲器&#xff08;內存&#xff09;。外設&#xff1a;輸入設備、輸出設備、輔助存儲器&#xff08;外存&…

【計算機網絡性能優化】從基礎理論到實戰調優

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現案例1&#xff1a;iPerf3帶寬測試案例2&#xff1a;TCP窗口優化案例3&#xff1a;QoS流量整形 運行…

Python 自動化辦公:Excel 數據處理的“秘密武器”

引言 在日常的 IT 辦公場景里&#xff0c;Excel 是數據處理與分析的 “常勝將軍”。無論是財務人員整理賬目、銷售團隊統計業績&#xff0c;還是運營人員分析用戶數據&#xff0c;Excel 都發揮著關鍵作用。但面對海量數據&#xff0c;手動操作 Excel 不僅效率低下&#xff0c;還…

緩存集群技術深度解析:從原理到實戰

緩存集群技術深度解析&#xff1a;從原理到實戰 一、緩存集群核心定位與架構選型 1. 集群模式核心價值 緩存集群通過數據分片、高可用保障、水平擴展解決單節點瓶頸&#xff0c;核心能力包括&#xff1a; 數據分片&#xff1a;將數據分散到多個節點&#xff0c;突破單節點內…

CSDN編輯文章時如何自動生成目錄

如何自動生成目錄 前置條件1. 插入目錄標識符2. 編寫標題層級 前置條件 需要使用markdown編輯&#xff0c;并且只有按照markdown語法編寫不同的標題級別&#xff0c;才能使用這個方法自動生成對應的目錄。 1. 插入目錄標識符 在文章的頂部添加以下代碼&#xff1a; [TOC](文…

產品經理對于電商接口的梳理||電商接口文檔梳理與接入

接口梳理7個注意點總結 ①注意要測試環境和生產環境。生產上線時候要提醒研發換到生產環境調用。 ②注意必輸字段和選輸字段&#xff0c;要傳入字段的含義和校驗。枚舉值不清楚含義的要詢問對方含義&#xff0c;比如說單據類型字段枚舉值是B2C發貨單&#xff0c;BBC發貨單&am…

更快的圖像局部修改與可控生成:Flex.2-preview

Flex.2-preview 文本生成圖像擴散模型介紹 一、模型簡介 Flex.2-preview 是一種 開源的 80 億參數文本生成圖像擴散模型&#xff0c;具備通用控制和修復支持功能&#xff0c;是 Flex.1alpha 的下一代版本。該模型由社區開發并為社區服務&#xff0c;采用 Apache 2.0 許可證&a…

【Castle-X機器人】一、模塊安裝與調試:機器人底盤

持續更新。。。。。。。。。。。。。。。 【ROS機器人】模塊安裝 一、Castle-X機器人底盤1.1 結構概述1.2 驅動執行結構1.3 環境傳感器1.4 電氣系統1.5 Castle-x機器人底盤測試激光雷達傳感器測試及數據可視化超聲波傳感器實時數據獲取防跌落傳感器測試陀螺儀測試鍵盤控制測試…

條件、列表渲染.

#### v-for 1. 渲染列表 vue <template> <ul v-for"(item,index) in list" > <li>{{ item }}</li> </ul> </template> <script setup> import { ref } from vue; let list ref([蘋果, 香蕉, 橙子]) </script>…

node20的安裝和vue的入門準備

一、node20的安裝 直接下載路徑&#xff1a;https://nodejs.org/download/release/v20.11.0/node-v20.11.0-x64.msi 安裝&#xff0c;雙擊msi文件 點擊同意協議 更改下載路徑 什么也不用選&#xff0c;點擊next進行下一步 什么也不用選&#xff0c;點擊next進行下一步 點擊安…

從 Java 到 Kotlin:在現有項目中遷移的最佳實踐!

全文目錄&#xff1a; 開篇語 1. 為什么選擇 Kotlin&#xff1f;1.1 Kotlin 與 Java 的兼容性1.2 Kotlin 的優勢1.3 Kotlin 的挑戰 2. Kotlin 遷移最佳實踐2.1 漸進式遷移2.1.1 步驟一&#xff1a;將 Kotlin 集成到現有的構建工具中2.1.2 步驟二&#xff1a;逐步遷移2.1.3 步驟…

威雅利電子|業界領先的高隔離度用于5G基站的吸收式SPDT開關“NT1819“

業界領先的高隔離度 用于5G基站的吸收式SPDT開關"NT1819" 為了實現智能社會&#xff0c;已經啟動了5G服務。這樣&#xff0c;高速、低延遲、大容量的數據通信成為可能&#xff0c;也給我們的生活和工業發展帶來了巨大的變化。 在5G基站有很多天線&#xff0c;每個天…