ZHCAF16 February   2025 BQ76942 , BQ76952

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
  5. 2硬件设置
  6. 3CRC 和校验和编程及示例命令
    1. 3.1 CRC 计算示例
    2. 3.2 校验和计算示例
  7. 4OTP 编程示例
    1. 4.1 配置进入密封模式的编程步骤
    2. 4.2 OTP 编程流程图
    3. 4.3 OTP 逐步命令示例
  8. 5总结
  9. 6参考资料

OTP 逐步命令示例

  1. 通过读取其中一个已编程寄存器,检查器件上是否已完成 OTP 编程。通电时,寄存器报告默认值或 OTP 中编程的值(如果 OTP 已编程)。如果尚未完成 OTP 编程,则转至后续步骤。
    1. 示例:更改 0x9180 设置,然后可以读取 0x9180 寄存器,并检查该寄存器是否显示默认值。如果显示默认值,则进入下一步。
      1. 0x10 0x3E 0x80 Byte3(CRC) 0x91 Byte5(CRC)。
      2. 0x10 0x40 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC)。
  2. 读取 0x12 电池状态 [SEC1,SEC0] 位,以验证器件是否处于完全访问模式 (0x01)。
    1. 读取 0x12 寄存器,如果 sec1=0,sec0=1,则器件处于完全访问模式。进入下一步。如果 sec1=1,sec0=1,则器件处于密封模式。用户需要先进入完全访问模式。
      1. 0x10 0x12 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC)。
    2. 在读取数据存储器前 4 秒内进入完全访问模式。示例如下:Unseal_Key_Step1 0x1234;Unseal_Key_Step2 0x5678;FullAccess_Key_Step1 0x7856;FullAccess_Key_Step2 0x4321。
      1. 0x10 0x3E 0x34 Byte3(CRC) 0x12 Byte5(CRC);//Write Unseal_Key_Step1。
      2. 0x10 0x3E 0x78 Byte3(CRC) 0x12 Byte5(CRC);//Write Unseal_Key_Step1。
      3. 0x10 0x12 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC); //Check Sec1 Sec0.
      4. 0x10 0x3E 0x56 Byte3(CRC) 0x12 Byte5(CRC);//Write Unseal_Key_Step1。
      5. 0x10 0x3E 0x21 Byte3(CRC) 0x12 Byte5(CRC);//Write Unseal_Key_Step1。
      6. 0x10 0x12 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC); //Check Sec1 Sec0.
  3. 如果器件处于完全访问模式,则进入 CONFIG_UPDATE 模式 -(子命令 0x0090)。
    1. 通过写入子命令 0x0090 进入 CONFIG_UPDATE 模式。
      1. 0x10 0x3E 0x90 Byte3(CRC) 0x00 Byte4(CRC)
  4. 在具有 CRC 和校验和的数据存储器中配置寄存器设置。
    1. 将数据存储器配置为 0x9180 至 0x925D,如数据存储器 表中的 BQ76942 技术参考手册所示。
      1. 0x10 0x3E 0x80 Byte3(CRC) 0x91 Byte5(CRC) Byte6(Wdata) Byte7(CRC) Byte8(Wdata) Byte8(CRC)。
      2. 0x10 0x60 Byte2(CheckSum) Byte3(CRC) Byte4(DataLength) Byte5(CRC)。
      3. 0x10 0x3E 0x82 Byte3(CRC) 0x91 Byte5(CRC) Byte6(Wdata) Byte7(CRC) Byte8(Wdata) Byte8(CRC)。
      4. 0x10 0x60 Byte2(CheckSum) Byte3(CRC) Byte4(DataLength) Byte5(CRC)。
      5. 0x10 0x3E 0x5D Byte3(CRC) 0x92 Byte5(CRC) Byte6(Wdata) Byte7(CRC) Byte8(Wdata) Byte8(CRC)。
      6. 0x10 0x60 Byte2(CheckSum) Byte3(CRC) Byte4(DataLength) Byte5(CRC)。
  5. 退出 CONFIG_UPDATE 模式。
    1. 通过写入子命令 0x0092 退出 Config_Update 模式。
      1. 0x10 0x3E 0X92 Byte3(CRC) 0x00 Byte5(CRC)。
  6. 读取数据存储器寄存器以验证所有参数均已成功写入。
    1. 将数据存储器寄存器读取为 0x9180 至 0x925D,如数据存储器 表中的 BQ76942 技术参考手册所示。
      1. 0x10 0x3E 0x80 Byte3(CRC) 0x91 Byte5(CRC)。
      2. 0x10 0x40 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC)。
      3. 0x10 0x3E 0x82 Byte3(CRC) 0x91 Byte5(CRC)。
      4. 0x10 0x40 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC)。
      5. 0x10 0x3E 0x5B Byte3(CRC) 0x92 Byte5(CRC)。
      6. 0x10 0x40 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC)。
      7. 0x10 0x3E 0x5D Byte3(CRC) 0X92 Byte5(CRC)。
      8. 0x10 0x40 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC)。
  7. 进入 CONFIG_UPDATE 模式。
    1. 通过写入子命令 0x0090 进入 CONFIG_UPDATE 模式。
      1. 0X10 0X3E 0X90 Byte3(CRC) 0X00 Byte5(CRC)。
  8. 检查电池状态 [OTPB] 位是否清除,以验证是否满足 OTP 编程条件。
    1. 读取 0x12 寄存器,以获取 OTPB 位状态。
      1. 0x10 0x12 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC)。
  9. 读取 OTP_WR_CHECK()(子命令 0x00A0)。如果返回值为 0x80,则满足 OTP 编程条件。
    1. 写入子命令 0x00A0 并从 0x40 读取,以获取 0x00A0 的数据。
      1. 0X10 0X3E 0XA0 Byte3(CRC) 0X00 Byte5(CRC)。
      2. 0x10 0x40 0x11 0x80 Byte4(CRC)。
  10. 如果 OTP_WR_CHECK 指示满足条件,则发送 OTP_WRITE() 子命令 (0x00A1)。
    1. 写入子命令 0x00A1,以发送 OTP_WRITE()。
      1. 0x10 0x3E 0xA1 Byte3(CRC) 0X00 Byte5(CRC)。
  11. 等待 100 ms。从 0x40 读取以检查 OTP 编程是否成功(0x80 表示成功)。
    1. 从 0x40 读回 0x00A1 子命令数据。
      1. 0x10 0x40 0x11 0x80 Byte4(CRC)。
  12. 进入密封模式。
    1. 写入 0x0030 进入密封模式,并读取 0x12 寄存器,以确保器件进入密封模式。
      1. 0x10 0x3E 0x30 Byte3(CRC) 0x00 Byte5(CRC)。
      2. 0x10 0x12 0x11 Byte3(Rdata) Byte4(CRC) Byte5(Rdata) Byte6(CRC)。
  13. 退出 CONFIG_UPDATE 模式 -(子命令 0x0092)。
    1. 0x10 0x3E 0X92 Byte3(CRC) 0x00 Byte5(CRC)。