From 24dad4f1baa312bf90ab8316d6380c71e502fa15 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 5 Mar 2024 21:13:15 -0600 Subject: [PATCH] =?UTF-8?q?sw7203=E5=BA=93=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sw7203/sw7203.h | 198 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 183 insertions(+), 15 deletions(-) diff --git a/include/sw7203/sw7203.h b/include/sw7203/sw7203.h index 09d895b..ee257f4 100644 --- a/include/sw7203/sw7203.h +++ b/include/sw7203/sw7203.h @@ -4,13 +4,13 @@ #include "driver/i2c.h" #include "esp_log.h" -typedef struct sw7203_i2c_config +typedef struct { i2c_port_t i2c_num; uint8_t i2c_address; -}; +} sw7203_i2c_config; -union adc_config +typedef union { uint8_t hex; struct @@ -19,20 +19,33 @@ union adc_config uint8_t : 2; uint8_t adc_data : 4; // 0: VBAT电压 1: VBUS电压 4: VBAT充电电流 5: VBUS 充电电流 6: VBAT 放电电流 7:VBUS 放电电流 8: 芯片温度 9: NTC电压 10: VSYS电压 } config; -}; +} adc_config; -enum sw7203_I2C_address_t +typedef enum { - sw7203_I2c_0x3C = 0, - sw7203_I2c_0x38, - sw7203_I2c_0x1C, - sw7203_I2c_0x18 -}; + sw7203_I2c_0x3C = 0x3C, + sw7203_I2c_0x38 = 0x38, + sw7203_I2c_0x1C = 0x1C, + sw7203_I2c_0x18 = 0x18 +} sw7203_I2C_address_t; -typedef struct sw7203_config +typedef struct +{ + uint16_t chargeVoltage_cV; // 放电 VBUS 输出电压设置 [300,1920] 单位:厘伏(cV) +} sw7203_Vout_config_t; + +typedef struct { sw7203_i2c_config i2cHost; sw7203_I2C_address_t i2cAddress; + + uint16_t chargeVoltage_cV; // 充电目标电压设置 [300,1920] 单位:厘伏(cV) + uint8_t trickleVoltage_dV; // 涓流电压设置 [25,132] 单位:分伏(dV) + uint8_t chargeVBUSVoltageLimit_dV; // 防拉挂电压设置 [40,200] 单位:分伏(dV) + uint8_t chargeVBUSCurrentLimit_5cA; // 充电 VBUS 输入限流设置 [10,137] 单位:五十毫安/五厘安(50mA/5cA) + uint8_t chargeVBATCurrentLimit_dA; // 充电 VBAT 输入限流设置 [1,120] 单位:分安(dA) + uint8_t VSYSMinVoltage_2dV; // VSYMIN 电压设置 [15,83] 单位:2分伏(2dV/0.2V) + union { uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 @@ -55,7 +68,8 @@ typedef struct sw7203_config // A2端口检测使能标志位: // 0: 禁用A2端口检测,1: 启用A2端口检测 } config; - } connectDetect; + } connectDetect; // 负载接入检测及低功耗模式控制 + union { uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 @@ -86,6 +100,7 @@ typedef struct sw7203_config // 0: I2C 调压,1: FB 调压 } config; } funcConfig1; + union { uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 @@ -109,6 +124,7 @@ typedef struct sw7203_config // 0: 60nS,1: 20nS,2: 40nS,3: 60nS } config; } funcConfig2; + union { uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 @@ -126,6 +142,7 @@ typedef struct sw7203_config uint8_t : 4; // 未定义的 bit 不能被改写 } config; } funcConfig3; + union { uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 @@ -142,15 +159,166 @@ typedef struct sw7203_config uint8_t : 2; // 未定义的 bit 不能被改写 - uint8_t fullChargeCurrent : 1; + uint8_t fullChargeCurrent : 2; // 充满截止电流设置: // 0: 100mA,1: 200mA, 3: 300mA,4: 400mA - uint8_t batteryCellNum : 1; + uint8_t batteryCellNum : 2; // 电池节数设置: // 0: 1节,1: 2节, 3: 3节,4: 4节 } config; } funcConfig4; -}; + + union + { + uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 + + struct + { + uint8_t : 4; // 未定义的 bit 不能被改写 + + uint8_t chipOverTemp : 2; + // 芯片过温温度设置: + // 0: 120℃,1: 130℃, 3: 140℃,4: 150℃ + + uint8_t peakCurrentLimit : 2; + // 峰值限流设置,充放电共用此设置: + // 0: 12A,1: 14A, 3: 16A,4: 18A + } config; + } funcConfig5; + + union + { + uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 + + struct + { + uint8_t func62368Enable : 1; + // 62368 功能使能: + // 0: 使能,1: 禁止 + + uint8_t func62368IBUSLimitEnable : 1; + // 处于 62368 的高低温状态,降低 IBUS 限流功能使能: + // 0: 使能,1: 禁止 + + uint8_t : 1; // 未定义的 bit 不能被改写 + + uint8_t chargeOverTimeEnable : 1; + // 充电超时使能: + // 0: 使能,1: 禁止 + + uint8_t trickleChargeTimeout : 2; + // 涓流充电超时时间设置: + // 0: 30分钟,1: 1小时, 3: 2小时,4: 4小时 + + uint8_t constantCurrentChargeTimeout : 2; + // 恒流充电超时时间设置: + // 0: 12小时,1: 24小时, 3: 48小时,4: 72小时 + } config; + } funcConfig6; + + union + { + uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 + + struct + { + uint8_t func62368LowTempCurrentLimit : 2; + // 处于 62368 的低温状态,降低限流设置: + // 当 funcConfig6.func62368IBUSLimitEnable=0 时,同时降低 IBUS 和 IBAT 的限流值 + // funcConfig6.func62368IBUSLimitEnable=1 时,只降低 IBAT 的限流值 + // 0: 降低到设置值的 1/2,1: 降低到设置值的 1/4, 3: 不降低,4: 保留(不可选) + + uint8_t func62368HighTempCurrentLimit : 2; + // 处于 62368 的高温状态,降低限流设置: + // 当 funcConfig6.func62368IBUSLimitEnable=0 时,同时降低 IBUS 和 IBAT 的限流值 + // funcConfig6.func62368IBUSLimitEnable=1 时,只降低 IBAT 的限流值 + // 0: 降低到设置值的 1/2,1: 降低到设置值的 1/4, 3: 不降低,4: 保留(不可选) + + uint8_t func62368LowTempVoltageLimit : 1; + // 处于 62368 的低温状态,降低充电目标电压设置: + // 0: 充电目标电压降低电池节数设置值*0.1V,1: 不降低充电目标电压 + + uint8_t func62368HighTempVoltageLimit : 1; + // 处于 62368 的高温状态,降低充电目标电压设置: + // 0: 充电目标电压降低电池节数设置值*0.1V,1: 不降低充电目标电压 + + uint8_t func62368LowTempHysteresis : 1; + // 62368 低温迟滞: + // 0: 5℃,1: 10℃ + + uint8_t func62368HighTempHysteresis : 1; + // 62368 高温迟滞: + // 0: 5℃,1: 10℃ + } config; + } funcConfig7; + + union + { + uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 + + struct + { + uint8_t dischargeNTCHighLimit : 2; + // 放电 NTC 高温门限: + // 0: 50℃,1: 55℃,2: 60℃,3: 65℃ + + uint8_t dischargeNTCLowLimit : 2; + // 放电 NTC 低温门限: + // 0: -10℃,1: -5℃,2: 0℃,3: -20℃ + + uint8_t chargeNTCHighLimit : 2; + // 充电 NTC 高温门限: + // 0: 50℃,1: 55℃,2: 60℃,3: 65℃ + + uint8_t chargeNTCLowLimit : 2; + // 充电 NTC 低温门限: + // 0: -10℃,1: -5℃,2: 0℃,3: -20℃ + } config; + } NTCConfig; + + union + { + uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 + + struct + { + uint8_t : 1; // 未定义的 bit 不能被改写 + + uint8_t NVDCLearnModeEnable : 1; + // 学习模式使能: + // 适配器接入时,关闭充放电,NVDC 处于全打开状态 + // 0: 禁止,1: 使能 + + uint8_t : 4; // 未定义的 bit 不能被改写 + + uint8_t VSYSOverVoltage : 2; + // VSYS 过载门限: + // 电池节数为 2~4 节时 + // 0: 6V,1: 5.75V,2: 6.25V,3: 6.5V + // 电池节数为 1 节时 + // 0: 3.1V,1: 2.85V,2: 3.35V,3: 3.6V + } config; + } NVDCConfig1; + + union + { + uint8_t hex; // 8位无符号整数,用于将位域组合成一个字节方便程序读取 + + struct + { + uint8_t : 4; // 未定义的 bit 不能被改写 + + uint8_t trickleCurrent : 2; + // 涓流电流设置: + // 0: 100mA,1: 200mA,2: 300mA,3: 400mA + + uint8_t trickleCurrentHysteresis : 2; + // 涓流电压迟滞设置: + // 默认值根据 BSSET 电阻设置的电池节数,设置为电池节数*0.1V + // 0: 0.1V,1: 0.2V,2: 0.3V,3: 0.4V + } config; + } trickleConfig; // 涓流电流设置 +} sw7203_config_t; #endif \ No newline at end of file