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:无法使用 F021 API 擦除闪存

Guru**** 2611705 points
Other Parts Discussed in Thread: TMS570LC4357, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/766726/tms570lc4357-not-able-to-erase-flash-using-f021-api

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

您好!

我正在尝试将正在工作的 RM48引导加载程序代码移植到 TMS570LC4357。  引导加载程序使用 QJ Wang 的 BL_FLASH.c、BL_YMODE.c 等文件通过 UART 下载文件并将其写入闪存。  对于 TMS570LC4357、我将使用 F021库 F021_API_CortexR4_BE_L2FMC_V3D16.lib。  我已验证 Registers.h 是否包含 Registers_FMC_Be.h (大端模式)。  库和 BL_FLASH、BL_Ymodem 等对象在引导时进行重定位并在 RAM 之外执行。  从 RAM 执行操作正常。

引导加载程序尝试下载一个文件并将其编程为闪存、从组0扇区4 =闪存地址0x20000开始。  此代码在 RM48 HDK 上运行正常、但在 TMS570LC43x HDK 电路板上不运行。

当我运行代码并下载一个文件时,Fapi_initiataleFlashBankks()、Fapi_setActiveFlashBank()、Fapi_enableMainBankSectors ()和 Fapi_issueWithCommandAddress()执行并返回成功代码。  以下 while 循环检查 FSM readyBusy 和状态会按预期执行并完成。

while (fapi_check_FSM_ready_busy =fapi_Status_FsmBusy);

while (fapi_get_FSM_status!= fapi_Status_Success);

但是对 Flash_Erase_Check()的调用失败。 CCS 调试器存储器窗口显示了许多从0x20000位置开始的字、这些字并不是全部为0xFFFFFFFF。  我读取了一个包含 ECC 的帖子,所以我在调用 Fapi_initiatizeFlashBanks()后尝试调用了 Fapi_disableAutoEccCalculation ()。  但这对问题没有帮助。  

在执行擦除操作后、我附加了一个调试器存储器窗口的屏幕截图、其中显示了未擦除的存储器。  我还附上了稍作修改的文件 BL_FLASH.C.  我的更改通过标签//KRB 指示

擦除570LC4357上的闪存需要什么?

谢谢、

Keith

e2e.ti.com/.../5710.bl_5F00_flash.c

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

    在这个基于 R5的器件上、ECC 在缺省情况下被启用、并且不能被禁用。 擦除操作期间、ECC 不会被计算或编程。 擦除操作后、ECC 值为 FF。 当您读取闪存内容时、数据会根据 ECC 数据进行"校正"、并显示在存储器浏览器中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ、

    谢谢你。  

    1.您说我不应该尝试执行手动空白检查吗?   如何验证操作是否成功?  

    此外、我的引导加载程序需要对从闪存中的0x20000位置开始的应用程序映像执行 CRC 校验。  如果 ECC 位在闪存存储器读取期间可见、它如何做到这一点(并获得预期值)?

    3、这里是我的 Halcogen 设置。  我假设 F021 API 可以写入闪存、即使区域2权限是只读的?

    谢谢、

    Keith

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

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

    我建议使用链接器命令为引导加载程序和应用程序的整个闪存生成 ECC。
    2.您可以使用 CRC 硬件模块计算 CRC。 示例代码的链接位于以下应用手册中
    www.ti.com/.../spna235.pdf