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.

[参考译文] BQ76952:AFE 以0xFF...响应 OTP_WR_CHECK ()(子命令0x00A0)

Guru**** 1832870 points
Other Parts Discussed in Thread: MSPM0L1305, BQ76952
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1389886/bq76952-afe-responds-to-otp_wr_check-subcommand-0x00a0-with-0xff

器件型号:BQ76952
主题中讨论的其他器件:MSPM0L1305

工具与软件:

您好!

我目前正在为使用 Code Composer Studio 的具有 MSPM0L1305和 BQ76952的电池管理系统编写固件。

我目前正在实施 OTP 过程、能够成功完成以下文档中所述的第8步。 但是、当我向 AFE 发送 OTP_WR_CHECK ()(子命令0x00A0)时、从0x40到0x5F 的读数都是0xFF (即0xFF 的32个字节)。

但是,如果我将 OTP_WR_CHECK()子命令替换为某个随机的2字节数字(例如0x0000或0x1234 ),而这些数字未定义为命令,那么令人惊讶的是,从0x40读取的值是0x80,这会成功地将代码移至下一步(即上述文档中的步骤10)。

有人能对这种行为分享一些见解吗?

是否存在特定的情况、AFE 将值0xFF 填充到0x40至0x5F 的存储器中?

谢谢!

