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.

BQ40Z50: Flashstream SMBUS Format

Part Number: BQ40Z50
Other Parts Discussed in Thread: BQ40Z60, BQSTUDIO

Hi,

We are currently work to speed up production line by trying to flash BQ40z60 Golden File without BQStudio.

Reading some articles and reference it's possible to use bq.fs file format as it's a flashstream which contain any command required to flash the golden file to the chip.

My question:

  1. is there any documentation regarding SMBUS format of flashstream file? since I only able to find I2C format instead. I questioning this because SMBUS read / write block is limited by 32 bytes maximum, but in the files, SWB have 34 bytes of data length. Just wondering if my code is correct.
  2. Is there any solution to unbrick the chip after failed / interrupted flash programming?

Thanks,

Widji

  • Hello Widji,

    You can find more information on other threads regarding the formatting for SMBus flash stream files: https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/922710/bq40z50-programming-in-mass-production/3419355?tisearch=e2e-sitesearch&keymatch=smbus%2520.fs#3419355

    If the gauge was interrupted during programming and returned to FW mode or was power cycled during programming, there is no recover. The only way to recover is to remain in ROM mode when bad programming occurs and try to restart programming.

    Sincerely,

    Wyatt Keller

  • Hello Wyatt,

    Yes I've read this articles, but seems like it's not contain enough information.

    For example on SWB format. it's indicates the line is a command to write a SMBus block of one of more bytes of data. But you know, SMBUS has limited data length (32 bytes max) but in the bq.fs file, it's contain 34 bytes data.

    this is for example:

    SWB: 16 0F 00 40 56 2F 05 C2 28 BF 01 C2 33 3F 2D 90 4C 48 00 00 40 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF

    Byte 0 = address

    Byte 1 = register address

    Byte 2 - 35 = bytes data? > 32 bytes?

    Im really confuse here, do you have any idea?

    Thanks,

    Widji

  • Hello Widji,

    As it is mentioned in the thread, the exact commands are not needed for programming in ROM mode and we cannot give out many details, but the 3rd and 4th bit are essentially the address, the main block of data should be 32 bytes or less.

    I will check to confirm what we can share.

    Sincerely,

    Wyatt Keller

  • Hello Wyatt,

    Thanks for the explanation.

    But, from the article I've read, write block data is something like the following format, where the register address is represent in 2nd byte, and then continue with the data.

    W: i2cAddr RegAddr Byte0 Byte1 Byte2…'

    If I refer to my example, it should be:

    SWB: 16 0F 00 40 56 2F xx xx xx ....

    where:

    I2C Address = 16

    Register Address = 0F

    Data = [00, 40, 56, .....] 

    Thanks,

    Widji

  • Hello Widji,

    I confirmed that the ROM commands don't necessarily follow the 32 byte limit. During programming in ROM mode more than 32 bytes can be written. This is not true when in normal operating mode (must be 32 bytes or less). ROM mode is only for programming.

    Sincerely,

    Wyatt Keller

  • Hi Wyatt,

    Thanks for the confirmation. Since the python SMBus2 limit me to send more than 32 bytes data, I split the data apart, then send the block data twice every row in sequences, it's work for me so far.

    Thanks,

    Widji