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.

BQ79600-Q1: BQ79600-Q1

Part Number: BQ79600-Q1
Other Parts Discussed in Thread: BQ79616, , BQ79616-Q1

Hi,

    I want to use BQ79600 to complete the SPI communication. A BQ79616 board is connected behind the BQ79600.

The board is drawn by ourselves. Since there is no wake-up indicator on the 79600 and 79616,I am now using an oscilloscope to observe

the data sent by the STM32F373. I can see the wake-up level at the receiving port of the BQ79600,but the MISO pin is continues held at high even i have disconnect the pull up resistor.  I cannot determine whether the 79600

has really woken up.I would like to ask,

how do I know that the 79600 has successfully woken up? Now, which pin on the 79600 should I test?

I look forward to your reply.

/resized-image/__size/320x240/__key/communityserver-discussions-components-files/196/pastedimage1686643257738v1.png

/resized-image/__size/320x240/__key/communityserver-discussions-components-files/196/pastedimage1686643309283v2.png

Thanks

Mona Gupta

  • Hi Monu,

    We have a detailed applications note regarding the wake-up procedure of the BQ79600-Q1 (bridge) and BQ79616-Q1 (in stack) within the BQ79600-Q1 mySecure folder. I see that your myTI account already has access to this folder. Please read this document, and it should answer your inquiry.

    Best Regards,

    Julia Louis

  • Hello Julia, I have followed the command sequence as per the TI example code and also as per the document, which you have referred. Both have the same flow, delay timings, etc... But, I still see MISO pins is HIGH and not going to Low at any time. I want to know, if I can Read a register as the first command frame after wake Up signal.. Can we read a register of BQ79600 just at the beginning..?

  • Hi Monu,

    Are you using our EVMs for your evaluation purposes? If so, there should be a green LED (located on the EVM board) that should turn on when the device has successfully woken up.

    Best Regards,

    Julia Louis

  • Hello Julia, 

    We are not using the EVM. We have built our own PCB for this with BMS chips including. Base IC BQ79600 is connected to 2 of the BQ79616 IC's. The circuit is same as provided by TI for BQ79600. I have already shared the schematic.. 

    After the Wake Up signal is provided, the DVDD is going to High. This makes sure that, our chip has awaken. But, nothing is coming up on MISO line. 

    For BQ79600 -   COMLN and COMLP are kept Open drain, while COMHP and COMHN are connected to BMS IC BQ79616 (COMLN & COMLP). This is connected in series to other BMS IC BQ79616. This Daisy Chain wiring is not looped. Do, you think this might be the issue.. 

    Please check the attached circuit..

  • Hi Monu, 

    COMLN and COMLP are necessary if ring architecture is used. If ring architecture is not used, then it should be okay to leave these two pins disconnected. These pins shouldn't affect the wakeup status of the device (assuming you have the correct (dis)connections). 

    Regarding a specific register/pin, I am talking with our team to confirm a definite answer. I can have a definite answer by end of day, June 15 (CST).

    Best Regards,

    Julia Louis

  • Thank You. The present issue is that MISO pin of BQ79600 is always High and we are not receiving any data on it to MCU. We tried the Init Sequence as per the example code and suggestions in reference guide, but still the MISO is not responding. So, I am trying to get atleast some response from BQ79600 just after wake up. I tried to read the register of BQ79600 after wakeup with certian delay in between. 

    If I try to read the DIrection bit from Base IC just after 1ms "SpiReadReg(0, DIR0_ADDR, autoaddr_response_frame_new,1,0, FRMWRT_SGL_R);" , does this give response. After sending the read request frame of 7 bytes, after a certain delay, I am sending 7 dummy clock bytes with 0xFF on MOSI. I am using ready Read function from example code itself... I can see the correct signals on CRO as well as on Logic Analyzer..

  • Hi Monu, 

    Circling back to your original question: 

    • MISO is an output signal. This is not necessarily what confirms the wake-up status of the BQ79600-Q1. 
    • DVDD would be an appropriate signal to check in order to confirm the wake-up status of the BQ79600-Q1. If this signal is pulled high, then there is confirmation that the device "woke up".

    Hope this helped!

    Best Regards,

    Julia Louis

  • Hello Julia, Thank You.

    Yes, I know that DVDD will indicate the Base IC being in wakeup state. Base is observed to be wakeup by this. 

    The issue is that, I am not getting any response from Base IC for any kind of Read Request. As mentioned in previous comment by me. I need to know, can we read any register of Base IC just after Wake Up. 

    Let us assume that, we just have the Base IC and want to communicate over SPI with MCU. I want to make sure, Base IC responds for any Read request..

    I observed that, the SPI_RDY is going to Low after it receives 0x80 (Single Read INIT byte), it stays low after that for very long time. During this time, all the remaining frame bytes are sent and also the clock signals with 0xFF on MOSI, to read the register. Please suggest, ..

  • Hello Julia,

    Also, i want to know that we can execute your sample code in case of if ring architecture is not used. 

  • Hi Monu,

    Yes- you should be able to still communicate/read from the base IC after waking up. A potential register that you could read from on the BQ79600-Q1 to test this functionality could include FAULT_SUMMARY (0x2100), which is a read-only register.

    Regarding the signals you are describing, can you please provide an oscilloscope shot to what you are describing? This can help us assist you further if we have more details.

    Lastly, the sample code should still work even if ring architecture is not used.

    Best Regards,

    Julia Louis

  • Hello Julia,

    With respect to above mentioned comments, SPI_RDY is staying High while writing the frames. As soon as we send 0x80 (INIT byte), SPI_RDY is going to Low. You can see that in the attached image. Is this Normal behavior everytime for a Read Request Frame. After certain delay, we send 0xFF on MOSI with 7 bytes of clock. There is no response on MISO (stays High continously)

    The speed of SPI is 4 MBPS.

    Code used is as below for a Total Board 1 (considering only Base IC BQ79600).

    #define TOTALBOARDS 1

    uint8_t autoaddr_response_frame_new[(1+6)*TOTALBOARDS]; //response frame for auto-addressing sequence


    main()
    {
    MX_GPIO_Init();

    /* USER CODE BEGIN 2 */
    SpiWake79600(); // Send wake to Bride ICS'

    MX_SPI1_Init();

    delayus(1000);

    //INITIALIZE
    SpiWriteReg(0, CONTROL1, 0x00, 1, FRMWRT_SGL_W); //Direction MCU to COMH
    delayus(500);
    SpiWriteReg(0, CONTROL1, 0x20, 1, FRMWRT_SGL_W); //send soft wake

    HAL_Delay(11.6*TOTALBOARDS);// wake tone duration is ~1.6ms per board + 10ms per board for each device to wake up from shutdown = 11.6ms per 616 board.

    //AUTO-ADDRESS
    SpiAutoAddress(); //auto address sequence

    HAL_Delay(1);

    SpiWriteReg(0, Bridge_FAULT_RST, 0x22, 1, FRMWRT_SGL_W); //Reset FAULT_COMM and FAULT_SYS on bridge device

    //ENABLE BQ79616-Q1 MAIN ADC
    SpiWriteReg(0, ACTIVE_CELL, 0x0A, 1, FRMWRT_SGL_W); //set all cells to active
    SpiWriteReg(0, ADC_CTRL1, 0x06, 1, FRMWRT_SGL_W); //continuous run and MAIN_GO
    delayus(5*TOTALBOARDS + 192);

    while(1)
    {
    //OPTIONAL: read register address 0x2001 and verify that the value is 0x14
    SpiReadReg(0, DEVICE_CONFIG, autoaddr_response_frame_new, 1, 0, FRMWRT_SGL_R);

    delayus(5000);
    }


    }


    void SpiAutoAddress(void)
    {
    SpiWriteReg(0, CONTROL1, 0X01, 1, FRMWRT_SGL_W);

    //SET ADDRESSES FOR EVERY BOARD
    for(currentBoard=0; currentBoard<TOTALBOARDS; currentBoard++)
    {
    SpiWriteReg(0, DIR0_ADDR, currentBoard, 1, FRMWRT_SGL_W);
    }

    //BROADCAST WRITE TO SET ALL DEVICES AS STACK DEVICE
    SpiWriteReg(0, COMM_CTRL, 0x02, 1, FRMWRT_SGL_W);

    //SET THE HIGHEST DEVICE IN THE STACK AS BOTH STACK AND TOP OF STACK
    SpiWriteReg(TOTALBOARDS-1, COMM_CTRL, 0x03, 1, FRMWRT_SGL_W);

    //SET THE HIGHEST DEVICE IN THE STACK AS BOTH STACK AND TOP OF STACK
    SpiWriteReg(TOTALBOARDS-1, COMM_CTRL, 0x03, 1, FRMWRT_SGL_W);

    //OPTIONAL: read register address 0x2001 and verify that the value is 0x14
    SpiReadReg(0, DEVICE_CONFIG, autoaddr_response_frame, 1, 0, FRMWRT_SGL_R);

    SpiReadReg(0, PART_ID, autoaddr_response_frame, 1, 0, FRMWRT_SGL_R);

    }

  • Hi Monu,

    I will need to consult with my colleagues and will follow-up with you via email (I can email you) by the end of day on June 19th, CST.

    Best Regards,

    Julia Louis

  • Hi Monu, 

    From the scope shot you shared, I see the SPIRDY goes low when you send the 1st command frame to BQ79600 on MOSI. I have below observation that should be taken care of.

    1) I see you are sending second command immediately after the first command when the SPIRDY is low, this should be avoided, we should send the command on MOSI only when SPIRDY is high. 

    2) If you are sending the read command, once the SPIRDY comes back to 'HIGH', SPI master or MCU should drive the SCLK ( with number of bytes to receive ) without sending anything on MOSI to receive the data on MISO, please check if you are doing that in your software.

    3) I am not sure what command you are sending, please make sure you are sending the valid frame with valid device id and CRC bytes, if not you will not see the response back.

    Regards,

    Ravi

  • Thank You Ravi. Now we are able to receive the data from BQ79600. 

    I have one question. The Read request consists of 7 bytes. SPI_RDY pin goes to Low after first byte. Are you suggesting that, we need to send the rest of 6 bytes of the frame only after SPI_RDY is HIGH again?..

    At present, If SPI_RDY is HIGH, I am continuously sending the Read Request frame of 7 Bytes, though it become Low after INIT_BYTE(0x80). Later, I will send the Clock signals to read the Data back, only if SPI_RDY is High again. This is working.

    How much time does it take for BQ79600 to make the SPI_RDY to High again. Is it fixed timing, or random or depending on the number of bytes, which are read. Also, is it dependent on the BMS chips (BQ79616) connected in series. 

  • Hi Monu,

    Below is the screenshot from the sample logs. Once you send the read command from MCU to BQ79600, calculate how much will be the response data size Eg. for reading 1 byte for single read to get response you need to send  7 bytes 

    Read request command ( data on MOSI )

    Response from BQ79600 ( SPI driver should toggle 7 bytes of SCLK with CS low to receive 7 bytes of data )

    For more details, refer the section '7.3.2 Communication' in the BQ79600 datasheet.