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.
大家好、
我将 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
是的、您可以。
您是否正确配置了闪存等待状态?
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、则行为没有变化。
我们是否可以设置调试会话、我们将会在很短的时间内交付给客户?
能否给我发送一个链接、让我可以共享我们的启动文件?
_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 功能的示例:
我尝试在 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 文件中添加以下突出显示的语句: