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: Not able to put the BQ40Z50 in Full access mode.

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

Hi All,

I am trying to put the chip in full access mode but i am only able to put in unsealed mode and i tried multiple approaches but all the time device is only entering Unsealed mode.

Following are the code i tried. I am checking this operation in Arduino.

1)

uint8_t unsealed_access_cmd[6] = {0x35, 0x00, 0x14, 0x04, 0x72, 0x36};
uint8_t full_access_cmd[6] = {0x35, 0x00, 0xFF, 0XFF, 0XFF, 0XFF};
uint8_t mode=0;

smbus->writeBlock(gauge, 0x44, &unsealed_access_cmd[0], 6); // to change DA configuration
delay(4500);


smbus->writeBlock(gauge, 0x44, &full_access_cmd[0], 6);
delay(4500);
mode=check_access();

2)

uint8_t unsealed_fullaccess_access_cmd[10] = {0x35, 0x00, 0x14, 0x04, 0x72, 0x36, 0xFF, 0XFF, 0XFF, 0XFF};
uint8_t mode=0;

//smbus->writeBlock(gauge, 0x44, &unsealed_fullaccess_access_cmd[0], 10); // to change DA configuration
delay(4500);
mode=check_access();

3)

uint8_t unsealed_access_cmd[6] = {0x35, 0x00, 0x14, 0x04, 0x72, 0x36};
uint8_t full_access_cmd[6] = {0x35, 0x00, 0xFF, 0XFF, 0XFF, 0XFF};
uint8_t mode=0;

smbus->writeBlock(gauge, 0x44, &unsealed_access_cmd[0], 6); // to change DA configuration

smbus->writeBlock(gauge, 0x44, &full_access_cmd[0], 6);

mode=check_access();

None of the above case the device went to full access mode. Can anyone let me know why I am not able to enter full access mode.

Other functionalities are working WRT IC, i mean the read and write are working.

  • Since each micro has different implementation of SMBus, it is hard to know from the code what goes out on the bus.

    Can you try it first from bqStudio advanced comm tab? If it does not work, then provide details of the data entered on screen for each write. Also note that the delay between the 2 writes of 0xFFFF must not exceed 4 seconds

  • Hi,

    I have few doubts about this,

    1) Do we have to enter Unsealed first to enter full access or directly we can put in full access(UNSEALED-> FULL or direct to FULL access).

    2) Do we need to write the keys like 0x0414 and 0x3672 to the same address. This means, for unsealed access do i need to send 0035 followed by 0x0414 , again 0035 followed by 0x3672 to 0x44. And for Full access do i need to send send 0035 followed by 0x0414 , again 0035 followed by 0x3672, again 0035 followed by 0xFFFF,  again 0035 followed by 0xFFFF to 0x44 (for manufacture block access).

    3) If above is not the case do i need to send 0035 followed by 0x0414 followed by 0x3672 followed by 0xFFFF followed by 0xFFFF to 0x44 (for manufacture block access).

  • 1. Enter unsealed first. Without that full access is not possible

    2. The key is sent as 2 words to the same address (MAC). 0x35 is not used by the gauge.

    See TRM section  11.5.1 FULL ACCESS or UNSEALED to SEALED

  • For BQ4050 -R3, i coudnt find section 11.5. It is only till 11.2

    Is there any reference code that i can refer?

  • In R3 TRM it is section 12.5

    Examples of MAC commands are in 15.1 0x00 ManufacturerAccess() and 0x44 ManufacturerBlockAccess()

  • It is said that to read or write Full access key, we will  have to send SMBus block write with Command = 0x0035.

    I have the following doubt : -

    For unlocking full access mode do we have to send ManufacturerAccess() 0x0035 Security Keys along with access keys as follows: 35, 00, 14, 04, 72, 36, FF, FF, FF, FF.

    Or can we just send as follows without  ManufacturerAccess() x00035 Security Keys : 14, 04, 72, 36, FF, FF, FF, FF.

    Because in my experiment the former is not working so far.

    Haven't tried the later yet. In datasheet is seems somewhat confusing about the key part unlike other functionalities. Please let me know which approach is correct.

  • Command 0x0035 is not used for unseal.

  • Command 0x0035 is only for reading or changing the keys. It is not used to seal or unseal. The keys are used for unseal.