【Linux驅動】充電晶片bq24735除錯筆記

乾貨福利,第一時間送達!

【Linux驅動】充電晶片bq24735除錯筆記

SMBus(I2C匯流排) 控制的輸入電流, 充電電流, 和充電電壓DAC允許非常高的調節精度,此調節精度可透過系統功率管理微控制器很容易地進行程式設計。

二、Linux核心充電架構

1。 Android供電系統框架

power supply(以下簡稱psy)是Linux中從供電驅動抽象出來的子系統,是Linux電源管理的重要組成部分。

psy是一箇中間層,在kernel中是屬於裝置驅動的一部分,psy的作用主要是向用戶空間彙總各類供電的狀態資訊。

抽象出來的各類資訊稱為property,比如供電裝置是否連線就對應著

POWER_SUPPLY_PROP_ONLINE

2。 power supply功能

power_supply的軟體架構:

【Linux驅動】充電晶片bq24735除錯筆記

power supply framework功能包括:

抽象PSY裝置的共性,向用戶空間提供統一的API;

為底層PSY驅動的編寫,提供簡單、統一的方式,同時封裝並實現公共邏輯。

power supply class位於drivers/power/目錄中,主要由3部分組成(可參考下圖的軟體架構):

1)power_supply_core,用於抽象核心資料結構、實現公共邏輯。位於drivers/power/power_supply_core。c中。

2)power_supply_sysfs,實現sysfs以及uevent功能。位於drivers/power/power_supply_sysfs。c中。

3)power_supply_leds,基於Linux led class,提供PSY裝置狀態指示的通用實現。位於drivers/power/power_suppply_leds。c中。

最後,驅動工程師可以基於power supply class,實現具體的PSY drivers,主要處理平臺相關、硬體相關的邏輯。這些drivers都位於drivers/power/power_supply目錄下。

3。 驅動層功能

在驅動層,主要是兩大模組,與電池監控(fuelgauge)和與充放電管理(charger)相關的驅動(對應圖中的battery。c和charger。c),這兩大模組主要處理硬體相關的邏輯,在硬體狀態發生變化時,會觸發相關的中斷,驅動層會呼叫相應的中斷函式,並更新修改相應的psy節點值。

fuelgauge驅動主要是負責向上層android系統提供當前電池的電量以及健康狀態資訊等等,另外除了這個以外,它也向charger驅動提供電池的相關資訊;charger驅動主要負責電源線的插拔檢測,以及充放電的過程管理。

對於battery管理,硬體上有電量計IC和充放電IC,當然有些廠家為了成本的考慮,也會把電量計和充放電功能整合到一個IC上,更有甚者,可能會把PMU功能也整合在一塊矽面上。

4。 其他問題

問:android怎麼知道當前是什麼供電,充電中與否?

答:uevent機制(實質是net_link方式的socket)(廣泛應用於hotplug),充電插入與斷開時,核心透過傳送uevent資訊,告訴android。

問:android如何知道各種引數並更新的?

答:透過kobject_uevent傳送通知給上層,上層讀取sys相關檔案屬性

以下是某平臺sysfs檔案目錄

【文章福利】小編自己整理了一些個人覺得比較好的學習書籍資料有需要的可以私信回覆【

核心

】自行免費領取哦!!

【Linux驅動】充電晶片bq24735除錯筆記

1。 硬體連線圖圖

【Linux驅動】充電晶片bq24735除錯筆記

2。 引腳說明

【Linux驅動】充電晶片bq24735除錯筆記

在此我們只介紹與驅動相關的引腳

3。 暫存器

充電選項暫存器Charge Options Register [reset = 0x12H]

【Linux驅動】充電晶片bq24735除錯筆記

其中最重要的兩個位bit[4]/bit[0]bit:[4]

bit:[0]

該暫存器為可讀寫,如果要判斷當前是否在充電,則可以讀取該暫存器,透過判斷bit[0]是否為0來確認如果要判斷當前是否存在,則可以讀取該暫存器,透過判斷bit[4]是否為1來確認

充電電流暫存器Charge Current Register (0x14H)

透過該暫存器可以設定充電電流。

【Linux驅動】充電晶片bq24735除錯筆記

比如我們要設定充電電流為3072mA,

該值為2048+1024,將對應的bite[10]/[11]為1,其他位為0

即設定該暫存器值為:

充電電壓暫存器Charge Voltage Register (0x15H)

【Linux驅動】充電晶片bq24735除錯筆記

該暫存器設定方法類似於

輸入電流Input Current Register (0x3FH)

【Linux驅動】充電晶片bq24735除錯筆記

該暫存器設定方法類似於

0xfe,0xff這兩個暫存器分別讀取MANUFACTURER_ID和DEVICE_ID

這兩個值分別為:0x0040、0x000B

驅動初始化時可以透過讀取這兩個暫存器的值來判斷,驅動是否和硬體匹配。

注意:通常暫存器0x14、0x15、0x3F值需要詢問硬體工程師

4。 裝置樹

引數說明

5。 驅動講解

驅動檔案核心程式碼中已經有該驅動

但是該驅動往往需要修改以適配實際的方案。

該驅動是基於I2C匯流排,對應結構體變數定義如下:

主要函式

probe流程

【Linux驅動】充電晶片bq24735除錯筆記

此外還有個最重要的機構體

程式碼架構

【Linux驅動】充電晶片bq24735除錯筆記

這個架構是一口君根據專案中平臺所畫的架構,其他平臺架構可能會有所不同,需要具體問題具體分析。

四、 log

下面log是開機啟動流程log,第一步用電池供電啟動

【Linux驅動】充電晶片bq24735除錯筆記

【Linux驅動】充電晶片bq24735除錯筆記

然後再斷開電源停止充電

【Linux驅動】充電晶片bq24735除錯筆記

end

一口Linux