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.

BQ27441-G1: V at Chg Term

Part Number: BQ27441-G1

Hi, 

I have BQ27441-G1B I would like edit charge limit parameter. I find it in document SLUUAC9A at V at Chg Term but I cannot modify it.

I tried edit Design Capacity parameter it is work, but  Chgr Term not.

 

how it works:

1. unseal

2. set config access 

3. block data control (send 0x61 0x00)

4. Set data class 82 (0x52)  - (send 0x3E 0x52)

5. Set data block ( send 0x3F 0x00)

6. set capacity to 2200mA (send 0x4A 0x08 and 0x4B 0x98) -- It is work

7. set V at Chg Term to 4190(send 0x61 0x10  and 0x62 0x5E) - doesn`t set

I think the problem is with the offset because every parameter from offset 0-31 I possible edit but over 31 doesn`t. 

I tried set datablock to 0x3f 0x01 but doesn't work..

Please help what is true register address for Vat Chg Term.

Thank you

  • Hi Lorant,

    When a Data Memory class is larger than the 32-byte block size, the DataBlock() command designates in which 32-byte block the desired locations reside. To access data located at offset 32 to 41, use offset = 0x01. (send 0x3F 0x01 like you said). 

    The correct command address is then given by 0x40 + offset modulo 32. Since the offset for V at Chg Term is 33, the address should be 0x40 + (33%32) = 0x41.

    Best,

    Jessica

  • Thank you, its work :) after write to register data read correct values. But probably checksum is wrong, because after restart MCU and read V chg register value is default. 

    my checksum calc:

    uint8_t BQ27441_Checksum(void) 
    {
    uint8_t data[32];
    uint8_t command[2] = { 0x60, 0x00 };
    uint8_t csum = 0;
    
    HAL_I2C_Mem_Read(&hi2c2, (bq27441_adress << 1), 0x40, 1, data, 32, 50);
    
    for (uint8_t i = 0; i < 32; i++) 
        csum += data[i];
    
    csum = 255 - csum;
    command[1] = csum;
    
    HAL_I2C_Master_Transmit(&hi2c2, bq27441_adress << 1, &command[0], 2, 1000);
    
    return csum;
    }

    I read register data from 0x40 to 0x60. 

    Calc checksum and write to 0x60 checksum_val

    How to calc checksum for offset 0x01?

    thanks

  • Hi Lorant,

    I suggest you use the quicker method outlined in step 10.

    temp = (255 - OLD_Csum - OLD_VChgTerm_MSB - OLD_VChgTerm_LSB) % 256

    NEW_Csum = 255 - [(temp + NEW_VChgTerm_MSB + NEW_VChgTerm_LSB) % 256]

    Best,

    Jessica