主题中讨论的其他器件:BQ79600EVM、 BQ79616-Q1
尊敬的 TI 团队:
如何 通过 UART/SPI 通信获取 BQ79616的示例/示例 c 代码。
您能否共享示例代码的链接?
此致、
Pankaj
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 TI 团队:
如何 通过 UART/SPI 通信获取 BQ79616的示例/示例 c 代码。
您能否共享示例代码的链接?
此致、
Pankaj
你好 Chase、
我正在尝试通过 SPI 通信来限制我们的微控制器(RH850/P1M)与桥接器件 BQ79600EVM-030之间的通信、并尝试通过菊花链 COM 端口通道读取 AFE BQ79616EVM 的电压读数。
当我们 从 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 Wakeup 引脚后,如何确保 BQ79600器件唤醒?
此致、
Pankaj
您好 Pankaj、
器件未正确通电或 Ping 发送错误、我怀疑它很可能是硬件配置。
请参阅第8.2.2节、了解使用 SPI 的'600的原理图。 您使用什么电压为'600 EVM 供电? 确保使用跳线 J1和 J3的位置符合您的电源要求。 我看不到您提到 VIO 引脚的供电。 您是否 从 MCU 为'600供电? 这一点至关重要、因为 VIO 为 SPI 输入和输出供电。 还要检查 J10-J12的跳线是否正确、以确保 SPI 正常工作。 您将知道、当 D2绿色 LED 亮起时、'600已唤醒。 如果您有任何其他问题、请告诉我。
此致、
Chase
你好 Chase、
我已经从 J3 (5V/TP9) 和 J4 (pin5)(连接到 GND)给出了 J4 (Pin6/Vio)上的5V 电压
1.您使用什么电压为'600 EVM 供电?
ANS:- 5V、用于为 BQ79600EVM 供电。
2.确保使用跳线 J1和 J3的位置正确?
ANS:- J1 (使用2-3) 5V 侧
J3 (使用2-3) 5V 侧
J6 (未使用跳线/断开)
J8 (1-2个)
J10 (1-2个)
J11 (1-2个)
J12 (2-3个)
J13 (1-2个)
现在、当我们连接编程器并进入调试时 、LED2 (绿色)和 LED3 (红色) 会在 执行 SPIWakeUp79600 ()函数之前同时打开、直到2分钟、 并且 J4B 上的 UART_SPI_RDY (PIN2[uUART_SPI_RDY]) 在此时间段(即2分钟)内变为低电平。
因此,仅 在 MOSI 线路上看到的数据 也会消失2分钟。完成2分钟后,LED LED2和 LED3都熄灭, J4B (PIN2[uUART_SPI_RDY]) 变为高电平,数据仅在 MOSI 线路上显示,就像之前一样。
那么、这意味着两个 LED 都会亮起2分钟、然后熄灭?
断开调试器的连接并 再次打开(MCU+BQ79600+BQ79616)时也会发生同样的情况 。
此致、
Pankaj
你好 Chase、
请查找命令日志以及 BQ79616器件的唤醒引脚和初始化命令的一些屏幕截图、以供您参考。
e2e.ti.com/.../Command-Log.txt
请尽快帮助我。
此致
Pankaj
您好 Pankaj、
绿色 D2 LED 连接到 DVDD、并在器件处于活动模式时亮起。 D3红色 LED 连接到 nFault、这意味着 IC 正在检测故障。 这很可能是在每次唤醒 ping 后发生的数字复位、不应成为问题。 我建议检查 FAULT_SUMMARY 寄存器以进行双重检查。
此外、'600具有2分钟的通信超时。 2分钟无通信后、IC 将进入关断或睡眠模式、具体取决于其所处的配置。 因此、请确保在器件超时并进入睡眠或关断状态之前尝试进行通信
希望这对您有所帮助、
Chase
你好 Chase、
是 Chase,您说了正确的设备检测故障,由于检测故障,两个 LED 都亮起, 同时 J4B 上的 UART_SPI_RDY (PIN2[uUART_SPI_RDY]) 在此时间段(即2分钟)内变为低电平。
如果 J4B (PIN2[uUART_SPI_RDY]) 在这种情况下变为低电平、则 SPI 通信将无法建立。 这就是为什么在这段时间内 MOSI 线路数据 也会消失2分钟。完成2分钟后、LED LED2和 LED3关闭、 J4B (PIN2[uUART_SPI_RDY]) 变为高电平、数据打开 正如我 之前 所说的那样、只有 MOSI 线路。
因此、故障状况严重影响 SPI 连接的稳定。
那么我们必须研究 发生这种故障情况的原因吗??
您的问题: 我建议检查故障汇总 寄存器以进行仔细检查。
答案:-当我们无法读取/写入桥接器件时、如何检查/读取故障寄存器摘要、因为 BQ79600在 MISO 线路上没有响应?
对于此检查、首先需要确保在 MCU 和 BQ79600桥接器之间建立 SPI 连接。
您的观察结果:-此外、'600有2分钟的通信超时。 2分钟无通信后、IC 将进入关断或睡眠模式、具体取决于其所处的配置。 因此、请确保在器件超时并进入睡眠或关断状态之前尝试进行通信
我对您的问题是:-是否有办法阻止 BQ79600在超时后进入睡眠/关断状态? 以便我们可以轻松配置器件的初始化。
我向您提出的请求请检查/确认我们提到的整个(MCU+BQ79600+BQ79616之间)连接是否正确或在任何地方缺失?
此致、
Pankaj