请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:BQ27220 主题中讨论的其他器件: CC2640
您好!
我们正在项目中使用 bq27220电量监测计、电池(18000mAh)组中的6个电池3000mAh 并联。 我要添加尝试更改电池参数(设计容量)的代码。
//100ms 延迟时间
#define MS_2_tick ((((100)* 1000)/ Clock_tickPeriod)
// bq27220地址
静态 uint8_t slaveaddr_guage = 0x55;
静态 uint8_t control_staus[2] = {0x00、0x01};
静态 uint8_t device_id[2] = {0、0};
静态 uint8_t unseale_1[2] = {0x00、0x14};
静态 uint8_t unseale_2[2] = {0x01、0x04};
静态 uint8_t unseale_3[2] = {0x00、0x72};
静态 uint8_t unseale_4[2] = {0x01、0x36};
静态 uint8_t full_access_1_[2] = {0x00、0xFF};
静态 uint8_t full_access_2[2] = {0x01、0xFF};
静态 uint8_t full_access_3[2] = {0x00、0xFF};
静态 uint8_t full_access_4[2] = {0x01、0xFF};
静态 uint8_t enter_cfg_up_1_[2] = {0x00、0x90};
静态 uint8_t enter_cfg_up_2[2] = {0x01、0x00};
静态 uint8_t 标志 = 0;
静态 uint8_t MSB_design_cap_1_[2] = {0x3E、0x9F};
静态 uint8_t lsb_design_cap_2[2] = {0x3F、0x92};
静态 uint8_t OLD_CHECKSUM = 0;
静态 uint8_t data_len = 0;
静态 uint8_t OLD_dc_MSB;
静态 uint8_t old_dc_lsb;
静态 uint8_t design_capacy_1[2] ={0x40、0x46};
静态 uint8_t design_capacy_2[2] ={0x41、0x50};
静态 uint8_t temp;
uint8_t write_new_checks[2]={0、0};
静态 uint8_t new_checksum;
静态 uint8_t CHECKSUM_DATA_len;
静态 uint8_t exit_cfg_update_1[2] ={0x00、0x92、0x00};
静态 uint8_t exit_cfg_update_2[2] ={0x01、0x00};
静态 uint8_t SEALED_1[3] ={0x00、0x30};
静态 uint8_t SEALED_2[2] ={0x01、0x00};
void battery_gauge 初始化(void)
{
/*选择 i2c 从设备*/
I2C_STATUS = bspI2cOpen();
if (i2c_status =true)
{
while (bspI2cSelect (interface_0、slaveaddr_guage)== true)
{
Task_sleep (ms_2_tick);
}
if (bspI2cWrite (unseal_1、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (unseal_2、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (unseal_3、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (unseal_4、2)=true)
{
/*成功*/
}
/*提供对数据存储器的完全访问*/
Task_sleep (ms_2_tick);
if (bspI2cWrite (full_access_1、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (full_access_2、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (full_access_3、2)=true)
{
/*成功*/
}
if (bspI2cWrite (full_access_4、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*输入配置更新*/
if (bspI2cWrite (enter_cfg_up_1、3)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (enter_cfg_up_2)=true)
{
/*成功*/
}
//延迟1秒
Task_sleep (ms_2_tick);
/*检查配置更新是否已更新*/
while (!(flag & 0x20))
{
if (bspI2cWriteRead (0x3B、1、&flag、1)=true)
{
/*成功*/
Task_sleep (2*MS_2_tick);
}
}
/*获取数据特性的 MSB 访问*/
Task_sleep (ms_2_tick);
if (bspI2cWrite (MSB_design_cap_1、2)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*获取数据容性 LSB 的访问*/
if (bspI2cWrite (lsb_design_cap_2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*读取校验和的一个字节*/
if (bspI2cWriteRead (0x60、1、&OLD_CHECKSUM、1)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*校验和的读取块长度*/
if (bspI2cWriteRead (0x61、1、&data_len、1)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*读取两个设计 Capicity 字节*/
if (bspI2cWriteRead (0x40、1、&OLD_dc_MSB、1)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWriteRead (0x41、1、&old_dc_lsb、1)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*在此处写入两个符号性字节18000mAh = 4650 */
if (bspI2cWrite (design_capicity、1、2)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (design_capicity _ 2、2)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*计算新的校验和*/
温度= 256 %(255 - OLD_CHECKSUM - OLD_dc_lsb - OLD_dc_MSB);
new_checksum = 255 -(256 %(temp + 0x4D + 0x58));
WRITE_NEW _CHECKSUM_[0] = 0x60;
write_new_checkS[1] = new_checkSum;
/*写入新的校验和*/
if (bspI2cWrite (write_new_checksum、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*读取校验和数据长度*/
if (bspI2cWriteRead (0x61、1、&CHECKSUM_DATA_Len、1)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
/*退出函馆配置*/
if (bspI2cWrite (exit_cfg_update_1、2)= true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (exit_cfg_update_2)=true)
{
/*成功*/
}
/*配置更新的会议*/
Task_sleep (ms_2_tick);
while (flag & 0x20)
{
if (bspI2cWriteRead (0x3B、1、&flag、1)=true)
{
/*成功*/
Task_sleep (ms_2_tick);
}
Task_sleep (5 * MS_2_tick);
}
/*返回密封模式*/
if (bspI2cWrite (sensed_1、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
if (bspI2cWrite (sensed_2,2)=true)
{
/*成功*/
}
if (bspI2cWriteRead (control_staus、2、device_id、2)=true)
{
/*成功*/
}
Task_sleep (ms_2_tick);
bspI2cDeselect ();
}
bspI2cClose ();
}