當前位置:首頁 > 芯聞號 > 充電吧
[導讀]作者: arunboy在原有展訊平臺下面的bq25601的基礎上編寫mtk平臺下的bq25601代碼,參考mtk平臺下的.并進行相關調試. 充電IC的移植是在kernel和lk里面,lk里面是mt_b

作者: arunboy

在原有展訊平臺下面的bq25601的基礎上編寫mtk平臺下的bq25601代碼,參考mtk平臺下的.并進行相關調試.
充電IC的移植是在kernel和lk里面,lk里面是mt_battery.c中調用了以下幾個函數(shù)

#if?defined(MTK_BQ25601_SUPPORT)
????bq25601_hw_init();
????bq25601_charging_enable(bEnable);
????bq25601_dump_register();
#endif

kernel里面在power/mt6735/Makefile中

ifeq?($(CONFIG_MTK_BQ25601_SUPPORT),y)
????????????????????obj-$(CONFIG_MTK_SMART_BATTERY)?+=?bq25601.o?charging_hw_bq25601.o

首先參考兩個代碼新建了一個文件,把一些接口函數(shù)進行了替換.然后查看數(shù)據(jù)手冊修改數(shù)組,寄存器的值.

圖中的數(shù)組都是查看數(shù)據(jù)手冊然后進行填充,下面那些使用字母的因為在別的文件中定義了數(shù)字.

電池充電有三個階段:預充電階段,恒流充電,恒壓充電.
預充電階段:設置充電電流一般為500mA以下
恒流充電階段:電壓一般在3.2~4.1v左右,充電器的輸入電壓會越來越高
恒壓充電階段:4.2v左右,充電ic輸出電壓不變,電流逐漸減小.

驅動代碼分析

1.bq25601.c

/**********************************************************
??*
??*???[I2C?Slave?Setting]
??*
??*********************************************************/
#define?bq25601_SLAVE_ADDR_WRITE???0xD6//根據(jù)數(shù)據(jù)手冊i2c的地址是0x6b,左移一位以后得到0xd6
#define?bq25601_SLAVE_ADDR_READ????0xD7

static?struct?i2c_client?*new_client;
static?const?struct?i2c_device_id?bq25601_i2c_id[]?=?{?{"bq25601",?0},?{}?};

kal_bool?chargin_hw_init_done?=?KAL_FALSE;
static?int?bq25601_driver_probe(struct?i2c_client?*client,?const?struct?i2c_device_id?*id);

#ifdef?CONFIG_OF
static?const?struct?of_device_id?bq25601_of_match[]?=?{
????{.compatible?=?"bq25601",},
????{},
};

MODULE_DEVICE_TABLE(of,?bq25601_of_match);
#endif

static?struct?i2c_driver?bq25601_driver?=?{
????.driver?=?{
???????????.name?=?"bq25601",
#ifdef?CONFIG_OF
???????????.of_match_table?=?bq25601_of_match,
#endif
???????????},
????.probe?=?bq25601_driver_probe,
????.id_table?=?bq25601_i2c_id,
};

2.charging_hw_bq25601.c

//充電的一些初始化的值,根據(jù)數(shù)據(jù)手冊的某個寄存的的某位代表的什么意思進行設值.
static?unsigned?int?charging_hw_init(void?*data)
{
????unsigned?int?status?=?STATUS_OK;
????battery_log(BAT_LOG_CRTI,?"charging_hw_init!n");
????bq25601_set_en_hiz(0x0);
????bq25601_set_vindpm(0x8);????/*?VIN?DPM?check?4.70V?*/
????//bq25601_set_vindpm(0x0);
????bq25601_set_reg_rst(0x0);
????bq25601_set_wdt_rst(0x1);???/*?Kick?watchdog?*/
????bq25601_set_sys_min(0x5);???/*?Minimum?system?voltage?3.5V?*/
????bq25601_set_iprechg(0x7);???/*?Precharge?current?480mA?*/
????bq25601_set_iterm(0x1);?/*?Termination?current?120mA?*/

????bq25601_set_vreg(0x0B);?/*?VREG?4.208V?*/

????bq25601_set_min_vbat_sel(0x0);??/*?BATLOWV?2.8V?*/
????bq25601_set_vrechg(0x0);????/*?VRECHG?0.1V?(4.108V)?*/
????bq25601_set_en_term(0x1);???/*?Enable?termination?*/
????bq25601_set_watchdog(0x1);??/*?WDT?40s?*/
????bq25601_set_en_timer(0x0);??/*?Disable?charge?timer?*/
????bq25601_set_vindpm_int(0x0);????/*?Disable?fault?vindpm?interrupt?*/
????bq25601_set_iindpm_int(0x0);????/*?Disable?fault?iindpm?interrupt?*/
????bq25601_set_ovp(0x3);
????return?status;
}

然后把這幾個函數(shù)進行填充完整就行,根據(jù)項目需求,有的不需要.

