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 微控制器上 FEE (EEPROM)用法的问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1121634/faq-tms570lc4357-questions-regarding-fee-eeprom-usage-on-hercules-microcontrollers

器件型号:TMS570LC4357
  1. EEPROM 与闪存仿真 EEPROM (FEE)有何区别?
  2. 仿真 EEPROM 是否受 ECC 保护、以及如何启用 FEE ECC 检查?
  3. 如何启用单位和双位错误校正?
  4. 校验和是否用于 FEE 块保护、FEE 驱动器中使用的校验和算法是什么?
  5. Fletcher-16校验和的缺点是什么?
  6. 我们可以在用户模式下调用所有 FEE API 吗?
  7. 我可以多次调用 TI_fee_Init() API 吗?
  8. 如果在闪存擦除期间发生复位、会发生什么情况?
  9. 如果在写入数据期间发生复位、会发生什么情况?
  10. 我可以多次调用 TI_fee_Init() API 吗?
  11. 我能否在中断 ISR 中运行 FEE 操作
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    EEPROM 与闪存仿真 EEPROM (FEE)有何区别?

    EEPROM 通过串行接口连接到主机微控制器。 由于引脚数量最少、I2C 和 SPI 非常受欢迎。 EEPROM 的大部分功能允许逐字节编程或擦除操作。 与 EEPROM 相比、FEE 的密度更高。 擦除后、每个 FEE 位置读取0xFFFF。 通过编程、可以将电池更改为逻辑0。 任何字都可以被覆盖、以便将位从逻辑1更改为0;但不能以另一种方式。

    EEPROM 和 FEE 的主要区别在于写入和擦除时间。 40µs 的 FEE 写入时间为 μ C/144位字;而 EEPROM 通常需要5至10ms。

    2.仿真 EEPROM 是否受 ECC 保护,以及如何启用 FEE ECC 检查?

    是的、到 FEE 闪存组(组7)的访问由到闪存组的数字接口内的专用 SECDED 逻辑保护。 基于 Cortex-R5F 的 Hercules 器件(TMS570LC43x 和 RM57Lx)上的 ECC 保护默认启用。 基于 Cortex-R4/R4F 的 Hercules 器件(TMS570LSx 和 RM4xLx)上的 ECC 保护默认被禁用。

    在基于 Cortex-R4的 Hercules 器件上,可以通过将0xA 写入闪存模块错误校正控制寄存器1 (EE_CTRL1)的 EE_EDACEN 字段来启用针对 EEPROM 仿真闪存组访问的 ECC 保护。

    3.如何启用单位和双位错误校正?

    FEE 软件提供了一种检测单位和双位错误的机制。 要使用此功能,应用程序必须确保将“EE_CTRL1”中的“EE_EDACMODE[3:0]:错误更正模式”设置为0101以外的值,“EE_Oe_EN:Error on One Fail Enable”应启用,“EE_zero_EN:Error on Zero Fail”应启用,“EE_ACED3:EN[EE_ACED0]:EN] “Error Detection and Correction Enable”(错误检测和校正启用)应设置为0101以外的值。

    4.校验和是否用于 FEE 块保护、FEE 驱动器中使用的校验和算法是什么?

    是的、CRC 校验和是 FEE 块标头中的一个选项。 如果 CRC 被启用、在写入一个块期间、将根据 FEE 闪存中已经存在的同一个块的 CRC 计算和检查要写入的数据的 CRC。 如果 CRC 匹配、则不会写入数据。 如果未启用 CRC、则会逐字节比较数据。 如果数据不匹配、将启动写入。

    FEE 驱动器中使用的算法是 Fletcher-16校验和。

    5.Fletcher-16校验和的弱点是什么?

    Fletcher-16校验和不能区分所有0位的块和所有1位的块。 例如、如果数据字中的16位块从0x0000变为0xFFFF、则 Fletcher 校验和保持不变。 这也意味着所有00字节的序列与所有 FF 字节的序列(大小相同)具有相同的校验和。

    6.我们可以在用户模式下调用所有 FEE API 吗?

    不需要。在特权模式下,FEE 需要以下 API:TI_FEE 和 TI_FeeInternal_WriteDataF021

    7.我可以多次调用 TI_fee_Init() API 吗?

    不可以。TI_FEE ()提供用于初始化 TI FEE 模块的功能。 在开始任何数据操作之前、必须在开始时只调用此例程一次。

    如果在闪存擦除期间发生复位、会发生什么情况?

    在下一次初始化时、该扇区被添加到擦除队列中、因为扇区标头将与预期的扇区标头状态(活动、复制、擦除准备就绪、空)不匹配。 擦除将在后台进行。

    9.如果在写入数据期间发生复位、会发生什么情况?

    块的写入方式如下:

    • 块状态被设定为启动程序块。
    • 写入块编号和块大小。
    • 写入块的数据。
    • 写入数据完成后、将写入前一个块的校验和和地址
    • 块状态标记为活动。

    如果在步骤1之后复位、那么在下一次初始化中、下一个块的写入被移动24个字节。

    如果在步骤2、步骤3、步骤4或步骤5之后发生复位、则写入下一个块将在当前块大小+块标头之后发生。

    10.我可以在中断 ISR 中运行 FEE 操作吗?

    我们强烈建议不要在 ISR 内使用闪存同步操作(尤其是 FEE Write)。 FEE 写入可以在页面交换期间启动闪存擦除操作(即、如果虚拟扇区已满、移动到不同的虚拟扇区并执行旧虚拟扇区擦除)。这可能需要大量的时间、而且它也会因器件而异、并且也会随着老化而发生变化。

    您可以在 ISR 内部启动异步写入(TI_FEE 写入异步)、并在 ISR 外部执行 TI_FEE 主函数。 实际写入在 TI_FEE 维护中执行。