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.

[参考译文] BQ79616-Q1:OTP 编程

Guru**** 2589280 points
Other Parts Discussed in Thread: BQ79616

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1364142/bq79616-q1-otp-programming

器件型号:BQ79616-Q1
主题中讨论的其他器件:BQ79616

我执行了数据表9.3.6.3.2 (OTP 编程)中表9-26中的步骤、但未执行操作"b"。 的位置。 和"C"。 步骤5的内容与数据表中的内容不同。
哪一项是正确的、数据表还是实际行为?


数据表的行为
b.如果对第1页进行了编程、则 OTP_CUST1_STAT[PROGOK]、[TRY]、[OVOK]和[UVOK]位将为1。 其他位为0。
c.如果对第2页进行了编程、则 OTP_CUST2_位为 STAT[LOADED]、[PROGOK]、[TRY]、[OVOK]和[UVOK]位为1。 其他位为0。


实际操作
B.和 C.
OTP_CUST2_STAT:所有位均为0。
但是、执行步骤6后、与数据表中相同的位变为1。

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

    Yoshihiro

    您具体执行了哪些步骤? 您能分享您的代码吗? 执行了步骤6之后、哪些是唯一的特定位? 您能列出一下吗?  

    此致、

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

    Ben San、

    感谢您的答复。

    抱歉、未经我们的老板批准、无法提供源代码。
    可以提供发送和接收命令的图像、但调查是否困难?

    此致。

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

    Yoshihiro

    我不需要源代码。 我只需要知道您发送了什么命令以及从器件接收到了什么数据。

    此致、

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

    Ben San、

    我明白了。 我会将日志发送给您、请稍候直到下周。
    对于我们使用的器件、已使用 OTP 第1页和第2页进行了编程。
    是否有清除 OTP 数据的方法?

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

    Yoshihiro

    OTP 表示"一次性编程"。 顾名思义、您只能对其进行一次编程、并且在对其进行编程之后、 无法更改数据。  无法清除或更改该设备上的任一页。  

    您看到的错误是因为您已经对 OTP 数据进行编程。  

    此致、

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

    Ben San、

    我知道了、我将使用另一个器件收集日志。

    好的、我还有一个问题。
    我想知道为什么使用2个页面来实现 OTP。
    使用这两个页面有哪些用例?

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

    Yoshihiro

    这两个页面可用于提供冗余并提高安全性。 如果加载第2页(具有优先级)时发生错误、第1页可用作备份。

    此致、

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

    Ben San、
    我看到、通常使用第2页、但在出现错误时、第1页用作备份。
    我们目前正在准备收集日志、因此请等待几天。

    此致。

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

    Ben San、

    谢谢您的等待。
    我将向您展示日志、请进行检查。

    此致。

    ******

    对 OTP 进行编程(第1页)

    步骤1
    发送:93 00 03 00 02 B7 78 BC 9B 6E <- a.将数据写入 OTP_PROG_UNLOCK1A 至 OTP_PROG_UNLOCK1D。
    Send : 93 00 03 52 7E 12 08 6F 4F 4C <- b.将数据写入 OTP_PROG_UNLOCK2A 至 OTP_PROG_UNLOCK2D。

    步骤2
    发送:80 00 05 19 00 3E 4F <- a.从 OTP_PROG_STAT 读取数据。
    Recv : 00 05 19 80 3E 31 <-[UNLOCK]= 1. 好的。

    步骤3
    Send : 90 00 03 0B 01 D2 ED <- a.将数据写入 OTP_PROG_CTRL [PAGESEL][PROG_GO]。

    步骤4.
    等待 tPROG= 100ms。

    步骤5.
    发送:80 00 05 19 00 3E 4F <- a. 从 OTP_PROG_STAT 读取数据
    Recv:00 05 19 01 FE 51 <-[DONE]= 1。 好的。
    发送:80 00 05 1A 00 3E BF <- b. 从 OTP_CUST1_STAT 读取数据
    Recv:00 00 05 1A 00 3F 61 <- [PROGOK]、[TRY]、[OVOK]和[UVOK]位不是1。 为什么?

    步骤6.
    Send : 90 00 03 09 02 93 8C <- a.将数据写入 CONTROL1[SOFT_RESET]。


    对 OTP 进行编程(第2页)

    步骤1
    发送:93 00 03 00 02 B7 78 BC 9B 6E <- a.将数据写入 OTP_PROG_UNLOCK1A 至 OTP_PROG_UNLOCK1D。
    Send : 93 00 03 52 7E 12 08 6F 4F 4C <- b.将数据写入 OTP_PROG_UNLOCK2A 至 OTP_PROG_UNLOCK2D。

    步骤2
    发送:80 00 05 19 00 3E 4F <- a.从 OTP_PROG_STAT 读取数据
    Recv : 00 05 19 80 3E 31 <-[UNLOCK]= 1. 好的。

    步骤3
    Send : 90 00 03 0B 03 53 2C <- b.将数据写入 OTP_PROG_CTRL [PAGESEL][PROG_GO]。

    步骤4.
    等待 tPROG= 100ms。

    步骤5.
    发送:80 00 05 19 00 3E 4F <- a. 从 OTP_PROG_STAT 读取数据
    Recv:00 05 19 01 FE 51 <-[DONE]= 1。 好的。
    发送:80 00 05 1B 00 3F 2F <- c. 从 OTP_CUST2_STAT 读取数据
    recv:00 00 05 1B 00 3E F1 <-[已加载]、[PROGOK]、[TRY]、[OVOK]和[UVOK]位不是1。

    Send : 90 00 03 09 02 93 8C <- a.将数据写入 CONTROL1[SOFT_RESET]。

    ******

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

    Yoshihiro

    在复位器件时、您是否看到输入 NVM 寄存器的信息反映在实际寄存器中? 在运行 OTP 编程之前、您是否在 CUST_CRC_HI/LO 中放置了适当的 CRC 位?

    此致、

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

    Ben San、

    >重置器件时、您是否看到输入 NVM 寄存器的信息反映在实际寄存器中?
    是的、我重置了器件、信息显示为预期状态。

    >在运行 OTP 编程之前、您是否在 CUST_CRC_HI/LO 中放置了相应的 CRC 位?
    是的、我设置在修改影子寄存器设置后计算的 CRC 值。
    作为参考、我在附加一个文件时设置了影子寄存器。

    (复位时读取的值相同。)


    e2e.ti.com/.../OtpProgrammingValue.txt

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

    Yoshihiro

    如果您尝试在器件上进行 OTP 编程、并且器件已成功对页进行编程、则将获得所看到的结果。 您似乎已经对器件进行编程。

    此致、

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

    Ben San、
    很抱歉有误导性的评论。
    影子寄存器是保存到 NVM 寄存器中之前的设置、我在未保存 NVM 寄存器的情况下在器件上执行 OTP 编程。
    如果器件已进行编程、则 OTP_CUST1_STAT[PROGOK]和[TRY]位将为1、但我在进行 OTP 编程之前确保这两个位均为0。

    无 OTP 编程。
    发送:80 00 05 1A 00 3E BF <-从 OTP_PROG_STAT 读取数据。
    Recv:00 00 05 1A 00 3F 61 <-[PROGOK]和[TRY]位为0。

    已进行 OTP 编程。
    发送:80 00 05 1A 00 3E BF <-从 OTP_PROG_STAT 读取数据。
    recv : 00 05 1A 0F 7F 65 <-[PROGOK]和[TRY]位是1。

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

    Yoshihiro

    在尝试 OTP 编程后在 OTP_CUST1_STAT 中为您提供0x00的器件上(我会将该器件称为"故障器件")、0x00表示 OVOK = 0和 UVOK = 0、这意味着器件可能在 OTP 编程期间检测到了 OV 事件和 UV 事件。 同时具有这两者并且未在 OTP_PROG_STAT 中检测到这两者的可能性很小。  

    我有一些问题要问您:

    1)在"故障器件"上、当您执行复位时、您是否看到寄存器中正确加载了您尝试编程到 OTP 页面中的值? 如果尽管 OTP_CUST1_STAT 值不变、但操作仍然成功、则寄存器可能会以某种方式损坏。

    2) 2)您是否可以在"故障器件"上再次尝试 OTP 编程并在该过程中测量 LDION 电压裸片温度? 这样、我们就知道器件是否正确检测了 OVOK 和 UVOK 故障。

    3) 3)在不是"故障器件"的器件上、您是否能够成功对 OTP 页面进行编程并按预期工作? 如果可以、它会告诉我们该过程名义上是正确的。

    4) 4)您是否有多个"故障器件"、换句话说、在尝试 OTP 编程后、多个器件在 OTP_CUST1_STAT 中显示0x00?

    此致、

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

    Ben San、
    我将回答问题3)和4)。
    很抱歉、我将在回答之前先检查1)和2)。

    3) 3)在不是"故障器件"的器件上、您是否能够成功对 OTP 页面进行编程并按预期工作? 如果可以、它会告诉我们该过程名义上是正确的。
    ->不可以、当我尝试 OTP 编程时、所有器件在 OTP_CUST1_STAT 中都显示0x00、并且不能按预期工作。


    4) 4)您是否有多个"故障器件"、换句话说、在尝试 OTP 编程后、多个器件在 OTP_CUST1_STAT 中显示0x00?

    ->是的、尝试 OTP 编程后、任何器件都将在 OTP_CUST1_STAT 中显示0x00。

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

    Ben San、
    我有几个关于2)的问题。

    2)-1是否可以测量已完成 OTP 编程的器件上的 LDOIN 电压和芯片温度?
    2)-2在 OTP 编程之前、是否可以通过读取 DIETEMP1_HI/LO 和 DIETEMP2_HI/LO 来测量芯片温度?
    2)-3当 OTP 编程开始时、LDOIN 电压是否从6V 变为8V?

    此致。

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

    Yoshihiro

    我将按顺序回答您的问题、但我们需要问题的答案来尝试对其进行诊断。

    2.1)您始终可以测量 LDOIN 电压、但我们只对 OTP 编程尝试期间的电压感兴趣

    2.2)是的、可以在 OTP 编程前后使用寄存器测量 DIETEMP、但不能在期间测量

    2.3)根据数据表第13页上的图表、当 OTP 编程开始时、应该更改为8V:

    此致、

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

    Ben San、

    谢谢您的等待。
    我将回答问题1)和2)。

    1) 1)是、复位器件后、预期值被写入 OTP。
    我将附加每个状态的日志。

    - 1.OtpDefaultValues.txt
    -> SHUTDOWN 模式至 ACTIVE 模式(默认值[无 OTP 编程])

    e2e.ti.com/.../1.OtpDefaultValues.txt

    - 2.BeforeOtpProgramming.txt
    -> OTP 编程之前。

    e2e.ti.com/.../2.BeforeOtpProgramming.txt

    - 3.AfterOtpProgramming.txt
    -> OTP 编程后。

    e2e.ti.com/.../3.AfterOtpProgramming.txt

    2)我将报告 LDOIN 电压和内核温度的测量结果。
    如随附的图所示、当我启动 OTP 编程时、LDOIN 电压从6V 变为8V。

    DIETEMP1_HI/LO 和 DIETEMP2_HI/LO 寄存器介于30度和32.8度之间。

    读取裸片温度1和2
    发送:80 00 05 AE 03 09 BE
    Recv : 03 00 05 AE 05 20 04 BE 6A 25.

    - DIETEMP1_HI/LO
    0x520 = 1312 * 0.025 = 32.8度。

    - DIETEMP2_HI/LO
    0x4BE = 1214 * 0.025 = 30.35度。

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

    Yoshihiro

    很抱歉延迟了响应。

    您能解释一下上一回复中的第三步("AfterOTP 编程")是否位于数字复位之后吗? 总之、 这是我们预期的过程:1)尝试对 OTP 寄存器进行编程2)执行数字复位(发送唤醒音或对器件执行下电上电) 3)读取 OTP 寄存器。 如果 OTP 寄存器是正确的值、则我们将知道编程成功。  

    此外、除了 OTP 寄存器之外、您还可以读取所有故障寄存器吗?

    此致、

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

    Ben San、

    感谢您的答复。
    "3.AfterOtpProgramming.txt"是在执行具有唤醒音调的数字复位后读取的值。
    OTP 寄存器值​​正确、所以我认为编程成功、但我有几个问题。

    1.是"1)"中的步骤1-6。 OTP 编程"? 如果正确、是否需要执行以下步骤?

    2.​​通过 OTP 编程更改的寄存器值在执行数字复位后才会生效?

    >此外、除了 OTP 寄存器之外、我是否可以读取所有故障寄存器?

    是的、我可以读取故障寄存器、但可能会发生什么类型的错误?

    此致。

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

    Yoshihiro

    1)步骤5.b 和5.c 并非绝对必要、它们仅确认 OTP 编程成功。 第6步实际上会更新寄存器、以使其反映正确的值

    2) 2)是。 在执行复位之前、不会通过 OTP 值填充寄存器。

    3) 3)我们想知道在 OTP 过程中看到了哪些故障(如果有)。

    您能否确认您在尚未编程的器件上执行此操作? 您可以通过在编程尝试之前检查0x51A 和0x51B 来实现此目的。

    此致、

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

    Ben San、

    1) 1)我了解需要执行步骤5.b 和5.c 才能知道 OTP 编程是否成功。
      我有几个问题:
        1.是否需要在步骤5.a 和步骤5.b (步骤5.c)之间等待?
          如果是、等待时间应该是多久?
        2.执行步骤6后、我们应该等待多长时间才能更新寄存器?

    3) 3)我应该从0x52D 读取到0x554吗?
       此外、我应该何时读取故障寄存器? (在第5步之后还是在第6步之后?)

    >可以在尝试编程之前通过检查0x51A 和0x51B 来执行此操作。
     在尝试对第1页进行编程之前、我们检查0x51A (OTP_CUST1_STAT)是否满足以下条件。

     

    我已附上编程第1页的命令日志以供参考。

    e2e.ti.com/.../OtpProgrammingCommands.txt

    此致。

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

    Yoshihiro

    您不需要在步骤5.a 和5.b.之间等待 在执行第6步后需要等待1ms、软复位才能完成。

    在执行步骤5和步骤6之后、可以在执行该过程之前、步骤6之后读取故障寄存器。 您还需要读取0x51a 和0x51b、因为这两个页可能相互关联。

    此致、

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

    Ben San、

    我读取了故障寄存器、因此我附加了日志。
    因此、没有发生故障。

    e2e.ti.com/.../FaultRegisters_5F00_20240614.txt

    顺便说一下、在步骤6之后、不能读取0x51A 和0x51B。
    这可能是什么原因呢?
    (有关详细信息、请参阅 OtpProgrammingCommands20240614.txt)e2e.ti.com/.../OtpProgrammingCommands20240614.txt

    此致。

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

    Yoshihiro

    执行第6步后、您需要对器件自动寻址、然后才能再次对其进行读取。

    此致、

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

    Ben San、

    在步骤6之后、我已经对器件进行了自动寻址、那么以下步骤是否正确?

    发送广播写入以设置 CONTROL1[ADDR_WR]= 1。
     发送:D0 03 09 01 0F 74.

    将广播写入与数据0x00一起发送到 DIR0_ADDR 寄存器。
     发送:D0 03 06 00 CB 44

    发送广播写入以设置 COMM_CTRL[STACK_DEV]= 0、COMM_CTRL[TOP_STACK]= 0以及 CONTROL1[ADDR_WR]= 0。
     发送:91 00 03 08 00 9D 1C

    此致。

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

    Yoshihiro

    对于自动寻址序列、如果您只有一个器件、则 COMM_CTRL = 0x01、并且 ADDR_WR 位自清零、则无需将其复位。 否则、应该可以。  

    我已经和 BQ79616的设计人员交谈过、并学习了一些知识:

    1)两个编程页存在,以防第一页编程失败。 如果对这两个页面进行编程、则永远不会加载第一页。 正确的步骤是对第一页进行编程、以及对第二页编程失败的情况(以及仅在该情况下)进行编程。 如果在尝试加载 OTP 页面时检测到错误数据、则硬件复位值将代替错误数据。  

    2)设置第2页后、无法对第1页进行编程。

    3) 3) OTP_CUSTx_STAT 寄存器仅在加载 OTP 页面时更新、因此仅在复位后更新。 您需要执行数字复位并成功地重新建立通信、然后才能从数字复位中获取数据。 但是、OTP_PROG_STAT 中的数据将在复位后丢失、因此您必须在发送复位之前读取它。

    此致、

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

    Ben San、

    感谢您的建议。
    只需实现一个器件。
    因此、我们需要设置 COMM_CTRL = 0x01、而不需要设置 CONTROL1、对吗?

     

    1) 1)如果我们在影子寄存器中设置一个值、我们可以在不进行 OTP 编程的情况下使用该器件、但在哪些情况下我们应该需要 OTP 编程?

    3) 3)在步骤4之后、我是否应该按照以下步骤操作?
     步骤5.
      检查以确保 OTP 编程期间没有错误。 成功完成 OTP 编程后、以下位预计为1:
      a. OTP_PROG_STAT[DONE]= 1、OTP 编程完成。 不会在此寄存器中设置其他位。

    步骤6.
      发出数字复位以在寄存器中重新加载已更新的 OTP 值:
      a. CONTROL1[SOFT_RESET]= 1

     步骤7.
      等待 tRST = 1ms。 才能完成软复位。

     步骤8.
      设置自动寻址。
      A. CONTROL1[ADDR_WR]= 1。
      B. DIR0_ADDR = 0x00。(例如)
      c. COMM_CTRL[STACK_DEV]= 0、COMM_CTRL[TOP_STACK]= 1。

     ***需要等到 ADDR_WR 位清零后再执行第9步? ***

     步骤9.

      检查以确认 OTP 编程成功:
      a.如果对第1页进行了编程、则为 OTP_CUST1_STAT[LOADED]、[PROGOK]、[TRY]、[OVOK]、 和[UVOK]位为1。 其他位为0。
      b.如果对第2页进行了编程、则为 OTP_CUST2_STAT[LOADED]、[PROGOK]、[TRY]、[OVOK]、 和[UVOK]位为1。 其他位为0。


    此致。

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

    Yoshihiro

    如果您在器件中有配置是在唤醒之前知道的、则 OTP 编程会很有用。 常见的示例包括器件 ID 和 ADC 设置。 每当器件接收到数字复位时、您就会获得加载到 OTP 页面中的值而不是默认值、并且您不必在每次执行该复位时对其进行编程。 这对于器件 ID 最常见、因为您必须执行自动寻址来配置器件 ID、并且如果提前正确配置了堆栈、则可以跳过整个过程。  

    在发送设置 ADDR_WR 的命令后、该器件接收的下一个写入命令会清除 ADDR_WR。 设置 ADDR_WR 后、器件不会转发命令、因此广播写入将在该器件上停止。 此外、设置 ADDR_WR 是您只能写入 DIR0/1_ADDR 寄存器的时间。 如果您按照自动寻址过程的步骤操作、则在执行步骤9之前不必再等待任何时间。

    此致、

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

    Ben San、

    感谢您的评论。
    我尝试 按照我们已经讨论过的步骤进行 OTP 编程。

    让我再检查一件事以防万一。
    如果我在步骤8中未将 COMM_CTRL[TOP_STACK]设置为1、那么步骤9中的寄存器读取是否会失败、如下所示?

    再次读取 OTP_CUST1_STAT1、
    发送:80 00 05 1A 00 3E BF
    Recv : 00 F1 AD F0 00 20 <-设备没有响应?

    再次读取 OTP_CUST1_STAT2、
    发送:80 00 05 1B 00 3F 2F
    Recv : 00 F1 AD F0 00 20 <-设备没有响应?


    此致。

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

    Yoshihiro

    有。 如果未正确地整体完成自动寻址序列、该器件将不支持根据数据表的第9.3.6.1.3节进行读取。 在自动寻址完成之前、仅支持广播写入。  

    此致、

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

    Ben San、

    感谢您的答复。
    我在第1页执行了 OTP 编程、并确认工作正常。
    (有关详细信息、请参阅 Otp Programming_Page1.txt)

    e2e.ti.com/.../8424.OtpProgramming_5F00_Page1.txt

    但是、当我随后在第2页执行 OTP 编程时、在步骤9中、器件没有响应。
    (有关详细信息、请参阅 Otp Programming_Page2.txt)
    如果我写入第2页、我是否应该在第9步中执行"a"?

    e2e.ti.com/.../2148.OtpProgramming_5F00_Page2.txt

    另外、作为一个单独的问题、如果我执行第6步、是否会发生 NFAULT?


    此致。

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

    Yoshihiro

    是的、执行数字复位(这就是您在步骤6中执行的操作)会导致 FAULT_SYS[DRST]= 1。  

    为了使设备可靠地工作、您可能每次都需要执行完整的自动寻址序列(包括步骤1和步骤5、同步 DLL)。 请在数据表(链接)中的第9.3.6.1.3.2.2节中查找这些步骤。

    此外、如果对 PAGE 1的编程成功、则无需在单个器件上对两个页进行编程。 我了解到这两个页面不是冗余的、如果对第2页进行了编程、则永远不会读取第1页。 仅当 PAGE 1的编程失败时、才需要 PAGE 2。

    此致、

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

    Ben San、

    感谢您的建议。
    在步骤6中、我将忽略数字复位后的 NFAULT。

    我没有考虑同步 DLL。
    对于步骤8、我应该遵循哪些具体步骤?

    (添加了红色字体的步骤)

    虚拟写入以在写入方向同步所有菊花链器件 DLL 斜坡。

     广播写入 OTP_ECC_DATAIN1至 OTP_ECC_DATAIN9 = 0x00 (例如)。

    2.设置自动寻址。
     A. CONTROL1[ADDR_WR]= 1。
     B. DIR0_ADDR = 0x00。(例如)
     c. COMM_CTRL[STACK_DEV]= 0、COMM_CTRL[TOP_STACK]= 1。

    3.虚拟读取以在读取方向同步所有菊花链器件 DLL 斜坡。
     广播读取以通过 OTP_ECC_DATAOUT1至 OTP_ECC_DATAOUT9读取 OTP_ECC_DATAOUT1。

    此外、执行所有步骤后、是否需要等待读取器件?
    或者我能否重复这些步骤、直到 OTP_ECC_DATAOUT1-9 读取成功?

    此致。

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

    Yoshihiro

    红色的两个步骤是正确的。 您需要通过 OTP_ECC_DATAIN9将0x00广播到 OTP_ECC_DATAIN1、然后将读取广播到相同的寄存器。 这需要是八次单独的写入/读取、并且必须一个接一个地进行。 您不会接收来自读取的任何数据 .

    您不必在命令之前或之后等待。

    此致、

    本  

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

    Ben San、

    在进行 OTP 编程之前、我在从关断模式转换到活动模式后尝试自动寻址。
    因此、无法在 OTP_ECC_DATAOUT3之后进行虚拟读取。
    (有关详细信息、请访问 Auto-Addressing.txt)

    e2e.ti.com/.../Auto_2D00_Addressing.txt

    "不接收来自读操作的任何数据"。 意味着器件没有响应、或者有响应但没有有效数据?

    此致。

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

    Yoshihiro

    e2e.ti.com/.../Communication_5F00_with_5F00_one_5F00_616.sal

    我已附加了一个逻辑分析仪文件、其中显示了自动寻址序列(这是 WAKE ping 后的第一组命令)。 您应该会收到器件的响应、但数据将仅为零。  

    此致、

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

    Ben San、

    非常感谢您提供日志。
    在检查日志差异后、我发现一个错误、即虚拟读取大小短于1字节。
    修复了错误、以便在虚拟读取之后按预期运行寄存器读取。

    (有关详细信息、请参阅随附的日志。)

    还存在一些其他差异、现将其更正如下:
    在步骤1中、写入了 OTP_ECC_DATAIN9。
    2、" 1。" 在步骤4中丢失。
    在步骤5中、读取了 OTP_ECC_DATAOUT1至 OTP_ECC_DATAOUT9。

    e2e.ti.com/.../7610.Auto_2D00_Addressing_5F00_20240627.txt

    如果所附日志没有问题、请重试 OTP 编程。

    此致。

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

    Yoshihiro

    自动寻址序列看起来是正确的。 一旦能够从器件中读取数据、您就知道该序列已经有效。

    此致、

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

    Ben San、

    在校正自动寻址后、我再次尝试了 OTP 编程、
    但结果是相同的-当我在编程第2页后复位时、器件没有响应。
    (有关详细信息、请参阅随附的日志)

    编程第2页后、广播读取失败、因此除了自动寻址之外、似乎还有一些问题。

    e2e.ti.com/.../OTP_5F00_Programming_5F00_Page1_5F00_20240628.txt

    e2e.ti.com/.../OTP_5F00_Programming_5F00_Page2_5F00_20240628.txt

    此致。

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

    Yoshihiro  

    如果成功编程 PAGE 1、则不必对 PAGE 2进行编程。  

    您是否正在使用单独的器件 尝试对第2页进行编程? 您是否可以在第6步中尝试发送唤醒 ping 而不是软复位(然后在第7步中等待10ms)? 自动寻址序列是否正常适用于您用于第二页编程的器件?

    此致、

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

    Ben San、

    >您是否使用单独的设备尝试编程第2页?
    不可以、我在同一器件上对第1页和第2页进行了编程。

    很抱歉、我无法解释清楚、但我尝试确认如果对第1页的 OTP 编程失败、则可以成功执行第2页的 OTP 编程。
    在这种情况下、我是否应该使用未在第1页或第2页上编程的器件?


    此致。

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

    Ben San、

    我几天没有收到回复、现在情况如何?

    此致。

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

    Yoshihiro

    我很抱歉耽误你的时间。 我是因为一个公共假期离开办公室的。  

    令人奇怪的是、您接收到的数据是乱码的、这与什么都不接收完全不同。 我们注意到您发送的命令重新出现在您收到的数据中:

    这不应该发生。 您是否使用自定义代码? 您能再次确认一下代码目前是否按预期工作吗?

    此外、您是否在完成第1页编程的步骤后立即执行第2页编程? 否则、您可以尝试在各步骤之间重置器件。  

    最后、为了进行仔细检查、堆栈中是否仅连接了一个 BQ79616?

    此致、

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

    Ben San、

    很抱歉这么晚才回复。

    >您是否使用自定义代码? 您能再次确认一下代码目前是否按预期工作吗?
    可以、我们使用自己的原始源代码。
    在接收器件响应之前未清除接收缓冲区、导致数据毫无意义。

    >此外,您是否在完成第1页编程的步骤后立即进行第2页编程?
    否、完成第1页的编程程序后、程序将重新启动。
    重新启动程序后、将使用 WAKE 信号执行数字复位、以将器件从关断模式转换为活动模式。

    >最后、要仔细检查、您是否在堆栈中仅连接了一个 BQ79616?
    是的、没有菊花链、只有一个器件。

    此致。

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

    Yoshihiro

    在接收设备的响应之前未清除接收缓冲区、导致数据毫无意义。

    希望修复此错误可以修复您在第2页编程中看到的错误。

    此致、

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

    Ben San、

    在接收到器件响应之前、将接收缓冲器清除为0并再次执行 OTP 编程。
    但是、由于我们已经知道无法从器件接收响应、因此我认为修复此错误只会将垃圾数据更改为0、因此可能存在其他原因。

    此致。

    第页 S:我将于7月12日至7月15日因公众假期离开办公室。

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

    Yoshihiro  

    在您成功对第1页编程但在对第2页编程时遇到问题的器件中、您能与器件通信吗? 换句话说、当您发送唤醒 ping 并自动对器件进行寻址时会发生什么情况? 您能从中读取数据吗? 或者它现在是坏了吗? 如果您可以读取数据、OTP 编程有什么含义?

    此致、

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

    Ben San、

    在第2页编程有问题的器件上、可以通过发送唤醒 ping 和自动寻址来读取数据、而读取 OTP_CUST*_STAT 和影子寄存器会显示预期的数据。
    因此、在第2页上写入 OTP 后、在软复位后、它似乎无法正常工作。

    e2e.ti.com/.../WakePing_5F00_AutoAddress_5F00_ReadOTP.txt


    此致。

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

    Yoshihiro

    在对第2页进行编程后、似乎需要发送唤醒 ping 而不是软复位。 我不知道为什么。 我可以与设计师交谈,看看他们是否有任何进一步的见解,但这似乎是一个可行的解决方案,特别是因为你将非常少的编程第二页.

    此致、