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.

[参考译文] TMS570LC4357:闪存驱动程序初始化期间出现 Fapi_Error_OtpChecksumMismatch 错误

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1126512/tms570lc4357-fapi_error_otpchecksummismatch-error-during-flash-driver-initialization

器件型号:TMS570LC4357
主题中讨论的其他器件: HALCOGENTMS570LS3137

大家好、

我将 https://www.ti.com/tool/HERCULES-F021FLASHAPI 中的闪存库 F021 用于 TMS570LC4357 HDK。

在闪存库的初始化期间、函数 Fapi_initializeFlashBanks ()返回 Fapi_Error_OtpChecksumMismatch。  

我正在使用 F021_API_CortexR4_be.lib。

Fapi_initializeFlashBanks()以160MHz 调用。 系统时钟也设置为160MHz。

如果  使用 F021_API_CortexR4_BE_L2FMC.lib 或 F021_API_CortexR4_BE_L2FMC_V3D16、则对函数 Fapi_initializeFlashBanks()的调用会挂起。

您能为您提供解决问题的指南吗?

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

    您好、Divya、

    对于 TMS570LC4357器件、应使用"F021_API_CortexR4_BE_L2FMC.lib"。 系统时钟(例如150MHz)应由"Fapi_initiatalizeFlashBanks()"使用。

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

    您好、Wang、  

    系统时钟和闪存驱动器时钟是否必须相同?

    在本例中,我使用160MHz 作为系统时钟,并将160MHz 传递给函数  Fapi_initiatalizeFlashBanks()。 是这样吗?

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

    如果 使用 F021_API_CortexR4_BE_L2FMC.lib、则函数 Fapi_initiatalizeFlashBanks()没有返回值、且该值挂起。

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

    闪存读取控制寄存器 FRDCNTL 按照相关帖子中的说明进行初始化。 RWAIT 和 EWAIT 位置位。 但我仍然面临同样的问题。

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

    系统时钟为 HCLK。 PLL 或 GCLK 160MHz 是否也同样适合您的配置?  

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

    是的

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

    TMS570LC43x 的最大 HCLK 或系统时钟为150MHz。 您能为  Fapi_initiatalizeFlashBanks()尝试80MHz 系统时钟吗?

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

    我尝试了150MHz、并具有相同的行为。  

    一个问题:在 TMS570LC4357 HDK 中,LED D1 nERROR 始终为红色。 您能就此提供指导吗?

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

    并非总是如此。 请参阅勘误器件#56:

    器件#56 nERROR 断言调试器连接

    严重程度4-低

    预期行为通过 JTAG 连接到器件时不应检测到错误问题调试器连接到器件时有时会生成 CPU 比较错误(ESM 组2通道2)。

    调试器最初连接到器件时的状态。

    含义在与调试器初始连接时、nERROR 引脚将切换。


    解决方法通过向 ESM 模块中的 ESMEKR KEY 寄存器写入0x5来清除 nERROR、并忽略调试器连接时立即发生的 nERROR 引脚切换。

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

    我们是否可以设置调试会话以了解返回值为什么为  Fapi_Error_OtpChecksumMismatch?

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

    您好、Divya、

    您能否与我共享两个 halcogen 配置文件:*。hcg 和*。DIL?

    请参阅在 TMS570LC43x 引导加载程序中使用 F021闪存 API 的示例代码:

    https://git.ti.com/cgit/hercules_examples/hercules_examples/tree/Bootloaders?h=master

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

    您能说在哪里查找勘误表说明吗? 我在数据表中找不到。

    我不使用 HALcogen、而是手动设置寄存器。

    我能否使用您提供的路径 https://git.ti.com/cgit/hercules_examples/hercules_examples/tree/Bootloaders/SafetyMCU_Bootloaders/HALCoGen/TMS570LC43x 中的 sys_startup 文件 直接适应我的启动、或者我是否需要做更多修改?

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

    我找到了芯片勘误表 Doku www.ti.com/.../spnz180d.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="529065" URL"~/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm -based-microcontrollers-forum/1126512/tms570lc4357-fapi_error_otpchecksumsys-error-during -flash-driver-initialization/4182535]可以使用引用您提供的启动文件[#4182535]

    是的、您可以。  

    您是否正确配置了闪存等待状态?

    flashWREG->FRDCNTL = 0x00000000U |(UINT32)((UINT32) 4U << 8U)| 3U;

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

    nERROR LED D1始终为红色。 我在 启动时添加了代码_esmCcmErrorsClear_()。 但它不会清除 LED。 电路板中是否存在故障?  

    但 CAN 帧由微控制器发出。

    flashWREG->FRDCNTL = 0x00000000U |(UINT32)((UINT32) 4U << 8U)| 3U;我也尝试了这个值  

    (((pFapi_FmcRegisterType)(0xFFF87000U)->FsmWrEna.FSM_WR_ENA_bits.WR_ENA_ENA_ENA=0x5U;
    ((pFapi_FmcRegisterType)(0xFFF87000U)->EepromConfig.EEPROM_CONFIG_BITS.EWAIT = 4;
    ((pFapi_FmcRegisterType)(0xFFF87000U)->FsmWrEna.FSM_WR_ENA_BITS .WR_ENA_ENA=0x2U;

    根据 您的 flashWREG->FRDCNTL = 0x00000000U |(UINT32)((UINT32) 4U <<8U)| 3U;--> RWAIT =4、因此我也更改了 EWAIT =4。

    但是、如果 RWAIT=EWAIT=3、则行为没有变化。

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

    我们是否可以设置调试会话、我们将会在很短的时间内交付给客户?

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

    能否给我发送一个链接、让我可以共享我们的启动文件?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~引脚 userid="529065" URL"/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1126512/tms570lc4357-fapi_error_otpchecksumismatch-error-during -flash-driver-initialization/4183370#n1870]LED"始终为红色。 我在 启动时添加了代码_esmCcmErrorsClear_()。 但它不会清除 LED。 电路板中是否存在故障?  [/报价]

    _esmCcmErrorsClear _()不会清除 ESM 组3中的错误闪存。 您能否检查 ESMSR3_REG 的哪个位已设置?

    对于 EEPROM (闪存组7)、如果 HCLK=150MHz、等待状态应该>8。

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

    请参阅由 HALCOGen 生成的系统初始化、寄存器初始化和堆栈初始化代码:

    e2e.ti.com/.../1680.HL_5F00_system.ce2e.ti.com/.../HL_5F00_sys_5F00_core.asm

    HAL 生成的启动文件:

    e2e.ti.com/.../7484.HL_5F00_sys_5F00_startup.c

    如果要使用功能功能(LBIST、PBIST、其他自检等)、我建议使用安全诊断库(SDL)。 SDL 文件夹中提供了有关如何使用 SDL 功能的示例:

    https://www.ti.com/tool/SAFETI_DIAG_LIB

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

    我尝试在 TMS570LS3137中下载和初始化闪存驱动程序、但我没有遇到此问题。

    此电路板中的 nERROR LED 也不亮。  

    那么、为了测试 LC4357评估板、我可以使用 LBIST、PBIST 功能? 要了解电路板是否存在任何问题。  

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

    您好、Divya、

    您是否已解决调用 Fapi_initiatalizeFlashBanks()时的挂起问题?

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

    您好、Wang、

    问题仍未解决。 我们有一个具有相同导数的新电路板、但此电路板中的 nERROR LED (红色)也始终亮起。

    关于 ESMSR3_REG 位、第3位被置位(0x00000008)。

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

      它是 L2RAMW 中的双位 ECC 不可纠正的错误。 ESMSR3 = 0x00000008 (位3) 表示总线主控在内存初始化之前或在内存初始化过程中尝试读取 L2RAM。 内存初始化需要4096个 HCLK 周期才能完成。 通常 HalCoGen 在启动文件的开头调用_meminit_()。

    另请注意、hL_startup.c 文件中的函数不能被优化。 在安全初始化序列期间有几个例程使用"虚拟"变量来读取状态标志。 如果要优化这些代码、代码执行将不会达到预期。 在我看来,在进入 main()应用程序之前执行的所有代码都不能被优化。

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

    我们从 API Fapi_initiataleFlashBanks 中得到以下错误 Fapi_Error_OtpChecksumMismatch。 根据我们的理解、如果计算出的 OTP 与配置的 OTP 不匹配、则应导致这种情况。 请您澄清以下问题。

    我们将刷写应用程序0x00000000-0x0007FFFF。 是来自该存储器的用于 OTP 计算的任何数据。

    2.哪些寄存器会对 OTP 计算产生影响?

    ECC 对 OTP 计算有任何影响吗?

    4、TI OTP 是根据(来自文档)预先烧录到 OTP 存储器的制造特定数据计算的。 寄存器值如何对此具有影响。

    5.是否有任何机制来检查 TI OTP 存储器区域中的值是否正确。

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

    我们发现闪存组7未在我们的启动代码中激活、这是计算 TI OTP 所必需的。 这解决了我们的问题。

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

    您好、Divya、

    TI OTP 包含 API 校验和。 当闪存组被初始化时、它还计算 TI OTP 内容的校验和(从偏移量0x170到0x198)、并将计算出的校验和与预先确定的校验和(在0x19c)进行比较。 如果两个校验和值不匹配、则会生成校验和错误、然后停止组初始化。

    您能否检查电路板上的器件版本? 并为我转储 TI OTP 内容?

    要使 TI OTP 在 CCS 中可见、请在 GEL 文件中添加以下突出显示的语句: