您好!
我将从零开始使用 BQ27441-G1、以便了解它并将其用于未来的电量监测。 我使用 PIC 作为 BQ 的主机来设计自己的电路板、并使用以100KHz 运行的 I2C 总线编写自己的代码。
可以读取所有基本变量(最大电流、av. 电流、电压、温度、SoC 等)、没有问题、 但是 、当我想计算块校验和时、读取的字节与 SLUUAC9A-December 2013-Rev 2015年5月上的表6-3:数据存储器摘要不匹配。
我是说、如表6.3 PAG 31中所示; 子类是状态、子类 ID 是82、我必须从数据块中读取的第一个值是默认的 Qmax Cell 0、16384 (0x4000)、然后是更新状态的单个字节(默认为0x00)、等等。
但是、当我执行数据块读取时、我只能从 Reserve Cap-mAh (偏移3)开始获取数据。 块中数据的第一个树字节丢失。
执行数据块读取时、我捕获了解码后的 I2C 总线的屏幕截图。 它被划分为三个具有相同读取周期的图像。
如您所见、数据的前两个字节为0x00、而 不是默认值16384 (0x4000)。 第三个字节为0x81、它与负载选择/模式的预期默认值相匹配。 通过查看表6-3、我可以观察到前两个0x00字节可能是 Reserve Cap-mAh 的预期默认值整数。 那么、前三个字节在哪里?
由于数据块中的这种偏移、在读取结束时还增加了三个字节的数据。 这些额外的字节包括块(0xAC)的校验和
为了更新监测计参数、我遵循了 BQ27441-G1快速入门指南中提供的流程图。
我的汇总代码为:
1.-是 BQ 密封、然后解封。
2--是配置模式下的 BQ,然后进入配置模式
3.-写入 I2C (0x61、0x00)
4.-写入 I2C (0x3E、0x52)
5.-写入 I2C (0x3F、0x00)
之后、我的代码是:
chksum=0; bytes=32; I2C1_Start (); res=I2C1_Putchar (BQ27441_adress <1);//写入命令 if (res=0){ //如果 res!=0->error,则退出。 RES=I2C1_Putchar (0x40); //块数据地址 if (res=0){ I2C_Stop (); Delay10KTCYx (240);//延迟100ms I2C1_Start (); res=I2C1_Putchar (BQ27441_adress << 1|0x01);//读取 if (res=0){ while (bytes!=0) //读取周期 chksum=I2C1_Getchar ()+chksum; I2C1_Ack (); bytes--; } I2C_Stop (); return 255-chksum; } else{ I2C_Stop(); return 0; } else { I2C_Stop(); return 0; } else{ I2C_Stop(); return 0; }
你们能给这方面的建议吗?
提前感谢。