From b8490e03075e0ebec66c45909b9ae83e341dba3e Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Sat, 8 Nov 2025 18:23:55 +0800 Subject: [PATCH] =?utf8?q?=E6=9B=B4=E6=96=B0272=E7=94=B5=E6=B1=A0=E6=9B=B2?= =?utf8?q?=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../brandy/brandy_standard/thread_pri_init.c | 3 - code/sdk/zhihui/drivers/charge/CMakeLists.txt | 1 + .../sdk/zhihui/drivers/charge/hp4570/hp4570.c | 30 +- .../sdk/zhihui/drivers/charge/hp4570/hp4570.h | 381 +++++++++++++++--- .../drivers/rotary_encoder/hx3508/hx3508.c | 6 + .../battery/service/battery_driver.cpp | 24 ++ .../battery/service/battery_service.cpp | 9 + 7 files changed, 380 insertions(+), 74 deletions(-) diff --git a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c index 0994dad68..e4ecda8d6 100644 --- a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c +++ b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c @@ -567,9 +567,6 @@ static void thread_main(const void *unused) #ifdef ENABLE_CUSTOM_I2C // custom_i2c_init(I2C_BUS_3); -#ifdef BOARD_FD272 - custom_i2c_init(I2C_BUS_0); -#endif custom_i2c_init(I2C_BUS_2); #ifdef SUPPORT_CYWEE_SERVICE diff --git a/code/sdk/zhihui/drivers/charge/CMakeLists.txt b/code/sdk/zhihui/drivers/charge/CMakeLists.txt index 6039880af..be09e97a4 100644 --- a/code/sdk/zhihui/drivers/charge/CMakeLists.txt +++ b/code/sdk/zhihui/drivers/charge/CMakeLists.txt @@ -26,6 +26,7 @@ set(PRIVATE_DEFINES set(PUBLIC_DEFINES SUPPORT_AT_CHARGE +ENABLE_HP4570 ) # use this when you want to add ccflags like -include xxx diff --git a/code/sdk/zhihui/drivers/charge/hp4570/hp4570.c b/code/sdk/zhihui/drivers/charge/hp4570/hp4570.c index f7120d838..b6289a358 100644 --- a/code/sdk/zhihui/drivers/charge/hp4570/hp4570.c +++ b/code/sdk/zhihui/drivers/charge/hp4570/hp4570.c @@ -70,6 +70,8 @@ bool hp45xxx_read_reg(uint8_t reg, uint8_t *value) // Initialize HP4570 chip bool hp45xxx_init(uint8_t chip_ver) { + custom_i2c_init(HP4570_I2C_BUS); + switch (chip_ver){ case HP4570K: hp45xxx_i2c_addr = HP4570K_I2C_ADDR; @@ -87,14 +89,26 @@ bool hp45xxx_init(uint8_t chip_ver) // hp45xxx_reg_rst(); // Add initialization code here, such as configuring registers hp45xxx_set_ceb_en(true); - if( hp45xxx_set_chrg_vbat_mV(4012.5) - // && - // hp45xxx_set_chrg_ipre_mA(34) && - // hp45xxx_set_chrg_ichg_mA(200) && - // hp45xxx_set_chrg_iterm_mA(34) && - // hp45xxx_set_iindpm_mA(1000) && - // hp45xxx_set_vin_min_mV(3800) - ) + int ret = hp45xxx_set_chrg_vbat_mV(4374.0); + printf("hp45xxx_set_chrg_vbat_mV ret:%d\n",ret); + + ret = hp45xxx_set_chrg_ichg_mA(400); + printf("hp45xxx_set_chrg_ichg_mA(400) ret:%d\n",ret); + + ret = hp45xxx_set_chrg_iterm_mA(34); + printf("hp45xxx_set_chrg_iterm_mA(34) ret:%d\n",ret); + + ret = hp45xxx_set_iindpm_mA(1000); + printf("hp45xxx_set_iindpm_mA(1000) ret:%d\n",ret); + + // if( hp45xxx_set_chrg_vbat_mV(4374.0) + // && + // hp45xxx_set_chrg_ipre_mA(34) && + // hp45xxx_set_chrg_ichg_mA(400) && + // hp45xxx_set_chrg_iterm_mA(34) && + // hp45xxx_set_iindpm_mA(1000) + // // hp45xxx_set_vin_min_mV(3800) + // ) return SUCCESS; return FAIL; } diff --git a/code/sdk/zhihui/drivers/charge/hp4570/hp4570.h b/code/sdk/zhihui/drivers/charge/hp4570/hp4570.h index 320625dca..1dee10411 100644 --- a/code/sdk/zhihui/drivers/charge/hp4570/hp4570.h +++ b/code/sdk/zhihui/drivers/charge/hp4570/hp4570.h @@ -408,99 +408,354 @@ static const uint16_t hp45xxx_t_hiccup_time[HP45XXX_NUM_T_HICCUP_VAL] = { #define HP4570J_REG_SYS_CTRL0_DEF 0xAC -// Function Declarations +// 函数声明 +// 芯片初始化:初始化指定型号的HP45XXX芯片(如HP4570A),完成I2C通信配置及寄存器默认值设置 +// 返回值:true表示初始化成功,false表示失败 bool hp45xxx_init(uint8_t chip_ver); + +// 芯片识别:验证I2C总线上是否存在目标型号的HP45XXX芯片,确认通信正常 +// 返回值:true表示识别成功(芯片存在),false表示识别失败 bool hp45xxx_identify(uint8_t chip_ver); -void hp45xxx_set_pwrkey_en(bool en);// PWRKEY function enable control -bool hp45xxx_set_trst_dgl_mS(uint32_t time);// Pull INT low to disconnect the battery then auto on -void hp45xxx_reg_rst(void);// Register reset -void hp45xxx_wdt_rst(void);// Watchdog timer reset -void hp45xxx_vsys_rst(void);// VSYS reset -void hp45xxx_set_rst_vin_entry_en(bool en);// VIN 4 pulse Reset Enable -void hp45xxx_set_rst_pwrkey_en(bool en);// VSYS reset enable PWRKEY operation Enable -void hp45xxx_set_rst_vsys_wvbus_en(bool en);// VSYS reset operation when VBUS is present +// 设置PWRKEY功能使能:开启或关闭PWRKEY引脚的唤醒、复位等功能 +// 参数en:true=使能,false=禁用 +void hp45xxx_set_pwrkey_en(bool en); + +// 设置复位消抖时间:配置拉低INT引脚断开电池后自动开机的消抖时间(防止误触发) +// 参数time:目标消抖时间(单位:毫秒) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_trst_dgl_mS(uint32_t time); + + +// 寄存器复位:将所有配置寄存器恢复为默认值(软件复位) +void hp45xxx_reg_rst(void); + +// 看门狗复位:重置看门狗定时器(避免因超时触发系统复位) +void hp45xxx_wdt_rst(void); + +// VSYS复位:触发系统电压(VSYS)复位,重启整个供电系统 +void hp45xxx_vsys_rst(void); + +// 使能VIN输入脉冲复位:开启/关闭通过VIN引脚的4次脉冲信号触发复位的功能 +// 参数en:true=使能,false=禁用 +void hp45xxx_set_rst_vin_entry_en(bool en); + +// 使能PWRKEY复位功能:开启/关闭通过PWRKEY引脚操作触发VSYS复位的功能 +// 参数en:true=使能,false=禁用 +void hp45xxx_set_rst_pwrkey_en(bool en); + +// 使能VBUS存在时VSYS复位:开启/关闭当VBUS(外部电源)接入时允许VSYS复位的功能 +// 参数en:true=使能,false=禁用 +void hp45xxx_set_rst_vsys_wvbus_en(bool en); + +// 进入船运模式:使芯片进入低功耗休眠状态(仅特定条件可唤醒,如VBUS插入、PWRKEY触发) void hp45xxx_entry_shipmode(void); -bool hp45xxx_set_batfet_dis(bool en);// BATFET force off -void hp45xxx_set_vbus_wk_en(bool en);// VBUS plug in to exit ship mode -void hp45xxx_set_pwrkey_wk_en(bool en);// PWRKEY be low to exit ship mode -bool hp45xxx_set_vin_exit_ship_tset_mS(uint16_t time);// IN Port Power Good Time Setting for Exit Shipmode -bool hp45xxx_set_key_wk_time_mS(uint16_t time);// KEY wake up time set -void hp45xxx_set_ship_dgl_en(bool en);// Enter ship mode deglitch enable control -bool hp45xxx_set_ship_dgl_mS(uint16_t time);// Enter ship mode deglitch time + +// 强制关闭BATFET:断开电池与系统的连接(用于紧急断电或保护场景) +// 参数en:true=强制关闭,false=正常工作(允许电池供电) +// 返回值:true表示配置成功,false表示失败 +bool hp45xxx_set_batfet_dis(bool en); + +// 使能VBUS唤醒功能:开启/关闭通过插入VBUS(外部电源)唤醒船运模式的功能 +// 参数en:true=使能,false=禁用 +void hp45xxx_set_vbus_wk_en(bool en); + +// 使能PWRKEY唤醒功能:开启/关闭通过拉低PWRKEY引脚唤醒船运模式的功能 +// 参数en:true=使能,false=禁用 +void hp45xxx_set_pwrkey_wk_en(bool en); + +// 设置VIN唤醒船运模式的延时:配置VIN端口检测到有效电源后,延迟多久退出船运模式 +// 参数time:目标延时时间(单位:毫秒) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_vin_exit_ship_tset_mS(uint16_t time); + +// 设置PWRKEY唤醒时间:配置PWRKEY引脚需要保持低电平多久才能唤醒系统 +// 参数time:目标时间(单位:毫秒) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_key_wk_time_mS(uint16_t time); + +// 使能船运模式消抖:开启/关闭进入船运模式时的信号消抖功能(防止误触发) +// 参数en:true=使能,false=禁用 +void hp45xxx_set_ship_dgl_en(bool en); + +// 设置船运模式消抖时间:配置进入船运模式前的信号稳定时间(过滤毛刺) +// 参数time:目标消抖时间(单位:毫秒) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_ship_dgl_mS(uint16_t time); + + +// 使能VBUS高阻模式:开启/关闭VBUS电源路径的高阻状态(断开VBUS与系统的连接) +// 参数en:true=使能高阻,false=正常导通 +void hp45xxx_set_hiz_en(bool en); + +// 使能充电功能:开启/关闭芯片的充电功能(控制是否对电池充电) +// 参数en:true=允许充电,false=禁止充电 +void hp45xxx_set_ceb_en(bool en); -void hp45xxx_set_hiz_en(bool en);// VBUS power path Hi-Z mode enable -void hp45xxx_set_ceb_en(bool en);// Enable or disable charging function +// 设置VSYS输出电压:配置系统电压(VSYS)的稳压值 +// 参数voltage:目标电压(单位:毫伏,如4200表示4.2V) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_vsys_reg_mV(float voltage); -bool hp45xxx_set_vsys_reg_mV(float voltage);// VSYS regulation -bool hp45xxx_set_trst_dur_mS(uint16_t time);// VSYS off time before auto on +// 设置复位持续时间:配置VSYS关闭后,经过多久自动开机 +// 参数time:目标持续时间(单位:毫秒) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_trst_dur_mS(uint16_t time); + +// 使能输入电压DPM:开启/关闭输入电压动态功率管理(防止输入电压过低) +// 参数en:true=使能,false=禁用 void hp45xxx_set_vindpm_en(bool en); + +// 使能输入电流DPM:开启/关闭输入电流动态功率管理(防止输入电流过大) +// 参数en:true=使能,false=禁用 void hp45xxx_set_iindpm_en(bool en); + +// 设置输入电压DPM阈值:配置输入电压的保护阈值(低于此值触发功率限制) +// 参数voltage:目标阈值(单位:毫伏) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp45xxx_set_vindpm_mV(uint16_t voltage); + +// 设置输入电流DPM阈值:配置输入电流的保护阈值(超过此值触发功率限制) +// 参数current:目标阈值(单位:毫安) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp45xxx_set_iindpm_mA(uint16_t current); -bool hp45xxx_set_chrg_vpre_mV(uint8_t voltage);// Battery pre-charge voltage set + +// 设置预充电电压:配置电池预充电阶段的目标电压(适用于电池电压较低时) +// 参数voltage:目标电压(单位:毫伏) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_chrg_vpre_mV(uint8_t voltage); + +// 设置电池满充电压:配置电池快充阶段的目标电压(电池充满时的电压) +// 参数voltage:目标电压(单位:毫伏,如4350表示4.35V) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp45xxx_set_chrg_vbat_mV(float voltage); -bool hp45xxx_set_chrg_vre_mV(uint8_t voltage);// Battery re-charge voltage set + +// 设置复充电压:配置电池放电至该电压后,重新开始充电的阈值 +// 参数voltage:目标电压(单位:毫伏) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_chrg_vre_mV(uint8_t voltage); + +// 设置深度放电充电电流:配置电池深度放电(电压极低)时的充电电流 +// 参数current:目标电流(单位:毫安) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp45xxx_set_chrg_idead_mA(uint16_t current); -bool hp45xxx_set_chrg_ipre_mA(uint16_t current);// Battery pre-charge current set + +// 设置预充电电流:配置电池预充电阶段的充电电流(适用于电池电压较低时) +// 参数current:目标电流(单位:毫安) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_chrg_ipre_mA(uint16_t current); + +// 设置快充电流:配置电池快充阶段的充电电流(主要充电阶段的电流) +// 参数current:目标电流(单位:毫安) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp45xxx_set_chrg_ichg_mA(uint16_t current); + +// HP4570I型号专用快充电流设置:针对HP4570I型号的快充电流配置(该型号电流范围不同) +// 参数current:目标电流(单位:毫安) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp4570i_set_chrg_ichg_mA(uint16_t current); + +// 设置充电终止电流:当充电电流低于该值时,判定为电池充满(结束充电) +// 参数current:目标电流(单位:毫安) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp45xxx_set_chrg_iterm_mA(uint8_t current); -void hp45xxx_set_chrg_term_en(bool en);// Termination is allowed or not -void hp45xxx_set_chrg_term_tmr(bool en);// Termination timer control -void hp45xxx_set_chrg_timer_en(bool en);// Safety timer set during charging -bool hp45xxx_set_chrg_timer_hour(uint8_t time);// Fast charging mode timer set -void hp45xxx_set_chrg_tmr2x_en(bool en);// Safety timer double during DPM/Thermal +// 使能充电终止功能:允许/禁止根据终止电流判断充电完成的功能 +// 参数en:true=允许终止,false=禁止终止(持续充电) +void hp45xxx_set_chrg_term_en(bool en); + +// 使能终止定时器:开启/关闭充电终止阶段的定时器(确保终止判断稳定) +// 参数en:true=使能,false=禁用 +void hp45xxx_set_chrg_term_tmr(bool en); + +// 使能充电安全定时器:开启/关闭充电过程中的安全定时器(防止过充) +// 参数en:true=使能(超时后停止充电),false=禁用 +void hp45xxx_set_chrg_timer_en(bool en); + +// 设置快充定时器时长:配置快充阶段的最大允许时间(超时后进入保护) +// 参数time:目标时间(单位:小时,如3表示3小时) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_chrg_timer_hour(uint8_t time); + +// 使能安全定时器加倍:开启/关闭在DPM或 thermal模式下,安全定时器时长加倍的功能 +// 参数en:true=使能(延长保护时间),false=禁用 +void hp45xxx_set_chrg_tmr2x_en(bool en); + + +// 设置电池FET过流保护阈值:配置BATFET(电池通路开关)的过流保护电流 +// 参数current:目标阈值(单位:毫安) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp45xxx_set_ibatfet_ocp_mA(uint16_t current); -bool hp45xxx_set_vbat_uvlo_mV(uint16_t voltage);// Battery UVLO falling threshold,hys is about =150mV -bool hp45xxx_set_t_hiccup_mS(uint16_t time);// Hiccup timer set -void hp45xxx_set_wdt_timer_en(bool en);// If watchdog timer already enable, function will do noting, otherwise will set as default +// 设置电池欠压锁定阈值:配置电池电压低于该值时触发欠压保护(停止放电) +// 注:回差约为150mV(电压回升至阈值+150mV时解除保护) +// 参数voltage:目标阈值(单位:毫伏) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_vbat_uvlo_mV(uint16_t voltage); + +// 设置打嗝模式定时器:配置过流保护时的打嗝间隔时间(保护期间的重试间隔) +// 参数time:目标时间(单位:毫秒) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_t_hiccup_mS(uint16_t time); + + +// 使能看门狗定时器:开启/关闭看门狗功能(若已使能则不操作,否则按默认值配置) +// 参数en:true=使能,false=禁用 +void hp45xxx_set_wdt_timer_en(bool en); + +// 设置看门狗超时时间:配置看门狗定时器的超时阈值(超过此时长未喂狗则触发复位) +// 参数time:目标时间(单位:毫秒) +// 返回值:true表示配置成功,false表示参数超出范围 bool hp45xxx_set_wdt_timer_mS(uint32_t time); -void hp45xxx_set_wdt_chg_en(bool en);// Watchdog timer function enable control during charging -void hp45xxx_set_wdt_dsg_en(bool en);// Watchdog timer function enable control during discharging -void hp45xxx_set_wdt_vsys_rst_en(bool en);// Watch dog fault VSYS reset enable control - -void hp45xxx_set_ntc_en(bool en);// NTC enable during charging -void hp45xxx_set_pcb_otp_en(bool en);// PCB_OTP enable -bool hp45xxx_set_thermal_reg_degree(uint8_t degree);// Die temp control by Thermal loop - -void hp45xxx_set_int_pg_en(bool en);// Power good int enable control -void hp45xxx_set_int_chrg_done_en(bool en);// Charge complete int enable control -void hp45xxx_set_int_chrg_stat_en(bool en);// Charging status dynamic change int enable control -void hp45xxx_set_int_ntc_transition_en(bool en);// Battery temp region change int enable control -void hp45xxx_set_int_batovp_en(bool en);// Battery OVP int enable control -void hp45xxx_set_int_wdt_en(bool en);// Watch dog time expire int enable control -void hp45xxx_set_int_chg_safety_expired_en(bool en);// Charger enter safety int enable control +// 使能充电阶段看门狗:开启/关闭充电过程中的看门狗功能 +// 参数en:true=使能,false=禁用 +void hp45xxx_set_wdt_chg_en(bool en); + +// 使能放电阶段看门狗:开启/关闭放电过程中的看门狗功能 +// 参数en:true=使能,false=禁用 +void hp45xxx_set_wdt_dsg_en(bool en); + +// 使能看门狗VSYS复位:开启/关闭看门狗超时后触发VSYS复位的功能 +// 参数en:true=使能(超时复位),false=禁用(仅触发中断) +void hp45xxx_set_wdt_vsys_rst_en(bool en); + + +// 使能NTC温度检测:开启/关闭充电过程中对电池温度(通过NTC)的监测 +// 参数en:true=使能(温度异常时停止充电),false=禁用 +void hp45xxx_set_ntc_en(bool en); + +// 使能PCB过温保护:开启/关闭PCB板的过温保护功能 +// 参数en:true=使能(PCB过热时触发保护),false=禁用 +void hp45xxx_set_pcb_otp_en(bool en); + +// 设置芯片热调节温度:配置芯片内部温度达到该值时触发热调节(降低充电电流) +// 参数degree:目标温度(单位:摄氏度,如80表示80℃) +// 返回值:true表示配置成功,false表示参数超出范围 +bool hp45xxx_set_thermal_reg_degree(uint8_t degree); + + +// 使能电源良好中断:开启/关闭VBUS电源良好状态变化的中断 +// 参数en:true=使能中断,false=禁用 +void hp45xxx_set_int_pg_en(bool en); + +// 使能充电完成中断:开启/关闭电池充电完成的中断(充电状态变为“完成”时触发) +// 参数en:true=使能中断,false=禁用 +void hp45xxx_set_int_chrg_done_en(bool en); + +// 使能充电状态变化中断:开启/关闭充电状态动态切换的中断(如预充→快充) +// 参数en:true=使能中断,false=禁用 +void hp45xxx_set_int_chrg_stat_en(bool en); + +// 使能NTC温度区间变化中断:开启/关闭电池温度区间切换的中断(如正常→高温) +// 参数en:true=使能中断,false=禁用 +void hp45xxx_set_int_ntc_transition_en(bool en); + +// 使能电池过压中断:开启/关闭电池过压保护的中断(电池电压过高时触发) +// 参数en:true=使能中断,false=禁用 +void hp45xxx_set_int_batovp_en(bool en); + +// 使能看门狗超时中断:开启/关闭看门狗定时器超时的中断 +// 参数en:true=使能中断,false=禁用 +void hp45xxx_set_int_wdt_en(bool en); + +// 使能充电安全超时中断:开启/关闭充电安全定时器超时(进入安全模式)的中断 +// 参数en:true=使能中断,false=禁用 +void hp45xxx_set_int_chg_safety_expired_en(bool en); + + +// 读取充电状态:判断当前是否处于“未充电”状态 +// 返回值:true=未充电,false=正在充电或已完成 bool hp45xxx_read_chrg_stat_not_chrg(void); + +// 读取充电状态:判断当前是否处于“深度放电充电”状态(电池电压极低时的小电流充电) +// 返回值:true=深度放电充电,false=其他状态 bool hp45xxx_read_chrg_stat_dead_chrg(void); + +// 读取充电状态:判断当前是否处于“预充电”状态(电池电压较低时的过渡充电阶段) +// 返回值:true=预充电,false=其他状态 bool hp45xxx_read_chrg_stat_pre_chrg(void); + +// 读取充电状态:判断当前是否处于“快速充电”状态(主要充电阶段) +// 返回值:true=快充中,false=其他状态 bool hp45xxx_read_chrg_stat_fast_chrg(void); + +// 读取充电状态:判断当前是否处于“充电完成”状态 +// 返回值:true=充电完成,false=未完成 bool hp45xxx_read_chrg_stat_chrg_done(void); -bool hp45xxx_read_status_wdt_fault(void);// Watchdog timer expired 1: Expired; 0: Not Expired -bool hp45xxx_read_status_vindpm(void);// 1: In DPM; 0: Not DPM -bool hp45xxx_read_status_vbus_pg(void);// 1: Power Good; 0: Not Good -bool hp45xxx_read_status_thermal(void);// 1: In thermal; 0: Not thermal -bool hp45xxx_read_status_vin_fault(void);// 1: Input fault ovp or bad source plug out; 0: normal -bool hp45xxx_read_status_tshut(void);// 1: Thermal shutdown; 0: Normal -bool hp45xxx_read_status_vbat_ovp(void);// 1: BAT_OVP; 0: Not BAT_OVP -bool hp45xxx_read_status_safety_mode(void);// Charger safety timer expired 1: Expired; 0: Not Expired -bool hp45xxx_read_status_ntc_hot(void);// 1: Hot; 0: Not hot -bool hp45xxx_read_status_ntc_cold(void);// 1: Cold; 0: Not cold -bool hp45xxx_read_status_iindpm(void);// 1: In DPM; 0: Not DPM -bool hp45xxx_read_status_vin_entry_rst(void);// VIN_ENTRY_RST once happenned -bool hp45xxx_read_status_pwrkey_rst(void);// PWRKEY reset once happened -bool hp45xxx_read_status_hiccup_latch(void);// Hiccup once happened -bool hp45xxx_read_status_pwrkey_wk(void);// PWRKEY 2S low time wake up from ship mode -bool hp45xxx_read_status_vbus_wk(void);// VBUS plug in wake up from ship mode -bool hp45xxx_read_status_watchdog_int(void);// Watch dog time expire IRQ + +// 读取看门狗故障状态:判断看门狗定时器是否已超时 +// 返回值:true=已超时(故障),false=未超时(正常) +bool hp45xxx_read_status_wdt_fault(void); + +// 读取输入电压DPM状态:判断是否因输入电压过低进入DPM模式 +// 返回值:true=处于DPM模式,false=正常模式 +bool hp45xxx_read_status_vindpm(void); + +// 读取VBUS电源状态:判断VBUS(外部电源)是否处于“电源良好”状态 +// 返回值:true=电源良好(电压/电流正常),false=电源异常 +bool hp45xxx_read_status_vbus_pg(void); + +// 读取芯片热调节状态:判断芯片是否因过热进入热调节模式 +// 返回值:true=处于热调节(降低功率),false=正常散热 +bool hp45xxx_read_status_thermal(void); + +// 读取输入故障状态:判断VIN(输入电压)是否存在故障(过压或电源断开) +// 返回值:true=存在故障,false=正常 +bool hp45xxx_read_status_vin_fault(void); + +// 读取芯片热关断状态:判断芯片是否因过热进入热关断模式 +// 返回值:true=已热关断(停止工作),false=正常工作 +bool hp45xxx_read_status_tshut(void); + +// 读取电池过压状态:判断电池是否处于过压保护状态 +// 返回值:true=电池过压,false=电压正常 +bool hp45xxx_read_status_vbat_ovp(void); + +// 读取充电安全模式状态:判断充电安全定时器是否已超时(进入安全模式) +// 返回值:true=已超时(安全模式),false=未超时(正常充电) +bool hp45xxx_read_status_safety_mode(void); + +// 读取NTC高温状态:判断电池是否处于NTC检测的“高温”区间 +// 返回值:true=电池过热,false=温度正常 +bool hp45xxx_read_status_ntc_hot(void); + +// 读取NTC低温状态:判断电池是否处于NTC检测的“低温”区间 +// 返回值:true=电池过冷,false=温度正常 +bool hp45xxx_read_status_ntc_cold(void); + +// 读取输入电流DPM状态:判断是否因输入电流过大进入DPM模式 +// 返回值:true=处于DPM模式,false=正常模式 +bool hp45xxx_read_status_iindpm(void); + +// 读取VIN输入复位状态:判断是否发生过VIN脉冲触发的复位 +// 返回值:true=发生过,false=未发生 +bool hp45xxx_read_status_vin_entry_rst(void); + +// 读取PWRKEY复位状态:判断是否发生过PWRKEY触发的复位 +// 返回值:true=发生过,false=未发生 +bool hp45xxx_read_status_pwrkey_rst(void); + +// 读取打嗝保护状态:判断是否发生过打嗝模式(过流保护重试) +// 返回值:true=发生过,false=未发生 +bool hp45xxx_read_status_hiccup_latch(void); + +// 读取PWRKEY唤醒状态:判断是否通过PWRKEY引脚拉低2秒唤醒系统(从船运模式) +// 返回值:true=已唤醒,false=未唤醒 +bool hp45xxx_read_status_pwrkey_wk(void); + +// 读取VBUS唤醒状态:判断是否通过插入VBUS唤醒系统(从船运模式) +// 返回值:true=已唤醒,false=未唤醒 +bool hp45xxx_read_status_vbus_wk(void); + +// 读取看门狗中断状态:判断是否发生过看门狗超时中断 +// 返回值:true=发生过中断,false=未发生 +bool hp45xxx_read_status_watchdog_int(void); uint8_t hp4507_get_id(void); diff --git a/code/sdk/zhihui/drivers/rotary_encoder/hx3508/hx3508.c b/code/sdk/zhihui/drivers/rotary_encoder/hx3508/hx3508.c index fd422189e..490deafdc 100644 --- a/code/sdk/zhihui/drivers/rotary_encoder/hx3508/hx3508.c +++ b/code/sdk/zhihui/drivers/rotary_encoder/hx3508/hx3508.c @@ -69,6 +69,8 @@ static osTimerId_t g_hx3508_timer = NULL; extern encoder_callback g_encoder_callback; +static uint8_t ost_init = 0; + /*--------以下为定时函数相关定义 建立/启动/停止定时器//定时中断处理-----------*/ @@ -604,6 +606,10 @@ void crown_com_resync(void) */ void ots_init(void) { + if(ost_init == 1) + return; + + ost_init = 1; //此时要保证芯片已经正常上电 // uapi_gpio_set_dir(PIN_TYHX_SDIO,GPIO_DIRECTION_OUTPUT); diff --git a/code/sdk/zhihui/services/battery/service/battery_driver.cpp b/code/sdk/zhihui/services/battery/service/battery_driver.cpp index c11b77afa..829b4a707 100644 --- a/code/sdk/zhihui/services/battery/service/battery_driver.cpp +++ b/code/sdk/zhihui/services/battery/service/battery_driver.cpp @@ -255,6 +255,28 @@ float battery_percent_map[][2]={ {3.380,10}, {3.330,5}, {3.3,0} +#elif defined BOARD_FD272 + {4.374, 100}, + {4.186, 95}, + {4.167, 90}, + {4.148, 85}, + {4.121, 80}, + {4.092, 75}, + {4.064, 70}, + {4.023, 65}, + {3.981, 60}, + {3.939, 55}, + {3.896, 50}, + {3.846, 45}, + {3.785, 40}, + {3.715, 35}, + {3.652, 30}, + {3.583, 25}, + {3.505, 20}, + {3.441, 15}, + {3.382, 10}, + {3.335, 5}, + {3.3, 0} #else {4.3,100}, {4.264,95}, @@ -282,6 +304,8 @@ float battery_percent_map[][2]={ #ifdef BOARD_LEINIAO #define batteryservice_VOLTAGE_MAX (4.2f) +#elif defined BOARD_FD272 +#define batteryservice_VOLTAGE_MAX (4.374f) #else #define batteryservice_VOLTAGE_MAX (4.3f) #endif diff --git a/code/sdk/zhihui/services/battery/service/battery_service.cpp b/code/sdk/zhihui/services/battery/service/battery_service.cpp index 331fccd18..64348f22c 100644 --- a/code/sdk/zhihui/services/battery/service/battery_service.cpp +++ b/code/sdk/zhihui/services/battery/service/battery_service.cpp @@ -41,6 +41,10 @@ extern "C" { #include "debug_print.h" +#ifdef ENABLE_HP4570 +#include "hp4570.h" +#endif + // #include "cat1_utils.h" // #include "cywee_service.h" @@ -716,6 +720,11 @@ errcode_t uapi_battery_init(void) /**下面初始化电池基本数据,充电线基本状态*/ uapi_register_charger_event_callback(battery_charger_plug_event_callback); +#ifdef ENABLE_HP4570 + + hp45xxx_init(HP4570C9); +#endif + //开始timer battery_timer_start_check_released(CHARGE_CHECK_TIMER_CYCLE_MS); // PRINT("uapi_battery_init end!\r\n"); -- 2.17.1