精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux驅動 | 充電芯片bq24735調試,你學會了嗎?

系統 Linux
在驅動層,主要是兩大模塊,與電池監控(fuelgauge)和與充放電管理(charger)相關的驅動(對應圖中的battery.c和charger.c),這兩大模塊主要處理硬件相關的邏輯,在硬件狀態發生變化時,會觸發相關的中斷,驅動層會調用相應的中斷函數,并更新修改相應的psy節點值。

一、bq24735簡介

bq24735 是一款高效率同步電池充電器。

當系統供電需求暫時高于適配器最大供電水平的時候, bq24735 使用智能加速技術來允許電池向系統中釋放能量,這樣的話將保護適配器不被損壞。

bq24735 為滿足自動系統電源選擇的需要,使用 2 個充電泵來分別驅動 n-通道 MOSFET (ACFET, RBFET 和 BATFET) 。

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

bq24735 使用內部輸入電流寄存器或者外部ILIM引腳來減緩PWM調制速度以減小充電電流。

二、Linux內核充電架構

要想理解bq24735驅動,必須首先理解Android供電系統框架,最重要的知識點是power supply。

1. Android供電系統框架

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

psy是一個中間層,在kernel中是屬于設備驅動的一部分,psy的作用主要是向用戶空間匯總各類供電的狀態信息。

抽象出來的各類信息稱為property,比如供電設備是否連接就對應著POWER_SUPPLY_PROP_ONLINE。

2. power supply功能

power_supply的軟件架構:

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文件目錄:

root@********_arm64:/sys/class # pwd
sys/class/power_supply
root@********_arm64:/sys/class/power_supply # ls
ac
battery
bq24735@5-0009
usb
root@********_arm64:/sys/class/power_supply # cd bq24735@5-0009
cd bq24735@5-0009
root@*********_arm64:/sys/class/power_supply/bq24735@5-0009 # ls
device
online
power
status
subsystem
type
uevent

三、bq24735驅動實現

下面基于某款soc來講解如何讓我們的產品支持bq24735。

1. 硬件連接圖圖

下面是一個典型的bq24735電路連接圖:

當沒有電源供電的時候,bq24735會直接將電池傳遞給降壓電路,給系統供電 當有電源供電的時候,bq24735會給電池充電。

2. 引腳說明

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

3. 寄存器

bq24735用到的寄存器如下:

  • 充電選項寄存器Charge Options Register [reset = 0x12H]。

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

0: AC adapter不在 (ACDET < 2.4 V)  
1: AC adapter存在(ACDET > 2.4 V)

bit:[0]:

0: 使能充電
1: 抑制充電

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

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

通過該寄存器可以設置充電電流。

比如我們要設置充電電流為3072mA。

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

1100 0000 0000

即設置該寄存器值為:0xC00

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

該寄存器設置方法類似于充電電流寄存器

  • 輸入電流Input Current Register (0x3FH)

該寄存器設置方法類似于充電電流寄存器

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

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

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

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

4. 設備樹

bq24735@9 {
compatible = "ti,bq24735";
reg = <0x9>;
ti,ac-detect-gpios = <&gpio 72 0x1>;
ti,charge-current =<0x600>;
ti,charge-voltage=<0x41a0>;
ti,input-current =<0x800>;
}

參數說明:

compatible :用于和驅動的結構體i2c_driver的driver.of_match_table->compatible屬性進行匹配
reg:bq24735從設備地址(I2C)
ti,ac-detect-gpios:中斷使用的gpio,第三個參數是該pin默認電平
ti,charge-current :充電電流
ti,charge-voltage :充電電壓
ti,input-current :輸入電流

5. 驅動講解

  • 驅動文件 內核代碼中已經有該驅動。
drivers\power\bq24735-charger.c

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

該驅動是基于I2C總線,對應結構體變量定義如下:

static struct i2c_driver bq24735_charger_driver = {
.driver = {
.name = "bq24735-charger",
.owner = THIS_MODULE,
.of_match_table = bq24735_match_ids,
},
.probe = bq24735_charger_probe,
.remove = bq24735_charger_remove,
.id_table = bq24735_charger_id,
};
  • 主要函數。
static bool bq24735_charger_is_present(struct bq24735 *charger)
判斷bq24735 是否存在
其實就是讀取寄存器0x12的值,判斷bit[4]值是否為1
static int bq24735_charger_is_charging(struct bq24735 *charger)
判斷bq24735 是否在充電
其實就是讀取寄存器0x12的值,判斷bit[0]值是否為0
static inline int bq24735_enable_charging(struct bq24735 *charger)
使能充電
將寄存器寄存器0x12的bit[0]置0
static inline int bq24735_disable_charging(struct bq24735 *charger)
禁止充電
將寄存器寄存器0x12的bit[0]置1
static int bq24735_config_charger(struct bq24735 *charger)
配置充電電壓(寄存器0x15)、充電電流(寄存器0x14)、輸入電流(寄存器0x3f)
static irqreturn_t bq24735_charger_isr(int irq, void *devid)
中斷處理函數,
當bq24735充電狀態發生變化的時候,會發送中斷給cpu
此時可以通過I2C來讀取寄存器0x12的內容來獲取bq24735當前狀態
static int bq24735_charger_get_property(struct power_supply *psy,
enum power_supply_property psp,
union power_supply_propval *val)
提供給power supply子系統的回調函數
該函數用于獲取bq24735當前狀態

狀態包括
enum {
POWER_SUPPLY_STATUS_UNKNOWN = 0,
POWER_SUPPLY_STATUS_CHARGING, //正在充電
POWER_SUPPLY_STATUS_DISCHARGING,
POWER_SUPPLY_STATUS_NOT_CHARGING,//沒有充電
POWER_SUPPLY_STATUS_FULL,//充滿
};
  • probe流程

此處檢測MANUFACTURER_ID和DEVICE_ID流程稍做了修改,只有bq24735 present的時候才會check并配置。

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

 supply_desc->name = name;
supply_desc->type = POWER_SUPPLY_TYPE_MAINS;
supply_desc->properties = bq24735_charger_properties;
supply_desc->num_properties = ARRAY_SIZE(bq24735_charger_properties);
supply_desc->get_property = bq24735_charger_get_property;
supply_desc->properties
提供給power supply架構可以訪問的命令的集合,
這些命令需要在函數supply_desc->get_property增加對應的命令代碼
supply_desc->get_property
power supply會定時通過該回調函數獲取充電芯片是否在線、是否在充電等狀態
  • 代碼架構:

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

四、 log

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

啟動后再插入電源充電, 插入電源后,bq24735會觸發中斷:

然后再斷開電源停止充電。

責任編輯:武曉燕 來源: 一口Linux
相關推薦

2023-08-08 08:34:47

漏洞環境獲取方法

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2023-04-07 07:42:01

2024-09-30 09:05:46

Linux網絡延遲

2024-08-06 09:47:57

2022-07-08 09:27:48

CSSIFC模型

2023-10-10 11:04:11

Rust難點內存

2024-07-31 08:39:45

Git命令暫存區

2023-12-12 08:02:10

2023-01-30 09:01:54

圖表指南圖形化

2024-05-06 00:00:00

InnoDBView隔離

2023-08-26 21:34:28

Spring源碼自定義

2022-07-13 08:16:49

RocketMQRPC日志

2023-03-26 22:31:29

2023-07-30 22:29:51

BDDMockitoAssert測試
點贊
收藏

51CTO技術棧公眾號

香蕉视频网站在线观看| 国内自拍视频在线播放| 日本99精品| 亚洲h在线观看| 日韩国产精品一区二区三区| 在线观看你懂的网站| 中文字幕免费一区二区| 日韩精品在线电影| 欧美视频国产视频| 18video性欧美19sex高清| 成人动漫在线一区| 国产精品欧美风情| 国产黄色片视频| 成人在线亚洲| 亚洲国产成人精品女人久久久 | 欧美jjzz| 亚洲人成电影在线播放| 亚洲欧美日韩一二三区| 在线天堂资源| 亚洲综合色丁香婷婷六月图片| 欧美日韩精品久久久免费观看| 99国产精品久久久久久久成人| 国产日韩一区二区三区在线播放| 久久精品视频免费播放| 日韩人妻一区二区三区| 一区三区自拍| 欧美老女人在线| 毛片av免费在线观看| 18加网站在线| 国产精品久久久久一区| 欧美13一14另类| 亚洲乱熟女一区二区| 精品一区二区三区视频| 琪琪亚洲精品午夜在线| 久草精品视频在线观看| 一区二区在线影院| 日韩网站免费观看| 在线免费观看黄色小视频| 成人18夜夜网深夜福利网| 欧美巨大另类极品videosbest | 精品国产电影| 亚洲国产精品欧美久久 | 国产性猛交96| 高清一区二区| 欧美一区二区三区喷汁尤物| 老司机午夜性大片| 国产激情欧美| 欧美日韩精品欧美日韩精品一| 少妇人妻互换不带套| 成年美女黄网站色大片不卡| 欧美日韩免费看| 人人妻人人添人人爽欧美一区| 国产精品探花在线| 一区二区三区欧美| 中文精品无码中文字幕无码专区| a毛片在线看免费观看| 91丝袜呻吟高潮美腿白嫩在线观看| 高清国产一区| 国产又大又黑又粗| 极品尤物av久久免费看| 国产精品久久久久久久久久99| 亚洲毛片一区二区三区| 日本视频中文字幕一区二区三区 | 日本黄色成人| 欧美日韩一二区| 三级性生活视频| 试看120秒一区二区三区| 精品少妇一区二区三区视频免付费| 久久久久亚洲av无码麻豆| 日韩在线观看中文字幕| 欧美mv日韩mv| 免费视频爱爱太爽了| 精品一区免费观看| 亚洲国产免费| 26uuu国产精品视频| 黑人一级大毛片| 乱人伦精品视频在线观看| 欧洲精品在线视频| 国产在线一级片| 久久99蜜桃精品| 亚洲精品欧美极品| 成人小说亚洲一区二区三区| 99久久99久久精品免费看蜜桃| 精品麻豆av| 成人影视在线播放| 日韩一区欧美小说| 成人在线国产视频| 超碰超碰人人人人精品| 欧美绝品在线观看成人午夜影视 | 国产精品伊人色| 国产欧美日韩一区二区三区| 你懂的在线免费观看| 国产精品久久久久久久久图文区| 日韩不卡一二区| 岛国av在线播放| 欧美午夜精品久久久久久超碰 | 穿情趣内衣被c到高潮视频| 免费污视频在线观看| 欧美丝袜美女中出在线| 第一区免费在线观看| 丝袜av一区| 欧美成人精品在线播放| 亚洲欧美一区二区三区在线观看| 精品一区二区三区欧美| 蜜桃av久久久亚洲精品| 99久久精品免费观看国产| 91福利资源站| 欧美熟妇精品一区二区蜜桃视频| 日韩a一区二区| 欧美一二三视频| 朝桐光av在线一区二区三区| 中文字幕第一页久久| 日本a视频在线观看| 999色成人| 亚洲天堂av高清| 男人的天堂一区二区| 精品一区二区三区av| 欧美精品二区三区四区免费看视频 | 亚洲啊啊啊啊啊| 成人午夜一级| 亚洲欧美精品在线| 日本系列第一页| 国产精品伊人色| 一区二区三区四区国产| 成人私拍视频| 亚洲国产美女精品久久久久∴| 国产高潮国产高潮久久久91| 日韩国产精品久久久| 精品亚洲第一| 成人女同在线观看| 欧美videofree性高清杂交| 国产麻豆a毛片| 日本中文一区二区三区| 蜜桃av色综合| 极品视频在线| 日韩成人在线视频| 日韩欧美大片在线观看| 盗摄精品av一区二区三区| 自拍偷拍视频在线| 亚洲精品69| 色悠悠久久88| 中文字幕无线码一区| 2021中文字幕一区亚洲| 久久久久久久久久久视频| 粉嫩的18在线观看极品精品| 久久99精品久久久久久噜噜| 国产乱码精品一区二区| 亚洲人成伊人成综合网小说| 久久久久xxxx| 一区二区在线| 国产精品欧美久久| 9999精品成人免费毛片在线看 | 国产欧美日韩中文字幕| 在线视频三区| 欧美精品在欧美一区二区少妇| 九九热免费在线| 麻豆91精品视频| 中文字幕欧美日韩一区二区| 国产精品视频一区二区三区| 久久69精品久久久久久久电影好 | 中文字幕色呦呦| 无码国模国产在线观看| 欧美精品成人在线| 久久综合久中文字幕青草| 亚洲在线精品视频| 亚洲三级在线看| 日本wwwxx| 亚洲麻豆av| 日本高清一区| 亚洲精品无播放器在线播放| 欧美成人合集magnet| 蜜臀av午夜精品| 日韩欧美中文在线| 正在播放国产对白害羞| 国产一区视频网站| 国内精品视频一区二区三区| 九九免费精品视频在线观看| 国产精品免费视频久久久| 黄网页免费在线观看| 精品国产亚洲一区二区三区在线观看| 日韩三级免费看| 欧美激情一区二区三区蜜桃视频 | 无码人妻精品一区二区蜜桃网站| 国产主播性色av福利精品一区| 日产精品久久久一区二区福利| 在线日本中文字幕| 精品国精品自拍自在线| 中文字幕免费观看| 亚洲综合视频在线观看| 日韩中文字幕有码| 国产精品乡下勾搭老头1| 亚洲人成色77777| 亚洲精品一二三区区别| 欧美精品v日韩精品v国产精品| 99re8精品视频在线观看| 91精品国产91| 超碰超碰在线| 亚洲色图在线观看| 亚洲精品久久久久久久久久久久久久| 色久综合一二码| 久久精品国产av一区二区三区| 国产精品欧美精品| 五级黄高潮片90分钟视频| 国产麻豆欧美日韩一区| 日韩欧美xxxx| 亚洲第一网站| 水蜜桃在线免费观看| 欧美一区三区| 久久精品日产第一区二区三区| www一区二区三区| 国产精品99一区| jizzjizz中国精品麻豆| 久久久国产精品x99av| 国产资源在线看| 亚洲第一色中文字幕| 国产精品无码一区二区桃花视频| 色婷婷综合久久久久中文| 国产无精乱码一区二区三区| 亚洲欧美综合在线精品| 国产伦理片在线观看| 91麻豆精东视频| 国产精品亚洲一区二区无码| 久久国产剧场电影| 成人三级视频在线播放 | 国产高清视频网站| 久久国产精品毛片| 91视频 -- 69xx| 亚洲裸体俱乐部裸体舞表演av| 男女裸体影院高潮| 91精品久久久久久久蜜月| 亚洲欧洲精品一区二区| av中文一区| 青青草原成人| 精品成av人一区二区三区| 久久久久久欧美精品色一二三四| 亚洲综合色婷婷在线观看| 91最新国产视频| 久久综合给合| 51国产成人精品午夜福中文下载 | 在线综合视频播放| 中文字幕制服诱惑| 欧美日韩亚洲国产综合| 久久人人爽人人爽人人片av免费| 黑人精品xxx一区一二区| 免费看日韩毛片| 欧美午夜无遮挡| 亚洲成人av影片| 91久久奴性调教| 波多野结衣激情视频| 欧美视频一区二| 国产精品久久久久久免费播放| 欧美男男青年gay1069videost| 一区二区三区午夜| 91麻豆精品国产91久久久使用方法| 国产又粗又猛又爽又黄的| 日韩一区二区视频在线观看| 性网爆门事件集合av| 亚洲精品99久久久久中文字幕| 神马午夜在线观看| 亚洲欧美国内爽妇网| 91精品专区| 久久国产精品视频| 成人ssswww在线播放| 国产精品91一区| 日韩美香港a一级毛片| 51精品国产人成在线观看| 成人激情自拍| 欧美日韩一区二区三| 热久久天天拍国产| 99中文字幕在线观看| 在线精品在线| 日韩视频免费在线播放| 久久se这里有精品| 黄色国产在线视频| 久久久国产综合精品女国产盗摄| 国产一二三四视频| 一卡二卡三卡日韩欧美| 欧美国产成人精品一区二区三区| 欧美视频在线一区二区三区| www.五月天激情| 亚洲欧美综合v| 超碰免费公开在线| 欧美一二三视频| 国语精品视频| 欧美国产一区二区在线| 亚洲破处大片| 激情五月开心婷婷| 国产一区二区日韩精品| 黄瓜视频污在线观看| 亚洲欧洲综合另类| 日本一级一片免费视频| 欧美人与性动xxxx| 香蕉视频免费在线看| www.精品av.com| 一二三四视频在线中文| 91久久国产自产拍夜夜嗨| 国产调教一区二区三区| 日韩黄色片在线| 麻豆91在线看| 久操视频免费看| 亚洲一二三四区| 91久久久久久久久久久久| 亚洲精品乱码久久久久久金桔影视| 麻豆av在线导航| 日本精品免费观看| 国产+成+人+亚洲欧洲在线 | 日韩一级在线| 91插插插影院| 中文字幕国产精品一区二区| 国产午夜福利精品| 日韩视频一区二区在线观看| 成年女人的天堂在线| 91爱视频在线| 91久久精品无嫩草影院| 国产精品夜夜夜爽张柏芝| 日日摸夜夜添夜夜添精品视频| 国产精品扒开腿做爽爽爽a片唱戏| 1024亚洲合集| 中文字幕 自拍偷拍| 国产婷婷成人久久av免费高清 | 国产一级免费片| 亚洲色图视频网| 在线观看免费高清视频| 国产亚洲精品成人av久久ww| 亚洲综合电影| 久久久福利视频| 亚洲精选在线| 中文字幕一区二区三区乱码不卡| 有码一区二区三区| 国产欧美第一页| 美女精品视频一区| 精品久久亚洲| 可以免费看的黄色网址| 紧缚奴在线一区二区三区| 成人性视频免费看| 欧美少妇性性性| 9191在线观看| 国产欧美日韩专区发布| 99热在线成人| 中文字幕av一区二区三区人妻少妇 | 日韩国产在线观看一区| 久久久久久亚洲中文字幕无码| 欧美日韩亚洲一区二区| 欧美孕妇性xxxⅹ精品hd| 欧美一区二区三区艳史| 亚洲综合图色| 黄色国产小视频| 国产精品免费久久久久| 国产免费av电影| 九九久久久久久久久激情| 中文在线综合| 波多野结衣家庭教师在线| 久久品道一品道久久精品| 免费黄色片视频| 色婷婷久久av| 精品国产乱码久久久久久樱花| 九一免费在线观看| aaa国产一区| 91青青草视频| 日韩在线精品视频| 国产亚洲精aa在线看| 欧美狂野激情性xxxx在线观| 99精品视频一区| 波多野结衣在线电影| 久久精品青青大伊人av| 97色成人综合网站| 男人天堂999| 亚洲欧洲日韩一区二区三区| 国产黄色片网站| 57pao国产精品一区| blacked蜜桃精品一区| 夜夜爽久久精品91| 性感美女极品91精品| 国产午夜精品一区理论片| 国产精品一区二区久久国产| 午夜精品电影| 免费成人深夜夜行p站| 欧美丝袜第三区| 黑人玩欧美人三根一起进| 牛人盗摄一区二区三区视频| 韩国一区二区在线观看| 日本三级网站在线观看| 影音先锋欧美精品| 亚洲精品国产九九九| 精品免费国产一区二区| 亚洲免费观看在线视频| 亚洲av片在线观看| 91老司机在线| 亚洲一区区二区| 欧美性x x x| 亚洲九九九在线观看| 韩国一区二区三区视频| 欧美v在线观看| 亚洲欧美国产77777| 可以在线观看的av网站| 国产精品区一区二区三在线播放| 美国欧美日韩国产在线播放| 一区二区三区视频免费看| 日韩中文字幕在线精品| 亚洲国产最新|