作者:Liu, Mason
在电量计的量产文件中,我们的BQSTUDIO上位机软件提供了多种格式的文件,包括SREC, SENC, BQFS, DFFS, GMFS, OTFS, DFI 等格式,对于不同的电量计,支持的格式均有所不同。接下来就选取代表性的BQ27426为例,来对GMFS文件做一个简单的介绍。
1.1 GMFS文件格式
下图是GMFS文件格式的一个范例:
W: 表明该行是写入一个或多个字节的指令
X: 表明该行是等待给定的ms时长的指令
C: 表明该行是读取并且比较一个或多个字节的指令
图1.1 GMFS文件范例
以Line 70-Line 75为例:
Line 70: W: AA 3E 52 00
W的格式为:I2CAddr RegAddr Byte0 Byte1 Byte2 …
AA表示device的I2C地址为0xAA, 3E表示对应的寄存器地址是0x3E, 对应的是DataBlockClass()指令,52 00表示这里写入的数据,这里两个byte是按照MSB LSB排列。也就是说,52数据写入0x3E, 00数据写入0x3F寄存器。0x3F对应的是DataBlock()寄存器。
我们规定如果要更新Data Memory里的值,需要先向0x3E寄存器写入对应寄存器的地址,之后再向其中写入具体的数据。这里寄存器地址为52 00,表明写入的是State寄存器。这一段代码的含义就是找到52(HEX)=82(DEC)的Subclass: State的地址,方便接下来向其中写入相应的数据。
图1.2 Data Flash寄存器表格
Line 71: W: AA 40 41 C3 00 00 00 81 00 DA 03 48 0B B8 00 C8 00 32 00 14 03 E8 01 00 63 00 0A FF C9 FF CB 00 02 00
W的格式为:I2CAddr RegAddr Byte0 Byte1 Byte2 …
AA同样表示的是device的I2C地址,0x40寄存器地址表示的是BlockData(), 从0x40到0x5F。相应后面的data就按照顺序依次写入0x40到0x5F地址中。
这里就以data中的81举例,在Line 71中,从0x40后的第一个data起,为offset=0, 0x81所在的位置为0ffset=5, 查阅上表7-2可以得到此位是H1型,表示Load Select/Mode.
这里表明Load Select/Mode为81,具体含义可以查阅BQ27426 TRM以及下表7-7。这里不再赘述。
图1.3 Load Select/Mode 参数表格
Line 72: W: AA 60 97
0x60寄存器表示BlockDataCheckSum(), 这一行的意思就是写入新的checksum值。
Line 73: X: 10
这一行表示等待10ms.
Line 74: W: AA 3E 52 00
这一行代码的含义是找到52(HEX)=82(DEC)的Subclass: State的地址,方便接下来对其中的校验位进行比较。
Line 75: C: AA 60 97
C的格式为:I2CAddr RegAddr Byte0 Byte1 …
这一行表示比较,AA表示device的I2C地址为0xAA, 60表示对应的寄存器地址是0x60. 表示BlockDataCheckSum(), 97是从0x60位置读出来的校验和,从而可以和gauge计算出来的校验和进行比较。