大家好、
我使用 MSP430为 bq34110编写了一个 I2C 接口。 它适用于数据命令(例如使用 Voltage()命令读取电池电压)、但我在读取 DF 时看到了奇怪的行为、完全无法写入 DF。 请注意、我当前的设置是一个具有 MSP430的开发板、该 MSP430连接到 bq34110的开发板(bq34110EVM-796)
读取 DF
这是我尝试读取 内部系数3寄存器(地址 0x41C5)时的 I2C 序列。 由于我尚未对芯片进行任何修改、我应该读取默认值、即0xCFDC (-12324)。 但是、我得到0xDC17。 以下是我的逻辑分析仪的屏幕截图:
如您所见、 我得到的是0xDC17、而不是0xCFDC。 通过查看技术参考手册(TRM)、我发现0x17是下一个寄存 器(6131 = 0x17F3)的第一个字节、这意味着我可能会得到 int COeff 3的最后一个字节和 int COeff 4的第一个字节。 因此、我尝试从0x41C4而非0x41C5读取:
我得到了很好的数据! 我的问题是:我的 I2C 序列是否有问题或 TRM 是否有问题? 读取 DF 时、我是否应始终应用此偏移?
正在写入 DF
我还尝试分别将{0x55、0x54}写入制造商信息块 A01 (0x4042)和 A02 (0x4043)并读回它、但器件每次返回0x00 0x00。 下面是我的 I2C 序列:
//写入 DF
- 将0x42 0x40写入 Manufacturer_access_control (0x3E)
- 将0x55 0x54写入 MAC_DATA_0 (0x40)
- 将0xD4写入 MAC_DATA_SUM (0x60) (0xD4 =~((0x42 + 0x40 + 0x55 + 0x54)& 0xFF)
- 向 MAC_DATA_LENGTH (0x61)写入6 (nData = 2 + 4)
//从 DF 读取
- 将0x42 0x40写入 Manufacturer_access_control (0x3E)
- 从 MAC_DATA_0 (0x40)读取2个字节
我猜 MACDataSum 和 MACDataLen 有问题、但我已经按照 slua790中的步骤来计算这些数据。 我还尝试使用(LEN = nbytes + 2)而不是(LEN = nbytes + 4)、因为 TRM 指出 LEN 是校验和涉及的字节数(与 slua790中的说法相矛盾)、但没有结果。
我是否应该考虑读取 DF 时需要使用的可能偏移量?
谢谢、
Fred