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.

[参考译文] BQ79616EVM-021:如何在 UART 上获取 BQ79616的示例代码以及 SPI 通信

Guru**** 2537350 points
Other Parts Discussed in Thread: BQ79616, BQ79600EVM, BQ79616-Q1

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1117116/bq79616evm-021-how-can-get-the-sample-code-of-bq79616-on-uart-as-well-as-spi-communication

器件型号:BQ79616EVM-021
主题中讨论的其他器件:BQ79600EVMBQ79616-Q1

尊敬的 TI 团队:

如何 通过 UART/SPI 通信获取 BQ79616的示例/示例 c 代码。

您能否共享示例代码的链接?

此致、

Pankaj  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Pankaj、您可以在 产品文件夹中请求更多信息以获取 mySecureSW 访问权限。 获得批准后、您将能够看到616的示例 c 代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Chase、

    感谢您提供信息...

    我在主产品文件夹中也这样做了。我已经分享了形式的屏幕截图,请确保我做了你想做的正确的事情??

    此致

    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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为了防止'600进入睡眠/关断状态、您必须写入0x2005、COMM_TIMEOUT 寄存器。 在该寄存器中、您可以根据需要将器件配置为超时。 随附的是 MCU 应如何连接到'600的原理图、如数据表第8.2.2节所示。