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.

BQ27510 - After connecting battery, device comes up in ROM mode

Other Parts Discussed in Thread: BQ27510

Hello,

My system has a battery that can be disconnected and reconnected.  Currently I am doing firmware development using Code Composer Studio.  Therefore when I reset the system, I disconnect the battery, reconnect it, and then turn on power to the system.

On power up, he BQ27510 will not respond when addressed using I2C address 0xAA, but it will respond when addressed using address 0x0B, indicating that it is in ROM mode.  After the DFI programming, it will respond to address 0xAA from then on (indicating that it is in NORMAL firmware mode).

What is going on here?  Why does it not come up in FW / normal mode?

Thank you.

  • What method are you using to program the DFI file?

    Are you sure the DFI file you are programming is compatible with the FW version already loaded on the IC?

    Are you using an EVM or your real system?

  • dMax,

    I am using I2C method.

    I did make sure that the DFI is version 1.23 and the BQ27510 is also 1.23.

    I am using the real system.

    Once it is running (after the DFI  loaded, exited ROM mode, reset, IT enabled, and sealed), I can query the gauge over and over without any problems using address 0x55.  After reset, I cannot query it until after I load the DFI.  No acknowledgements and responses to messages sent to address 0x$55. After sending the message to enter ROM mode (and failed / no ack) then it responds to messages sent to address 0x0B. 

    How long does it take before the device comes up?  I waited for 3 cycles of 1 minute (so 3 minutes) before I load the DFI.  I query it every minute.  Does IT need to be disabled on power up and re-enabled later?  If so, how much later?

    Thank you for your questions,

    Stefani

  • Can anyone from TI assist me here please?

  • Thank you so much for Avnet and TI's help.  I found out that the Instruction Flash values that I need to program in were incorrect.  They should be:

    // Version 1.23's version of Instruction Flash Rows.
    const unsigned char yIFRowConst[][96] =
    {
      {0xEA, 0xFF, 0x33, 0xE5, 0xF4, 0x33, 0x8C, 0xF5, 0x33, 0x22,
       0xFE, 0x33, 0x2A, 0xFE, 0x33, 0x54, 0x54, 0x15, 0x10, 0x05,
       0x00, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F,
       0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF,
       0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0x23, 0x01,
       0x3F, 0x58, 0xCB, 0x33, 0x4A, 0x00, 0x08, 0x00, 0x00, 0x00,
       0x00, 0x02, 0x00, 0xFF, 0xAA, 0x0E, 0xFB, 0xA7, 0x0E, 0xFF,
       0xA6, 0x0E, 0xFF, 0xA1, 0x0E, 0xFF, 0xA0, 0x0E, 0xFE, 0xA3,
       0x0E, 0x83, 0xA2, 0x0E, 0xD2, 0xFF, 0x3A, 0xFF, 0xA1, 0x0E,
       0x64, 0xA0, 0x0E, 0xFF, 0xA3, 0x0E},
      {0x64, 0xA2, 0x0E, 0xBC, 0xA5, 0x0E, 0xFF, 0xA4, 0x0E, 0xCA,
       0xFF, 0x3A, 0xFE, 0xA1, 0x0E, 0x83, 0xA0, 0x0E, 0xFE, 0xA3,
       0x0E, 0x83, 0xA2, 0x0E, 0xCA, 0xFF, 0x3A, 0x51, 0xFF, 0x3A,
       0xD6, 0xFF, 0x33, 0xFF, 0xAF, 0x0E, 0x01, 0x4F, 0x03, 0x3F,
       0x11, 0x0C, 0xCD, 0xFF, 0x30, 0xD4, 0xFF, 0x35, 0x2F, 0x10,
       0x0C, 0xD4, 0xFF, 0x35, 0xFF, 0xFF, 0x23, 0x01, 0xAF, 0x14,
       0x01, 0x4F, 0x03, 0x3F, 0x11, 0x0C, 0xC5, 0xFF, 0x30, 0xCC,
       0xFF, 0x35, 0x2F, 0x10, 0x0C, 0xCC, 0xFF, 0x35, 0xFF, 0xFF,
       0x23, 0xFF, 0xDF, 0x0B, 0xC4, 0xFF, 0x33, 0xE3, 0xAF, 0x04,
       0xE2, 0xBF, 0x04, 0xBB, 0xFF, 0x36}
    };

    updated 2: const unsigned char yIFRow_Checksum[][2] =
    {{0x62, 0x31},
     {0x4F, 0x2F}
    };

    The changes was in bytes 16th through 18th row 0, they should be 0x54, 0x54, 0x15.

    Now my unit will come up in firmware / normal mode on power up!