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-g2 programming using bqfs

Other Parts Discussed in Thread: BQ27510, BQ27510-G2

Hi,

We were programming BQ27510 with bqfs file using custom USB to I2C kit and we’re encountering errors during the Read and Compare Data command. USB to I2C communication is working as we were able to read the Device ID (0x0510), enter ROM mode, and talk to the fuel gauge from slave address 0xAA to 0x16 at ROM mode. The issue happens on the Read-Compare Data process of bqfs.
 
The flash is unsealed and we had entered ROM before we started programming using the bqfs.
 
For instance, on the first few lines of bqfs:
W: 16 00 04
W: 16 04 83 DE
W: 16 64 65 01
X: 200
C: 16 66 00
 
At Compare (C:) command, register 0x66 should have 0x00 data, but we are always getting value 0x02.
 
Was our checksum valid? How can we program using the bqfs having the correct compare value? We had already checked multiple Application Notes and followed the steps indicated but we are still getting the same compare data error. Is there something we had missed?
 
Thanks,
Kat
  • Hi Kat,

    That sequence is correct and is a standard sequence at the beginning of any bqfs file.  The purpose is to erase the flash before you begin writing it, and the value of 00 would mean that it was successful.  The 02 means it wasn't, so I'd check a couple of things.

    First, try extending the delay from 200 to something longer.  Also, verify that your code is really waiting 200ms before checking register 66.

    The only other reason I can think that the erase might fail is if the voltage drooped during the erase.  The erasure will take a relatively large amount of current briefly, and I've seen erases and writes fail if the power supply constrained the current somehow.  For example, when using an SMU (source measurement unit), even though I had the compliance set high (like 100mA or more), the measurement range was set to autorange and the SMU didn't switch ranges quickly enough to and limited the current to the gauge IC while flash was being written, so it would fail.  That's just one example, but the point is to make sure you are getting a good stable voltage at the REGIN and VCC pins during the write, so check those pins with a scope and make sure there is no droop during your writing.

  • hi dmax,

    i appreciate your quick response.

    We tried to extend the delay from 200ms to 2 seconds but still we got same result (register 0x66 returns 0x02 value). There was no droop on the VCC of the fuel gauge during the erase. In fact, we can successfully program the fuel gauge in our product unit with DFI file using TI EV2300 hardware and software, assuming DFI programming erases flash at the start.

    Currently we are still using TI EV2300 in the production but this takes longer tach times and we cannot include it to our custom automation test software. That's why we opted to use a USB to I2C dev boar with drivers for our custom software.

    Question:
    1. Does BQ27510-G2 support same I2C format both in ROM mode and non-ROM mode? Any unique setting of ACK/NAK bits in ROM mode?

    Thanks,

    Kat

  • hi dMax:

    Can you tell what's the meanning of these instrutions(in red) in the bqfs file:

    writing IF:

    C: 16 66 00
    W: 16 00 05
    W: 16 64 05 00
    X: 170


    C: 16 66 00
    C: 16 04 83 FA 72 9E
    W: 16 00 0C 00 00 00 83 DE
    W: 16 64 6D 01

    ....

    writing DFI:

    C: 16 66 00
    W: 16 00 08
    W: 16 64 08 00
    X: 2

    C: 16 66 00
    C: 16 04 2E 51 i know this is the checksum(0x512E) of dfi data
    W: 16 00 05
    W: 16 64 05 00
    X: 170
    C: 16 66 00
    C: 16 04 83 FA 72 9E
    W: 16 00 01 00 00 05 54 54 15
    W: 16 64 C3 00
    X: 20
    C: 16 66 00
    W: 16 00 05
    W: 16 64 05 00
    X: 170 
    C: 16 66 00
    C: 16 04 D8 4E 48 9E

    i can't get the correct checksum of IF and ALL FLASH,can you tell how to do?

    thank you very much!