Linux Charger IC 驅動移植總結

2021-09-07 04:26:45 字數 3335 閱讀 9720

2 電源管理

電池充電過程

總結參考文獻

通過這次移植ti的charger ic晶元到平台上,總結了以下一些內容,需要用到並且掌握的內容。在此之前我還沒有嘗試寫過核心4.0以上的驅動,對於裝置樹的配置只不過是看過語法,也並未太深入的了解。在這裡對所需要涉及到的知識點簡單做一下梳理和總結。

linux中裝置樹的主要目的是提供一種描述不可發現硬體的方法。此資訊以前在源**中進行了硬編碼。方便系統對硬體裝置的管理,提高**可復用率。位於 kernel/arch/platform/boot/dts 下,platform可以是arm,arm64,mips等等。裝置樹資料比較全的資料鏈結。

裝置樹是節點和屬性的簡單樹結構。屬性是鍵 - 值對,節點可以包含屬性和子節點。例如,以下是.dts格式的簡單樹:

/dts-v1/;/

; child-node2 ;}

; node2 ;};};

這棵樹顯然沒有什麼具體的作用,沒有描述任何東西,但是它的確描述了節點——屬性的結構。有:

這裡需要重點理解一下compatible屬性,因為當時因為這個屬性沒有配置正確,導致一直沒有將驅動配對。

裝置樹中表示裝置的每個節點都需要compatible屬性。這是在作業系統中用來決定繫結到哪乙個裝置的驅動程式的關鍵。

舉個栗子

裝置樹檔案中的i2c0節點定義了乙個子節點bq24296,可以看到compatible屬性是ti,bq24296,那麼它是如何找到對應的驅動程式呢?

&i2c0 

;}

在驅動程式中找到了以下**,當然了這是我參考其他驅動程式進行新增的compatible屬性值,當然bq24296節點中gpios屬性也可以通過讀取,這裡需要對裝置樹進行深入的學習。

static

struct of_device_id bq24296_of_match=

,,};

然後,我產生了疑惑,如何解析裝置樹的資料到核心呢?

static

struct

void

bq24296_parse_dt

(void

*param)

pdata =

devm_kzalloc

(di->dev,

sizeof

(*pdata)

, gfp_kernel);if

(!pdata)

return

null;

pdata->chg_irq_pin =

of_get_named_gpio

(bq24296_np,

"gpios",0

);if(

!gpio_is_valid

(pdata->chg_irq_pin)

) pdata->dc_det_pin =

of_get_named_gpio

(bq24296_np,

"gpios",1

);if(

!gpio_is_valid

(pdata->dc_det_pin)

)}

例如of_node_getof_get_named_gpio等等方法可以在核心中獲取裝置樹里的屬性資訊。這裡簡單介紹一下,可以檢視一下核心讀取裝置樹的常用api,這樣基本上就會清楚了。推薦一下宋老師的裝置樹博文

c速率大多數電池都標有額定容量,以**安時(ah)毫安時(mah)**為單位。這基本上是它們在完全耗盡之前可以**一小時的放電電流。

舉個例子,你有乙個標記為2400mah或2.4ah的大電池,這意味著它可以通過你的電路推動2.4a,並在一小時的時間內放電。這將是1c放電率,在額定容量電流下放電。

如果你的電池為乙個電路提供1200ma電流,它將是0.5c的放電率,它應該持續兩個小時。

有些電池的放電率高於1c,如果你能以4.8a(2c)的速度放電,它可以持續30分鐘。rc系統中使用的一些電池允許非常高的放電速率,如10或20c,但這種電池通常設計為失敗而不是讓您的飛機在飛行途中無動力,因此它們不是最安全的。

充電時,它基本相同,在1200ma的最大電流下為2400mah電池充電將是0.5c的充電速率。出於安全原因,大多數電池應在0.5c和1c之間; 完全充電時間約為2-3小時。這些電池的製造商建議在0.8c或更低的溫度下充電,以延長電池壽命; 然而,大多數動力電池可以在很小的壓力下採用更高的充電c率。充電效率約為99%,電池在充電過程中保持冷卻。

開路電壓(ocv)

電池在開路狀態下的電壓,即電池斷開的情況下電池兩端的電壓,等於電池正極與電池負極兩端的電勢差。

電池極化

電池在有電流通過的情況下,兩個電極會出現極化的情況,電流越大,極化情況越嚴重。兩極會偏離平衡電位,表現為陽極電位會比平衡電位高,而陰極會比平衡電位低,所以在出現極化的情況下,電位差會大於開路電壓。

充電週期包括兩個主要階段;恆流cc)和恆壓cv),但有些充電器跳過或增加更多級。主要的充電過程如下圖所示。

涓流充電

在電池電壓低於3v左右時採用涓流充電,涓流充電電流是恆流充電電流的十分之一即0.1c,這是由於電池自放電導致電池自身電壓過低,大部分充電池特別是鎳鎘電池鎳氫電池都有自放電現象;鋰電池則不推薦使用這個方式進行充電

恆流充電(cc)

大於1c的恆流充電並不會縮短整個充電週期時間,因此這種做法不可取。當以更高電流充電時,由於電極反應的過壓以及電池內部阻抗上的電壓上公升,電池電壓會更快速地上公升。恆流充電階段會變短,但由於下面恆壓充電階段的時間會相應增加,因此總的充電週期時間並不會縮短。

恆壓充電(cv)

恆壓充電—— 當電池電壓上公升到4.2v時,恆流充電結束,開始恆壓充電階段。為使效能達到最佳,穩壓容差應當優於+1%。

充電終止

充電終止——與鎳電池不同,並不建議對鋰離子電池連續涓流充電。連續涓流充電會導致金屬鋰出現極板電鍍效應。這會使電池不穩定,並且有可能導致突然的自動快速解體。

備註

SpringCloud Stream訊息驅動概述

簡介 如果系統裡同時存在多種mq,可以使用使用cloud stream,只需要和stream互動就可以進行管理。一句話,遮蔽底層訊息中介軟體的差異,降低切換成本,統一訊息的程式設計模型 官網 中文手冊 官方定義springcloud stream是乙個構建訊息驅動微服務的框架 應用程式通過input...

SpringCloud Stream訊息驅動

遮蔽底層訊息中介軟體的差異,降低切換成本,統一訊息的程式設計模型。在沒有binder這個概念的情況下,springboot應用要直接與訊息中介軟體進行資訊互動的時候,由於各訊息中介軟體構建的初衷不同,他們的實現細節上有較大差異,通過定義binder作為中間層,完美實現了應用程式與訊息中介軟體細節之間...

springcloud stream訊息驅動

什麼是spring cloud stream?官方定義 spring cloud stream 是乙個構建 訊息驅動 微服務的框架。應用程式通過inputs或者outputs來與 spring cloud stream 中binder互動,通過我們配置來 binding 而 spring cloud...