作者:Liu, Mason
在手机,平板等个人移动产品中,我们经常会关注电池容量的多少,TI的BQ27426,BQ27Z561等电池电量监测芯片可以通过检测电池电压,电流以及温度,从而计算出电池容量,并且两者均是单节电池电量计,广泛应用于上述场景。在实际使用过程中,需要配置好各种参数,生成GMFS文件再交给客户生成.h文件结合到客户的代码之中。
1.1修改流程介绍
一般来说,当客户需要修改配置并且生成新的GMFS文件时,需要客户提交CHEMID以及GMFS文件,提交给产品线进行修改,耗费时间较长,尤其是当客户只需要修改1-2bit时,此流程可能会延缓项目开发进度,影响客户体验。下文中以最常遇到的DMCODE修改为例,介绍如何快速的进行修改。修改流程主要为: 找到DMCODE寄存器位置->找到校验位位置并快速计算->修改并验证。
1.2 快速修改DMCODE
在客户的程序中,一般会通过判断我们BQ27426里内置的DMCODE这一bit来区分不同的配置程序,如果DMCODE保持一致,客户的软件中可能会有所冲突,就需要我们帮助客户快速的修改。
本文是基于GMFS文件直接进行修改,没有在上位机界面进行修改,在上位机界面进行修改后可能还会涉及到新生成的GMFS文件不包含ChemID的问题,同样需要产品线帮我们添加ChemID信息到GMFS文件,具体方式不在赘述。
在进行修改前,我们需要理解GMFS文件。可以参考《GMFS文件解析》来简单了解下GMFS文件。
DMCODE在TRM中有如下描述,但是我们的BQStudio软件并未将这一位寄存器开放出来,经过跟产品线确认,我们的DM CODE位于Subclass ID的第5位。也就是Table 7-2中,Subclass 64, offset为5的位置。(Table 7-2并未完整显示所有寄存器).
图1.1 DMCODE定义
Subclass 64这里的64是DEC下的64,如果切换到HEX也就是0x40. 那么我们就需要在gmfs文件中找到0x40写入的指令:
图1.2 代码例程
同样根据《GMFS文件解析》,第一行代表的是找到Subclass 64的地址,第二行表示写入数据,第三行表示写入校验和,第四行表示等待,第五行和第六行为校验和相关验证。
我们的DMCODE的offset为5,在上述代码中找到offset为5的位置,也就是01的位置(为方便理解,图中已经标红)。
在接下来就是寻找校验位的位置以及如何快速计算,这里代码中已经标红,就是第三行的0D和第六行的0D。接下来介绍如何快速修改。
关于checksum的计算可以看BQ27426 TRM的第四章节,其中这里有详细的描述:
图1.3 checksum计算过程
如果每一次都需要完整计算会耗费较多时间,这里的快速修改方法就是将想要修改的值和修改前作比较,将变化的值取负号也加入到checksum中。
举个例子,由上图可知,我们的DMCODE为01,如果我们像将其改为02,变化的值为+1,因此checksum的值就需要-1,目前Checksum的值为0D,DMCODE修改完后Checksum的值应该为0C.
这里的这张截图是通过上位机修改得到的对比表,可以发现,DMCODE改为2后,Checksum值从0D变为了0C。
图1.4 DMCODE结果对比
本文提供的是基于GMFS文件直接修改DMCODE的方法,如果需要修改其他寄存器的值,请咨询FAE确认是否可以修改该值。有的值修改后可能会对Gauge的预测算法产生影响。