主题中讨论的其他器件: BQ79616-Q1
尊敬的 TI 团队:
我正在尝试通过 SPI 通信来限制我们的微控制器(RH850/P1M)与桥接器件 BQ79600EVM-030之间的通信、并尝试通过菊花链 COM 端口通道读取 AFE BQ79616EVM 的电压读数。
当我们通过 SPI 将命令帧从 MCU (RH850)发送到桥接 IC BQ79600EVM 时,我们可以在从微控制器到桥接器 BQ79600EVM 的 MOSI 线路上看到相同的数据, 但是、桥式 IC (BQ79600EVM)的 MISO 线路上没有数据、或者 MISO 线路一直是 high.it、这意味着桥式器件不响应 MCU (主器件)。
注:-目前我仅使用一个 BQ79616EVM 器件,因此请检查下面给定的所有输入/命令序列,请记住,我们现在只使用一个 BQ79616器件/不堆叠。
硬件连接如下:-
1.我们将 MOSI_RX (MCU)与连接器 J4A (PIN7 [MOSI_RX])上的桥接器件(BQ79600EVM)连接
2.我们将 MSO_TX (MCU)与连接器 J4B (PIN8 [MSO_TX])上的桥接器件(BQ79600EVM)相连
3.我们将 MCU 的 SCLK 与连接器 J4A (引脚3[SCLK])上的桥接器件(BQ79600EVM)相连
4.我们将 MCU 的 UCS 与连接器 J4A (Pin9[UCS])上的桥接器件(BQ79600EVM)连接
5)将 MCU 的 uUART_SPI_RDY 与 J4B 上的器件(BQ79600EVM)连接(PIN2[uUART_SPI_RDY])、该引脚只有10K 上拉电阻、BQ79600EVM 上为5V。
6)并将 BQ79600EVM DAISY COM 端口(COMH/J15)与 AFE BQ79616EVM DAISY COML/J10 (4线双绞线)相连。
7.将 MCU/BQ79600/BQ79616保持在公共 GND 上。
8.为 BQ79616EVM 提供36VDC
SPI 通道上的命令序列:-
SPIWakeUp79600()
空 SPIWakeUp79600 (空)
{
uint16 loop_cntr;
//-------------------------------------------------- //
SET_TO_OUTPUT (SPI_CS、Port_PortGroup312_SPI_CS_EN、高电平);
SET_TO_OUTPUT (SPI_MOSI、Port_PortGroup37_SPI_MOSI_EN、高电平);
for (loop_cntr=0;loop_cntr<4000;loop_cntr++);//2US 延迟
for (loop_cntr=0;loop_cntr<4000;loop_cntr++);//2US 延迟
//---- 2us 延迟-------------------------------
SET_SPI_CS_EN (低电平);
for (loop_cntr=0;loop_cntr<100;loop_cntr++);
SET_SPI_MOSI_EN (低电平);
//---- 2.75mS 延迟---
for (loop_cntr=0;loop_cntr<40000;loop_cntr++);
for (loop_cntr=0;loop_cntr<40000;loop_cntr++);
for (loop_cntr=0;loop_cntr<40000;loop_cntr++);
for (loop_cntr=0;loop_cntr<25000;loop_cntr++);
///----------------------------------------------------------
//---- 2us 延迟---------------------------------
SET_SPI_MOSI_EN (高电平);//
for (loop_cntr=0;loop_cntr<100;loop_cntr++);
SET_SPI_CS_EN (高电平);
}
Delay3_5ms ();
3.然后初始化 SPI 通信
4.
//--用于唤醒堆叠器件的单器件写命令帧--//
//--initialize BQ79616-Q1 stack---//
TEMP_TX_Buffer[0]= 0x90;//Init 字节
TEMP_TX_Buffer[1]= 0x00;//器件 ID = 0x00
TEMP_TX_Buffer[2]= 0x03;//Reg Address=0x0309 || MSB 优先
TEMP_TX_Buffer[3]= 0x09;
TEMP_TX_Buffer[4]= 0x20;//CONTROL1 [SEND_WAKE]=1=0x20|| MSB 优先
TEMP_TX_Buffer[5]= 0x13;//CRC LSB = 0x13,CRC-16校准= 0x9513
TEMP_TX_Buffer[6]= 0x95;//CRC MSB=0x95
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、7);
提供11.75 ms 的延迟
Delay11_7ms ();//延迟=11.7mS 唤醒音的持续时间。
然后发送 SPI 自动寻址命令序列
SpiAutoAddress()
//********
//自动寻址序列
//********
空 SpiAutoAddress (空)
{
布尔 Lb_returnValue = E_NOT_OK;
//--用于自动排序的单个器件写命令帧--//
//---dummy 写入 OTP_ECC_DATAIN1以同步 DLL--//
TEMP_TX_Buffer[0]= 0xB0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//OTP_ECC_DATAIN1地址
TEMP_TX_Buffer[2]= 0x43;
TEMP_TX_Buffer[3]= 0x00;//OTP_ECC_DATAIN1数据
TEMP_TX_Buffer[4]= 0xE7;//CRC LSB = 0xE7、CRC-16校准= 0xD4E7
TEMP_TX_Buffer[5]= 0xD4;//CRC MSB=0xD4
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//---dummy 写入 OTP_ECC_DATAIN2以同步 DLL--//
TEMP_TX_Buffer[0]= 0xB0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//OTP_ECC_DATAIN2地址
TEMP_TX_Buffer[2]= 0x44;
TEMP_TX_Buffer[3]= 0x00;//OTP_ECC_DATAIN2数据
TEMP_TX_Buffer[4]= 0xE5;/CRC-16校准
TEMP_TX_Buffer[5]= 0xE4;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//---dummy 写入 OTP_ECC_DATAIN3以同步 DLL--//
TEMP_TX_Buffer[0]= 0xB0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//OTP_ECC_DATAIN3地址
TEMP_TX_Buffer[2]= 0x45;
TEMP_TX_Buffer[3]= 0x00;//OTP_ECC_DATAIN3数据
TEMP_TX_Buffer[4]= 0xE4;/CRC-16校准
TEMP_TX_Buffer[5]= 0x74;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//---dummy 写入 OTP_ECC_DATAIN4以同步 DLL--//
TEMP_TX_Buffer[0]= 0xB0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//OTP_ECC_DATAIN4地址
TEMP_TX_Buffer[2]= 0x46;
TEMP_TX_Buffer[3]= 0x00;//OTP_ECC_DATAIN4数据
TEMP_TX_Buffer[4]= 0xE4;/CRC-16校准
TEMP_TX_Buffer[5]= 0x84;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//---dummy 写入 OTP_ECC_DATAIN5以同步 DLL--//
TEMP_TX_Buffer[0]= 0xB0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//OTP_ECC_DATAIN5地址
TEMP_TX_Buffer[2]= 0x47;
TEMP_TX_Buffer[3]= 0x00;//OTP_ECC_DATAIN5数据
TEMP_TX_Buffer[4]= 0xE5;/CRC-16校准
TEMP_TX_Buffer[5]= 0x14;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//---dummy 写入 OTP_ECC_DATAIN6以同步 DLL--//
TEMP_TX_Buffer[0]= 0xB0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//OTP_ECC_DATAIN6地址
TEMP_TX_Buffer[2]= 0x48;
TEMP_TX_Buffer[3]= 0x00;//OTP_ECC_DATAIN6数据
TEMP_TX_Buffer[4]= 0xE0;//CRC-16校准
TEMP_TX_Buffer[5]= 0xE4;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//---dummy 写入 OTP_ECC_DATAIN7以同步 DLL--//
TEMP_TX_Buffer[0]= 0xB0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//OTP_ECC_DATAIN7地址
TEMP_TX_Buffer[2]= 0x49;
TEMP_TX_Buffer[3]= 0x00;//OTP_ECC_DATAIN7数据
TEMP_TX_Buffer[4]= 0xE1;//CRC-16校准
TEMP_TX_Buffer[5]= 0x74;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//---dummy 写入 OTP_ECC_DATAIN8以同步 DLL--//
TEMP_TX_Buffer[0]= 0xB0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//OTP_ECC_DATAIN8地址
TEMP_TX_Buffer[2]= 0x4A;
TEMP_TX_Buffer[3]= 0x00;//OTP_ECC_DATAIN8数据
TEMP_TX_Buffer[4]= 0xE1;//CRC-16校准
TEMP_TX_Buffer[5]= 0x84;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//--Enable Auto-Addressing Mode (启用自动寻址模式)--//
TEMP_TX_Buffer[0]= 0xD0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//Reg 地址
TEMP_TX_Buffer[2]= 0x09;
TEMP_TX_Buffer[3]= 0x01;//设置自动寻址模式
TEMP_TX_Buffer[4]= 0x0F;/CRC-16校准
TEMP_TX_Buffer[5]= 0x74;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//--set Bridge Device DIR0_ADDR=0 --//
TEMP_TX_Buffer[0]= 0xD0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//Reg 地址
TEMP_TX_Buffer[2]= 0x06;
TEMP_TX_Buffer[3]= 0x00;//选择桥接器件
TEMP_TX_Buffer[4]= 0xCB;//CRC-16校准
TEMP_TX_Buffer[5]= 0x44;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//---set BQ79616 Device as Stack 1 DIR0_ADDR=1 --//
TEMP_TX_Buffer[0]= 0xD0;//Init 字节
TEMP_TX_Buffer[1]= 0x03;//Reg 地址
TEMP_TX_Buffer[2]= 0x06;
TEMP_TX_Buffer[3]= 0x01;//选择栈第一个器件
TEMP_TX_Buffer[4]= 0x0A;//CRC-16校准
TEMP_TX_Buffer[5]= 0x84;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、6);
//--set Stack1 (BQ79616)同时作为堆栈器件和堆栈顶器件--//
TEMP_TX_Buffer[0]= 0x90;//Init 字节
TEMP_TX_Buffer[1]= 0x01;//器件 ID = 0x01
TEMP_TX_Buffer[2]= 0x03;//Reg 地址
TEMP_TX_Buffer[3]= 0x08;
TEMP_TX_Buffer[4]= 0x01;//将 BQ79616作为第一个堆栈和堆栈顶部器件
TEMP_TX_Buffer[5]= 0xD3;//CRC-16校准= 0xE1D3
TEMP_TX_Buffer[6]= 0xE1;
lb_returnValue = R_SPI_Send (0、Temp_TX_Buffer、Temp_RX_Buffer、7);
}
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//---- 电压读数命令序列--- //
//---- 读取电压------------------------------------------------------- //
//--Step 1 (16个有源电池)
spiTxBuffer[0]= 0x90;//Init 字节
spiTxBuffer[1]= 0x00;//器件 ID = 0x01、0x00
spiTxBuffer[2]= 0x03;
spiTxBuffer[3]= 0x0A;//16个有源单元
spiTxBuffer[4]= 0xAD;//CRC 字节= 0xD3AD
spiTxBuffer[5]= 0xD3;
lint_TxDataSize=6;
lb_returnValue = isl78714_SendCommand (spiTxBuffer、lint_TxDataSize);
for (loop_cntr=0;loop_cntr<10000;loop_cntr++);//200US 延迟
//--Step 2 (设置连续运行并启动 ADC)
spiTxBuffer[0]= 0x90;//Init 字节
spiTxBuffer[1]= 0x03;//器件 ID = 0x01、0x00
spiTxBuffer[2]= 0x0D;
spiTxBuffer[3]= 0x06;//16个有源单元
spiTxBuffer[4]= 0x59;//CRC 字节= 0xB659
spiTxBuffer[5]= 0xB6;
lint_TxDataSize=6;
lb_returnValue = isl78714_SendCommand (spiTxBuffer、lint_TxDataSize);
////--Step 3--200us 延迟在此被调用--//
for (loop_cntr=0;loop_cntr<10000;loop_cntr++);//200US 延迟
//---步骤4 (读取 ADC 测量值)
spiTxBuffer[0]= 0x90;//Init 字节
spiTxBuffer[1]= 0x05;//器件 ID = 0x01、0x00
spiTxBuffer[2]= 0x68;
spiTxBuffer[3]= 0x1F;//16个有源单元
spiTxBuffer[4]= 0x53;//CRC 字节= 0x2D53
spiTxBuffer[5]= 0x2D;
lint_TxDataSize=6;
lb_returnValue = isl78714_SendCommand (spiTxBuffer、lint_TxDataSize);
//----电压读数在这里结束--------------
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
我们在读取电芯电压时进行了此活动,但在 MISO 线路/或桥接器件上没有得到任何响应,没有任何响应。请说明我缺少什么
请指导我。
问题:-向桥接器件发送 SPI 唤醒 ping 信号后、如何确保 BQ79600器件是否唤醒?
此致、
Pankaj