李京宰

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

    您好 Kyungjae:

    返回0xFF 通常意味着子命令尚未完成操作。

    能否发送每个步骤的逻辑分析仪捕获结果?

    此致、

    Thomas Rainey

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

    您好 Thomas:

    感谢您的答复。

    在执行以下调用 OTP 步骤的函数期间、请找到逻辑分析仪数据(.Sal) attached.captured。

    我们的电路板上有两个 BQ76952芯片、它们通过同一条 I2C 总线连接。 以下函数将其中一个置于 SHUTDOWN 模式、同时更改 I2C 地址并将其另一个置于 OPTION 模式:

    void BQ769x2_SetI2CAddrOTP(const uint8_t i2cTarAddr)
    {
        uint16_t batteryStatus = 0;

        if (I2C_TestTargetComm(i2cTarAddr) == OK)
        {
            // OTP has already been done, so return
            return;
        }

        // OTP has not yet been done, so perform OTP

        // Shutdown the redundant AFE
        DL_GPIO_setPins(GPIO_AFES_PORT, GPIO_AFES_RST_SHUT_R_PIN);
        TIMER_DelayMs(1500);
        DL_GPIO_clearPins(GPIO_AFES_PORT, GPIO_AFES_RST_SHUT_R_PIN);

        batteryStatus = BQ769x2_ReadBatteryStatus(AFE_DEFAULT_ADDR);

        // Ensure that the device is in FULLACCESS mode
        if (((batteryStatus >> BATTERY_STATUS_OFS_SEC0) & 0x03) == FULLACCESS)
        {
            // Enter CONFIG_UPDATE mode
            // - It is required to be in CONFIG_UPDATE mode to program the device RAM
            //   settings. See TRM for full description of CONFIG_UPDATE mode.
            CmdOnlySubcmd(AFE_DEFAULT_ADDR, SET_CFGUPDATE);
            DelayUS(8000);

            // Settings:Configuration:I2C Address
            BQ769x2_SetReg(AFE_DEFAULT_ADDR, I2C_ADDRESS, VAL_I2C_ADDR_NEW, 1);

            // Exit CONFIGUPDATE mode (Subcmd 0x0092)
            CmdOnlySubcmd(AFE_DEFAULT_ADDR, EXIT_CFGUPDATE);
            DelayUS(8000);
        }

        // I2C address change is applied on reset or when SWAP_COMM_MODE subcommand
        // is received.
        // NOTE: Due to the BMS 2.0 Rev1 hardware issue, reset couldn't be used.
        //       Consider changing this to resetting the AFE when the hardware
        //       issue gets resolved.
        CmdOnlySubcmd(AFE_DEFAULT_ADDR, SWAP_COMM_MODE);
        DelayUS(8000);

        // Ensure that the I2C address change has been successful
        ASSERT(I2C_TestTargetComm(i2cTarAddr) == OK);

        // Enter CONFIG_UPDATE mode
        // - It is required to be in CONFIG_UPDATE mode to program the device RAM
        //   settings. See TRM for full description of CONFIG_UPDATE mode.
        CmdOnlySubcmd(i2cTarAddr, SET_CFGUPDATE);
        DelayUS(8000);

        batteryStatus = BQ769x2_ReadBatteryStatus(i2cTarAddr);

        // Check if OTP conditions are met
        if (((batteryStatus >> BATTERY_STATUS_OFS_OTPB) & 0x01) == 0)
        {
            if (BQ769x2_ReadOTPWriteCheck(i2cTarAddr) == OTP_WR_CHECK_OK)
            {
                // All OTP conditions are met
                // Perform OTP and ensure that it has been successful
                ASSERT(BQ769x2_ReadOTPWriteResult(i2cTarAddr) == OTP_WR_RESULT_OK);
            }
        }

        // Exit CONFIGUPDATE mode (Subcmd 0x0092)
        CmdOnlySubcmd(i2cTarAddr, EXIT_CFGUPDATE);
        DelayUS(8000);

        // Wake up redundant AFE from SHUTDOWN mode
        DL_GPIO_setPins(GPIO_AFES_PORT, GPIO_AFES_WAKE_R_PIN);
        TIMER_DelayMs(WAKE_TIME_MS);
        DL_GPIO_clearPins(GPIO_AFES_PORT, GPIO_AFES_WAKE_R_PIN);
    } /* End of BQ769x2_SetI2CAddrOTP */

    如果您需要其他信息、请告诉我。

    谢谢!

    李京宰

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

    您好  Kyungjae:

    我没有看到逻辑分析仪捕获。 您是否可以重新连接每个步骤的逻辑分析仪捕捉?

    此致、

    Thomas Rainey

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

    似乎无法在此处上传.Sal 文件。 您是否有任何其他方法来接收.Sal 文件?

    谢谢!

    李京宰

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

    尊敬的  Kyungjae:

    您是否可以尝试通过直接消息发送?

    此致、

    Thomas Rainey

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

    我努力想要控制住,可是实在做不到。 您能否看到您是否可以通过以下链接访问该文件?

    https://drive.google.com/file/d/13FFQ8mRXJGjiGWLhzCe2AA55sWDM4Alv/view?usp=drive_link

    谢谢!

    李京宰

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

    尊敬的  Kyungjae:

    我给您发送了一条私人消息。

    此致、

    Thomas Rainey

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

    尊敬的  Kyungjae:

    查看逻辑分析仪捕获结果后、我想我发现了您的问题。  

    根据该部分、您至少触发了一个安全故障并阻止 OTP。

    您能否读取所有 安全状态寄存器以了解触发了哪个故障?

    此致、

    Thomas Rainey

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

    您好、Thomas:

    我的 OTP 过程用于分离两个 AFE 的 I2C 地址、甚至是在 AFE 完全配置功能之前完成、因此我不确定在 OTP 时读取安全状态是否有意义。 我唯一确定的是、对 BAT 施加10-12V 电压、TS 引脚会读取室温。

    是否建议先配置 AFE、然后执行 OTP 以确保在执行 OTP 时没有由 Safety Status A/B/C 表示的故障或故障?

    除了上述文档之外、您能告诉我在哪里可以找到成功执行 OTP 所需满足的所有条件吗?

    谢谢!

    李京宰

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

    尊敬的  Kyungjae:

    下面是一个有用的信息  常见问题解答。 具体而言、在最后一部分、"我在系统中使用 SUV 永久失效以及保险丝。 在使用低10-12 V 电源对 OTP 进行编程后、如何防止保险丝熔断?' 应该有助于解决这个问题。  

    此致、

    Thomas Rainey

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

    您好、Thomas:

    感谢您提供的信息、它非常有帮助。

    在我看来、关键是要采取必要的措施来确保 BQ76952

    1.对 BAT 施加10-12V 电压

    2.无故障

    3.无永久性故障

    才能成功完成 OTP 过程。 满足条件2和3的可能方法之一是在执行 OTP 之前临时禁用所有故障和永久故障检测。

    能否确认这是否正确?

    谢谢!

    李京宰

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

    尊敬的  Kyungjae:

    听起来不错! 我唯一要添加的内容是仔细检查0x12 Battery Status ()的位7:

    这将通知您 OTP 是否被阻止。

    我还可以添加12V 的电压到 BAT 引脚、以确保有足够的电压。

    此致、

    Thomas Rainey

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

    您好、Thomas:

    感谢您的澄清。 我在 TRM 中发现"Settings:Protection:Enabled Protections A"的默认设置为0x88、表示默认情况下启用 SCD 和 COV。

    由于在 OTP 时、我的板未连接到电池仿真器、因此我假设电池电压读数随处可见、而 COV 却阻止了 OTP。

    鉴于此、是否有适当的方法可以暂时绕过 COV 固件? 或者我是否需要确保此板连接到电池仿真器、电池仿真器可将提供的电压(12V)均匀分布到每个电池、以防止触发 COV?

    谢谢!

    李京宰

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

    尊敬的  Kyungjae:

    我建议阅读 该线程 它将提供有关该主题的有用信息。

    此致、

    Thomas Rainey

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

    您好、Thomas:

    我对迟交的答复表示歉意。 我想我有足够的信息可以继续前进。 我将在此处关闭该主题、如果我遇到其他问题、稍后我们会回复您。

    谢谢!

    李京宰