BQ76952: OTP完成返回值不对,却能成功写入

Part Number: BQ76952


根据手册进行OTP,开始写入,手册说等待100ms,我延长等待至120ms再去读取,返回0x00或0x04,设备断电在上电发现OTP已经成功了,不是手册所说的0x80,请问为什么出现这个情况

  • 您好

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 您好

    还有个问题,就是BQ我已经OTP过了。我多次执行OTP流程,发送OTP_WR_CHECK();返回是0x80。然后发送OTP_WRITE();等待 120 ms。从 0x40 读取是0x00,我BQ芯片已经OTP了,为什么发送OTP_WR_CHECK();返回是0x80,重复写入相同的参数,不算第二次写入吗?

  • 你好

    我给芯片输入电压是12V,在手册要求范围内,如果不满足OTP的条件,那为什么OTP_WR_CHECK()返回是0x80。按照手册返回0x80是可以进行OTP,OTP_WRITE()也给足够时间等待写入,但去读取0x40 是0。我试过去修改配置某个参数值在进行OTP操作,也是遇到以上的问题。如果是因为多次OTP导致不允许写入,OTP_WR_CHECK()应该返回0x08。

  • 您好

    https://www.ti.com/lit/ug/sluuby2b/sluuby2b.pdf?ts=1764636934896

    这个有寄存器的详细说明,且OTP是不允许多次写入的。

  • 你好

    我的意思是,如果不满足OTP条件,OTP_WR_CHECK()返回不应该是0x80,而是别的位置1,或者字节1,2返回是无法编程地址

  • 您好

    4.1 配置进入密封模式的编程步骤 1. 通过读取其中一个已编程寄存器,检查器件上是否已完成 OTP 编程。通电时,寄存器报告默认值或 OTP 中 编程的值(如果 OTP 已编程)。如果尚未完成 OTP 编程,则转至后续步骤。 2. 读取 0x12 电池状态 [SEC1,SEC0] 位,以验证器件是否处于完全访问模式 (0x01)。 3. 如果器件处于完全访问模式,则进入 CONFIG_UPDATE 模式-(子命令 0x0090)。如果未进入该模式,请解 封器件,然后返回步骤二检查器件是否处于完全访问模式。 4. 在数据存储器中配置寄存器设置。 5. 退出 CONFIG_UPDATE 模式 -(子命令 0x0092)。 6. 读取数据存储器寄存器以验证所有参数均已成功写入。 7. 进入 CONFIG_UPDATE 模式。 8. 检查电池状态 [OTPB] 位是否清除,以验证是否满足 OTP 编程条件。 9. 读取 OTP_WR_CHECK()(子命令 0x00A0)。如果返回值为 0x80,则满足 OTP 编程条件。 10. 如果 OTP_WR_CHECK 指示满足条件,则发送 OTP_WRITE() 子命令 (0x00A1)。 11. 等待 100 ms。从 0x40 读取以检查 OTP 编程是否成功(0x80 表示成功)。 12. 进入密封模式。 13. 退出 CONFIG_UPDATE 模式 -(子命令 0x0092)。

  • 你好

    现在是第一次进行OTP,BQ按照你的步骤执行,执行到第11步,等待120ms,读取0x40,返回是0x00,我程序认为是OTP失败退出,然后断电在上电,执行第一步,发现已经写入成功了,请问为什么读取0x40,返回是0x00,我给芯片供电电压是11.5V。和你所给的链接中说的情况不太一致 (If the OTP_WR_CHECK() is returning 0 that indicates the stack voltage is too high for OTP programming)

  • 您好

    After waiting for 120 ms, you have read from 0x40? Is there a logic analyzer you can share perhaps?

  • 你好,没有逻辑分析仪。我所看到的现象是这样,执行到11步,等待了120MS后读取0X40,没有返回0X80。我尝试把等待时间延长至200MS后读取0x40,依然返回0X00。设备断电在读取其中一个想要编程寄存器,返回是我配置进去的值

  • 您好

    If you could share a logic analyzer file, that would be helpful to see what exactly was sent and to check if anything potentially occurred during the transaction that may not be obvious. 

    If the OTP_WR_CHECK is reading back 0x00, this would mean that OTP programming is not allowed. What is the stack voltage on the BAT pin when they are trying to program OTP?

    When you say the device loses power and reads one of the registers you want to program, did the device truly reset? Is this seen on the REG18 pin where it fully goes to 0V before going back up to ~1.8V?

    Also, could you share what registers you wanted to program through a .gg file potentially? 

    When you read from 0x40, is this done like below?

    Write: 0x10 0x3E 0xA1 0x00

    Wait 100ms

    Read: 0x10 0x40