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.

[参考译文] BQ35100:进入非密封模式

Guru**** 2553450 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/847408/bq35100-access-the-unsealed-mode

器件型号:BQ35100

您好!

我为不同的访问模式创建了一个状态机、但出于某种原因、我无法写入控制状态。
返回控制状态、无论我写入什么、始终提供值2080。

写入 DataFlash 的操作非常完美、例如、我可以更改配置 A。


void setSecurityMode (uint8_t setState){ uint8_t data[2]={0}; 枚举状态{ full_access、 未密封、 密封、 }; 枚举状态= setState; switch (state){ case full_access: DATA[1]= 0xFF; DATA[0]= 0xFF; 代尔马(300); I2cWriteBuffer(&I2C, 0xAA, 0x3e,数据,2); DATA[1]= 0xFF; DATA[0]= 0xFF; 代尔马(300); I2cWriteBuffer(&I2C, 0xAA, 0x3e,数据,2); 代尔马(300); 中断; 外壳未密封: DATA[0]= 0x04; 数据[1]= 0x14; 代尔马(300); I2cWriteBuffer(&I2C, 0xAA, 0x3e,数据,2); 数据[0]= 0x36; 数据[1]= 0x72; 代尔马(300); I2cWriteBuffer(&I2C, 0xAA, 0x3e,数据,2); 中断; 外壳密封: DATA[0]= 0x20;//密封子命令的第一个字节(0x20) DATA[1]= 0x00;//密封子命令的第二个字节(0x00)(寄存器地址将自动递增) I2cWriteBuffer(&I2C, 0xAA, 0x3E, DATA ,2); 代尔马女士(100); 中断; } }


读取控制状态:

void controlStatus()
{
uint8_t bufferRad[2]={0};
uint8_t bufferWrite[2]={0};
I2cSetAddrSize( I2C_ADDR_SIZE_8);
I2cWriteBuffer(&I2C, 0xAA, 0x00 , bufferWrite, 2);
代尔马女士(100);
I2cReadBuffer(&I2C, 0xAA, 0x00 , bufferRead, 2);
DelayMs(100);
} 

因此、我了解了如何写入控制状态:

uint16_t controlSubCmd (uint16_t nSubCmd)
{
uint16_t nresult = 0;
uint16_t pData[2]={0};
pData[0]= nSubCmd & 0xFF;
pData[1]=(nSubCmd >> 8)和0xFF;
代尔马女士(100);
I2cWriteBuffer (&I2C、0xAA、0x00、(uint8_t *) pData、2);//发出控制和子命令
代尔马女士(100);
I2cReadBuffer (&I2C、0xAA、0x00、(uint8_t *) pData、2); //读取数据
代尔马女士(100);
nresult=(pData[1]<<8)| pData[0];
返回结果
;} 

但我仍然无法更改安全模式、即使在状态机内部替换了此命令...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jorg:

      有关说明、请参阅 www.ti.com/.../slua790.pdf。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我遵循与 slua790中完全相同的指令。 通过 I2C 进行写入和读取不是问题、但密封和解封不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jorg:

    必须将解封退回。 如果您使用的是默认密钥、请以小端字节序尝试它们。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    key1[0]= 0x14;
    key1[1]= 0x04;
    key2[0]= 0x72;
    key2[1]= 0x36;
    I2cWriteBuffer (&I2C、 0xAA、0x3E、(uint8_t *) key1、2);//step1= 0x1404
    DelayMs (10);
    I2cWriteBuffer (&I2C、 0xAA、0x3E、(uint8_t *) key2、2);//step2 = 0x7236
    DelayMs (100);
    
    

    这些键现在采用小端序。 但不幸的是,它没有效果。
    我使用 i2c 解码器来查看写入缓冲区之间是否存在任何干扰或 i2c 代码、但似乎它们以正确的顺序发送。

    也许对于小端字节序、您意味着两个键都在小端字节序中? 现在、这些步骤相互隔离。   

    这是我的范围视图:

    感谢您的帮助!

    Jorg

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jorg:

    您必须首先写入0x1404、然后一次性写入0x7236。 然后使用0xFFFF 和0xFFFF 返回到后面。