尊敬的所有人:
我有一个菊花链设置、目前正在测试3个 BQ 芯片(我们的电池组具有10个、但首先尝试简单)。 我使用软件参考手册(slva617a.pdf)初始化了寄存器。 我包含了以下代码。 请注意:广播消息的实现方式非常难看:由于这些消息缺少地址字段、寄存器字段位于地址字段中、寄存器字段位于地址字段中(在我包含的代码中)。 数据长度字段指定字节数。 如果设置为0、则不传输任何数据字节。
代码当前一直运行到以下时刻:自动寻址工作正常! 所有连接的电路板都响应其地址(测试了不同数量的 BQ 芯片、即使是全部10个)。 然后、从'step10'开始、测量设置被发送到电路板(仍然遵循软件参考手册)。
问题从这里开始:在连接了1、2或3个板(地址0、1和2)的情况下、同步采样通道命令(软件参考手册中的第3.2章)只返回网络中第一个板(地址0)的数据。 发送同步示例消息、后跟特定读取消息(Boardaskx)也不能按预期工作。 链中的任何电路板都不会发送响应。 奇怪的是、将同步样本与 aksBoardx 重复5次、突然从板编号0报告数据。 即使我询问电路板2的数据、电路板0也会在5次传输后回复。 我在下面添加了询问消息的数据。
这让我相信我在设置 BQ 芯片的寄存器时出错了。 我尝试了不同的设置、但没有成功。 我希望有人遇到过类似的问题并解决了这些问题、或者愿意查看我配置的设置并检测到错误。
非常非常非常非常非常感谢。
///---------------- 要求提供数据讯息-----------------------------------------
UARTsendMessage synchroSampleChannels;
askData.bit.type = 0xE1;
askData.bit.address = 0x02;//register 字段、因为这是一个广播命令
askData.bit.register = 0x02;//测量所有电池和所有 AUX 连接器,因为这是一个广播命令
uint64_t message0 = 0x99;//数据长度设置为0,因此该字节不发送
askData.bit.data =信息0;
askData.bit.datalthength = 0;
UARTsendMessage synctimple;
askData.bit.type = 0xF1;
askData.bit.address = 0x02;//register 字段、因为这是一个广播命令
askData.bit.register = 0x00;//数据的第一部分、因为这是一个广播命令
uint64_t Message1 = 0x99;//数据长度设置为0,因此不发送该字节
askData.bit.data =&Message1;
askData.bit.datalthength = 0;
UARTsendMessage askBoard2;
askData.bit.type = 0x81;
askData.bit.address = 0x02;
askData.bit.register = 0x02;
uint64_t message2 = 0x20;//测量所有电池和所有 AUX 连接器
askData.bit.data =信息2;
askData.bit.datalthength = 1;