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.

[FAQ] [参考译文] [常见问题解答] TMS570LC4357:有关 Hercules 器件(TMS570LCx、TMS570LSx、RM4x 和 RM57Lx)上 F021闪存擦除和程序的问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1120404/faq-tms570lc4357-questions-regarding-f021-flash-erase-and-program-on-hercules-devices-tms570lcx-tms570lsx-rm4x-and-rm57lx

器件型号:TMS570LC4357
  1. F021闪存 API 是否可以在用户模式下运行?

  2. RWAIT 如何工作?

  3. 我们能否在擦除或编程闪存之前更改器件系统时钟?

  4. 在将数据编程到闪存时、如何计算 ECC 到 ECC 空间并对其进行编程?

  5. 使用 Fapi_issueProgrammingCommand()对闪存进行编程时,是否可以使用大数据缓冲区?

  6. 我们能否对同一组中的一个闪存扇区进行擦除/编程?

  7. Cortex-R5F 器件是否使用与 Cortex-R4F 器件相同的闪存 API 库?

  8. 为什么在 TMC570LC43x 器件上执行空白检查时会出现错误?

  9. 是否在闪存 API 内禁用了中断?

  10. 闪存 API 库能否从 RAM 而不是闪存运行?

  11. 是否必须使用 F021闪存 API 来擦除/编程 Hercules 器件上的闪存?

  12. 我可以获取 F021闪存 API 的源代码吗?

  13. 用于生成 F021闪存 API 库的编译器版本是什么?

  14. F021闪存 API 是否可以使用较新版本的 TI ARM 编译器/IAR/Keil / GCC 编译器进行编译?

  15. 此 F021闪存库能否用于使用任何其他工具链的代码项目? 是否有任何限制或限制?

  16. 这是使用 F021 flas API 的示例吗?

  17. F021闪存 API 是否与 IAR 兼容?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. F021闪存 API 是否可以在用户模式下运行?
    否、F021闪存 API 必须在特权模式(用户模式除外)下运行、才能访问闪存控制器寄存器。
    1. RWAIT 如何工作?

    CPU 的运行速度快于闪存存储器。 等待状态是 CPU 必须等待的周期、以便从闪存存储器中检索数据、闪存存储器的存取时间长于 CPU 时钟。

    TCM 闪存(Cortex-R4器件上的闪存)可在非管道模式中支持零地址和高达55MHz CPU 速度的数据等待状态。 TCM 闪存支持管线模式中220 MHz 的最大 CPU 时钟速度、具有一个地址等待状态和三个数据等待状态。

    在非管道模式下、L2FMC (Cortex-R5F 器件上的闪存)可以支持高达45MHz 的零数据等待状态。 L2闪存由 HCLK 计时、并被限制在最大150MHz。

    等待状态的数量与 HCLK 频率相关。 每个 HCLK 频率所需的等待状态可在器件专用数据表中找到。

    1. 我们能否在擦除或编程闪存之前更改器件系统时钟?
    是的,但是在执行任何异步闪存操作之前,必须再次调用 Fapi_initiataleFlashBanks()和 Fapi_setActiveFlashBank()。
    1. 在将数据编程到闪存时、如何计算 ECC 到 ECC 空间并对其进行编程?
    Fapi_issueProgrammingCommand()有四种编程模式。 Fapi_AutoEccGeneration 将使 API 能够用于对闪存中提供的数据部分以及自动生成的 ECC 进行编程。 ECC 是在64位对齐地址上计算的、最高可达组的数据宽度。
    1. 使用 Fapi_issueProgrammingCommand()对闪存进行编程时,是否可以使用大数据缓冲区?
    数据缓冲区的大小可以是1字节和闪存组宽度之间的任意大小。 TCM 闪存(Cortex-R4器件上的闪存)的组宽度为16字节、L2FMC 的组宽度为32字节。 请在闪存组配置寄存器(FCFG_BANK)中找到组宽度。
    1. 我们能否对同一组中的一个闪存扇区进行擦除/编程?
    编程、擦除、空白检查或裕量验证的所有闪存 API 都必须从执行代码的组之外的组中调用。 如果对只有一个闪存组的器件的组0进行编程或擦除、则必须在 RAM 中执行这些例程。
    1. Cortex-R5F 器件是否使用与 Cortex-R4F 器件相同的闪存 API 库?
    不可以、它们使用不同的闪存 API 库。 Cortex-R5F 器件(TMS570LC43x 和 RM57Lx)使用 L2FMC 闪存控制器、该控制器不同于 Cortex-R4器件上使用的 TCM 闪存。 后缀为“_L2FMC”的闪存 API 库
    1. 为什么在 TMC570LC43x 器件上执行空白检查时会出现错误?
    闪存存储器受单纠错双纠错(SECDED)保护。 在这个基于 Cortex-R5的器件上、ECC 在缺省情况下被启用。 擦除在闪存存储器上完成、而不对 ECC 进行编程。 因此、读取具有无效 ECC 的位置将生成可纠正或不可纠正的错误。
    1. 是否在闪存 API 内禁用了中断?
    在闪存 API 内不禁用中断。 建议您在调用闪存 API 之前禁用中断。
    1. 闪存 API 库能否从 RAM 而不是闪存运行?
    是的、这是可能的。 请参阅 Hercules 示例 git repo 中的 CAN 引导加载程序示例 。http://git.ti.com/hercules_examples
    1. 是否必须使用 F021闪存 API 来擦除/编程 Hercules 器件上的闪存?
    对于执行例程来擦除/编程 Hercules 器件上的闪存存储器的任何人、都必须使用 F021闪存 API。
    1. 我可以获取 F021闪存 API 的源代码吗?
    是的、源代码可提供 NDA。 但是、不允许重新编译或重新分发源代码。
    1. 用于生成 F021闪存 API 库的编译器版本是什么?
    F021闪存 API 是使用 TI 的 ARM 版本5.1.3代码生成工具编译的。
    1. F021闪存 API 是否可以使用较新版本的 TI ARM 编译器/IAR/Keil / GCC 编译器进行编译?
    F021闪存 API 库以 ARM 标准 EABI ELF 格式分发,并使用 TI 的 ARM 版本5.1.3代码生成工具进行编译。 用户不会以任何方式重新编译此库、因为这样就不再验证/支持指定的功能。
    1. 此 F021闪存库能否用于使用任何其他工具链的代码项目? 是否有任何限制或限制?
    F021闪存 API 库可用于使用符合 ARM 标准 EABI 格式的工具的任何代码项目。
    1. 这是使用 F021 flas API 的示例吗?

    是的。 使用 F021闪存 API 的示例通常可在引导加载程序代码中找到。 请参阅 CAN 引导加载程序 示例:

    请参阅 readme.txt 将特定平台的 CAN 引导加载程序导入到 Code Composer Studio 中。

    F021闪存 API 从.\SafetyMCU_bootloader \source\BL_flash.c 调用

    bl_flash.c 可用作实现特定于应用的函数以调用 F021闪存 API 的参考。

    1. F021闪存 API 是否与 IAR 兼容?

      F021库与 IAR v7.x 和较早版本的编译器兼容、与 IAR C 8.x 编译器不兼容:

      F021闪存 API 库适用于需要使用 IAR ARM 编译器 v7.x 的闪存 API 的 IAR 项目。 从 IAR ARM 编译器的 v8.x 开始、 wchar  数据类型更改为32位宽而不是16位宽。 这会导致在有人使用任何未使用 IAR v8.x 编译的库时创建警告 安全关键型应用开发人员不得忽略编译器警告。

      解决方案是使用旧的 IAR C 7.x 编译器