charging_func[CHARGING_CMD_INIT]?=?charging_hw_init;
????????charging_func[CHARGING_CMD_DUMP_REGISTER]?=?charging_dump_register;
????????charging_func[CHARGING_CMD_ENABLE]?=?charging_enable;
????????charging_func[CHARGING_CMD_SET_CV_VOLTAGE]?=?charging_set_cv_voltage;
????????charging_func[CHARGING_CMD_GET_CURRENT]?=?charging_get_current;
????????charging_func[CHARGING_CMD_SET_CURRENT]?=?charging_set_current;
????????charging_func[CHARGING_CMD_SET_INPUT_CURRENT]?=?charging_set_input_current;
????????charging_func[CHARGING_CMD_GET_CHARGING_STATUS]?=??charging_get_charging_status;
????????charging_func[CHARGING_CMD_RESET_WATCH_DOG_TIMER]?=?charging_reset_watch_dog_timer;
????????charging_func[CHARGING_CMD_SET_HV_THRESHOLD]?=?charging_set_hv_threshold;
????????charging_func[CHARGING_CMD_GET_HV_STATUS]?=?charging_get_hv_status;
????????charging_func[CHARGING_CMD_GET_BATTERY_STATUS]?=?charging_get_battery_status;
????????charging_func[CHARGING_CMD_GET_CHARGER_DET_STATUS]?=?charging_get_charger_det_status;
????????charging_func[CHARGING_CMD_GET_CHARGER_TYPE]?=?charging_get_charger_type;
????????charging_func[CHARGING_CMD_SET_PLATFORM_RESET]?=?charging_set_platform_reset;
????????charging_func[CHARGING_CMD_GET_PLATFORM_BOOT_MODE]?=?charging_get_platform_boot_mode;
????????charging_func[CHARGING_CMD_SET_POWER_OFF]?=?charging_set_power_off;
????????charging_func[CHARGING_CMD_SET_TA_CURRENT_PATTERN]?=?charging_set_ta_current_pattern;
????????charging_func[CHARGING_CMD_SET_ERROR_STATE]?=?charging_set_error_state;
????????charging_func[CHARGING_CMD_DISO_INIT]?=?charging_diso_init;
????????charging_func[CHARGING_CMD_GET_DISO_STATE]?=?charging_get_diso_state;
????????charging_func[CHARGING_CMD_SET_VBUS_OVP_EN]?=?charging_set_vbus_ovp_en;
????????charging_func[CHARGING_CMD_SET_VINDPM]?=?charging_set_vindpm;

主要記錄兩個函數(shù),i2c的讀寫數(shù)據(jù)的函數(shù):

int?bq25601_read_byte(unsigned?char?cmd,?unsigned?char?*returnData)
{
????char?cmd_buf[1]?=?{?0x00?};
????char?readData?=?0;
????int?ret?=?0;

????mutex_lock(&bq25601_i2c_access);

????/*?new_client->addr?=?((new_client->addr)?&?I2C_MASK_FLAG)?|?I2C_WR_FLAG;?*/
????new_client->ext_flag?=
????????((new_client->ext_flag)?&?I2C_MASK_FLAG)?|?I2C_WR_FLAG?|?I2C_DIRECTION_FLAG;

????cmd_buf[0]?=?cmd;
????ret?=?i2c_master_send(new_client,?&cmd_buf[0],?(1?<<?8?|?1));
????if?(ret?<?0)?{
????????/*?new_client->addr?=?new_client->addr?&?I2C_MASK_FLAG;?*/
????????new_client->ext_flag?=?0;

????????mutex_unlock(&bq25601_i2c_access);
????????return?0;
????}

????readData?=?cmd_buf[0];
????*returnData?=?readData;

????/*?new_client->addr?=?new_client->addr?&?I2C_MASK_FLAG;?*/
????new_client->ext_flag?=?0;

????mutex_unlock(&bq25601_i2c_access);
????return?1;
}

int?bq25601_write_byte(unsigned?char?cmd,?unsigned?char?writeData)
{
????char?write_data[2]?=?{?0?};
????int?ret?=?0;

????mutex_lock(&bq25601_i2c_access);

????write_data[0]?=?cmd;
????write_data[1]?=?writeData;

????new_client->ext_flag?=?((new_client->ext_flag)?&?I2C_MASK_FLAG)?|?I2C_DIRECTION_FLAG;

????ret?=?i2c_master_send(new_client,?write_data,?2);
????if?(ret?<?0)?{
????????new_client->ext_flag?=?0;
????????mutex_unlock(&bq25601_i2c_access);
????????return?0;
????}

????new_client->ext_flag?=?0;
????mutex_unlock(&bq25601_i2c_access);
????return?1;
}

3.對于lk里面,就是實現(xiàn) ? bq25601_hw_init(),bq25601_charging_enable(bEnable),bq25601_dump_register()這三個函數(shù),基本上和kernel里面的差不多.
4.參考數(shù)據(jù)手冊幾個有關充電IC的參數(shù)
Termination Current ? ? 截止電流,一般設置為200mA以下
Charge Voltage ? ? ? ? ? ? ?充電IC的輸出電壓
Precharge current ? ? ? ? ?預充電電流,一般設置為500mA以下
VAG OVP 最高電壓,bq25601可以支持到14v
Absolute VINDPM Threshold 充電IC的最高輸出

總結

編寫調試驅動代碼一定要認真,特別注意宏定義,加上了沒,有沒有把以前的宏定義注釋掉,而且要查看一下有沒有在Makefile,Kconfig中添加修改,報錯的話要看錯誤提示,然后去查錯誤類型,有的報的這個地方的錯誤但是錯誤不在這個文件當中.
kernel-3.18/arch/arm64/boot/dts/project_bat_setting.dtsi可以配置電池曲線,充電屬性等相關配置.注意還有一個電阻值的配置,如果與硬件不匹配,會導致誤差較大.

問題

pmic檢測充電器狀態(tài)不對,改用了通過讀取充電IC的寄存器的狀態(tài)來判斷是否在充電.查尋datasheet后可以看到在REG08里面讀取.

添加如下檢測代碼:

????stat?=?bq25601_get_vbus_stat();
????if?(stat?==?0x1?||?stat?==?0x2)
????????val?=?KAL_TRUE;
????else
????????val?=?KAL_FALSE;

充電IC的配置

1 device下面的配置
2 kernel 里面的config和dts(i2c地址) ? PS:盡量保證user版和debug版一塊修改.
3 lk里面的config
4 preloader里面的config ?
END

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