sw7203库编写

This commit is contained in:
Alex 2024-03-05 21:13:15 -06:00
parent 648c683858
commit 24dad4f1ba

View File

@ -4,13 +4,13 @@
#include "driver/i2c.h" #include "driver/i2c.h"
#include "esp_log.h" #include "esp_log.h"
typedef struct sw7203_i2c_config typedef struct
{ {
i2c_port_t i2c_num; i2c_port_t i2c_num;
uint8_t i2c_address; uint8_t i2c_address;
}; } sw7203_i2c_config;
union adc_config typedef union
{ {
uint8_t hex; uint8_t hex;
struct struct
@ -19,20 +19,33 @@ union adc_config
uint8_t : 2; 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电压 uint8_t adc_data : 4; // 0: VBAT电压 1: VBUS电压 4: VBAT充电电流 5: VBUS 充电电流 6: VBAT 放电电流 7:VBUS 放电电流 8: 芯片温度 9: NTC电压 10: VSYS电压
} config; } config;
}; } adc_config;
enum sw7203_I2C_address_t typedef enum
{ {
sw7203_I2c_0x3C = 0, sw7203_I2c_0x3C = 0x3C,
sw7203_I2c_0x38, sw7203_I2c_0x38 = 0x38,
sw7203_I2c_0x1C, sw7203_I2c_0x1C = 0x1C,
sw7203_I2c_0x18 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_config i2cHost;
sw7203_I2C_address_t i2cAddress; 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 union
{ {
uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取 uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取
@ -55,7 +68,8 @@ typedef struct sw7203_config
// A2端口检测使能标志位 // A2端口检测使能标志位
// 0: 禁用A2端口检测1: 启用A2端口检测 // 0: 禁用A2端口检测1: 启用A2端口检测
} config; } config;
} connectDetect; } connectDetect; // 负载接入检测及低功耗模式控制
union union
{ {
uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取 uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取
@ -86,6 +100,7 @@ typedef struct sw7203_config
// 0: I2C 调压1: FB 调压 // 0: I2C 调压1: FB 调压
} config; } config;
} funcConfig1; } funcConfig1;
union union
{ {
uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取 uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取
@ -109,6 +124,7 @@ typedef struct sw7203_config
// 0: 60nS1: 20nS2: 40nS3: 60nS // 0: 60nS1: 20nS2: 40nS3: 60nS
} config; } config;
} funcConfig2; } funcConfig2;
union union
{ {
uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取 uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取
@ -126,6 +142,7 @@ typedef struct sw7203_config
uint8_t : 4; // 未定义的 bit 不能被改写 uint8_t : 4; // 未定义的 bit 不能被改写
} config; } config;
} funcConfig3; } funcConfig3;
union union
{ {
uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取 uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取
@ -142,15 +159,166 @@ typedef struct sw7203_config
uint8_t : 2; // 未定义的 bit 不能被改写 uint8_t : 2; // 未定义的 bit 不能被改写
uint8_t fullChargeCurrent : 1; uint8_t fullChargeCurrent : 2;
// 充满截止电流设置: // 充满截止电流设置:
// 0: 100mA1: 200mA, 3: 300mA4: 400mA // 0: 100mA1: 200mA, 3: 300mA4: 400mA
uint8_t batteryCellNum : 1; uint8_t batteryCellNum : 2;
// 电池节数设置: // 电池节数设置:
// 0: 1节1: 2节, 3: 3节4: 4节 // 0: 1节1: 2节, 3: 3节4: 4节
} config; } config;
} funcConfig4; } 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: 12A1: 14A, 3: 16A4: 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/21: 降低到设置值的 1/4, 3: 不降低4: 保留(不可选)
uint8_t func62368HighTempCurrentLimit : 2;
// 处于 62368 的高温状态,降低限流设置:
// 当 funcConfig6.func62368IBUSLimitEnable=0 时,同时降低 IBUS 和 IBAT 的限流值
// funcConfig6.func62368IBUSLimitEnable=1 时,只降低 IBAT 的限流值
// 0: 降低到设置值的 1/21: 降低到设置值的 1/4, 3: 不降低4: 保留(不可选)
uint8_t func62368LowTempVoltageLimit : 1;
// 处于 62368 的低温状态,降低充电目标电压设置:
// 0: 充电目标电压降低电池节数设置值*0.1V1: 不降低充电目标电压
uint8_t func62368HighTempVoltageLimit : 1;
// 处于 62368 的高温状态,降低充电目标电压设置:
// 0: 充电目标电压降低电池节数设置值*0.1V1: 不降低充电目标电压
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: 6V1: 5.75V2: 6.25V3: 6.5V
// 电池节数为 1 节时
// 0: 3.1V1: 2.85V2: 3.35V3: 3.6V
} config;
} NVDCConfig1;
union
{
uint8_t hex; // 8位无符号整数用于将位域组合成一个字节方便程序读取
struct
{
uint8_t : 4; // 未定义的 bit 不能被改写
uint8_t trickleCurrent : 2;
// 涓流电流设置:
// 0: 100mA1: 200mA2: 300mA3: 400mA
uint8_t trickleCurrentHysteresis : 2;
// 涓流电压迟滞设置:
// 默认值根据 BSSET 电阻设置的电池节数,设置为电池节数*0.1V
// 0: 0.1V1: 0.2V2: 0.3V3: 0.4V
} config;
} trickleConfig; // 涓流电流设置
} sw7203_config_t;
#endif #endif