主题中讨论的其他器件:MSPM0G3507、BQ79600-Q1、 BQ78706
工具/软件:
我在 BMS 项目中遇到了菊花链通信问题!
BMS 系统配置
整个 BMS 系统包含 MCU (MSPM0G3507)、BQ79600和 BQ79758芯片。MCU 通过 SPI 与 BQ79600通信。BQ79600通过变压器通过 COMHP/COMHN 引脚连接到 BQ79758、而 BQ79758的 COMLP 和 COMLN 引脚保持断开状态。--
编程程序
上电后、根据 BQ79600-Q1软件设计参考手册执行唤醒和自动地址分配:
1. 唤醒 BQ79600 :验证 DVDDand AVDD 电压是否上升到指定的范围、确认是否成功唤醒。
2. 发送音调信号 :使用图1中的波形唤醒 BQ79758。监视其 DVDD/AVDD 电压以确认唤醒。
3. 执行自动寻址功能 :
//*************************
//自动寻址序列
//*************************
空 SpiAutoAddress (空)
{
//虚拟写入 SNCHRONIZEALL 菊花链器件 DLL (如果发生器件复位)
SpiWriteReg (0、OTP_ECC_DATAIN1、0x00、1、FRMWRT_STK_W);
...[类似的写入 DATAIN2-DATAIN8]
//启用自动寻址模式
SpiWriteReg (0、CONTROL1、0x01、1、FRMWRT_ALL_W);
//为每个板设置地址
for (currentBoard=0;currentBoard<TOTALBOARDS;currentBoard++)
{
SpiWriteReg (0、DIR0_ADDR、currentBoard、1、FRMWRT_ALL_W);
}
//广播写入以将 ALLDEVICES 设置为堆栈器件
SpiWriteReg (0、COMM_CTRL、0x02、1、FRMWRT_ALL_W);
//将栈中最高的器件设置为栈顶和栈顶
SpiWriteReg (TOTALBOARDS-1、COMM_CTRL、0x03、1、FRMWRT_SGL_W);
//SYNCRHONIZE 带一个抛出读取的 DLL
SpiReadReg (0、OTP_ECC_DATAIN1、autoaddr_Response_frame、1、0、 FRMWRT_STK_R);
[DATAIN2-DATAIN8]
//可选:读回所有设备地址
for (currentBoard=0;currentBoard<TOTALBOARDS;currentBoard++)
{
SpiReadReg (currentBoard、DIR0_ADDR、autoaddr_response_frame_Base、1、0 FRMWRT_SGL_R);
}
//可选:验证寄存器0x2001 = 0x14
SpiReadReg (0、0x2001、autoaddr_Response_frame、1、0、 FRMWRT_SGL_R);
返回;
}
执行该函数后、将发送以下命令:
WriteReg (0、0x2005、0x0、1、FRMWRT_SGL_W);
WriteReg (0、0x700、0xA5、1、FRMWRT_ALL_W);
延迟(20);
WriteReg (0、0x701、0x20、1、FRMWRT_ALL_W);
WriteReg (0、FAULT_MSK2、0x40、1、WriteType);
发现问题
执行上述函数后、BQ79758意外进入 关断模式 2秒后(DVDD/AVDD 电压降至0)。
故障排除步骤
- SPI 通信测试 :通过写入/读取寄存器验证 BQ79600-Q1 MCU SPI 通信。 确认了通过 Tone 信号唤醒 BQ79758。
- 禁用超时命令 :在 BQ79758唤醒后立即尝试发送关闭超时禁用命令:
WriteReg (0、0x2005、0x0、1、FRMWRT_SGL_W);
WriteReg (0、0x700、0xA5、1、FRMWRT_ALL_W);
延迟(20);
WriteReg (0、0x701、0x20、1、FRMWRT_ALL_W);
WriteReg (0、FAULT_MSK2、0x40、1、WriteType);
结果 : BQ79758在2秒后仍然关闭。 - 寄存器读回 :
- BQ79600EVM 的 DIR0_ADDR 和0x2001寄存器可读。
- BQ79758的 DIR0_ADDR 寄存器 不可读 。
关键问题
- 唤醒确认 : DVDD/AVDD 电压是否足以确认 BQ79758唤醒? 尽管存在有效电压、芯片能否保持无响应?
- 超时禁用时序 :根据数据表、在唤醒后立即发送超时禁用命令是否有效? 如果是、为什么仍然会发生关机?
- 有效命令定义 :什么构成重置2秒超时的"有效命令"? 虚拟写入(例如时钟同步)是否被视为有效?
- 菊花链行为 :
- 如果链中的最后一个 BQ79758接收到命令、这是否意味着上游器件正常工作?
- BQ79758可以在不处理命令的情况下转发命令(例如、由于 CRC 错误)吗?
- SPI RDY 引脚问题 :在自动寻址期间、SPI RDY 引脚保持低电平、直到 COMM-CLEAR。 虚拟寄存器读取是否会在下游传播导致这种情况?
- MCU SPI FIFO 清除 :如何在发送虚拟数据之前清除 MSPM0G3507的 SPI FIFO? 函数名称/文件位置?
- 菊花链波形 :请求详细的差分信号波形(阈值、字节/位时序)。
其他帮助
请就上述几点提供指导。
谢谢!