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.

[参考译文] TMS320F28P550SJ:软件复位时的 NVM 擦除

Guru**** 2889230 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1644521/tms320f28p550sj-nvm-erase-at-sw-reset

器件型号: TMS320F28P550SJ
主题: C2000WARE 中讨论的其他器件

您好、

 

我使用为 EEPROM 乒乓模型提供的 C2000Ware_6_00_00 示例。 由于每次在 EEPROM_NVM 期间调用擦除函数、因此每次进行软复位时都会擦除 Config_Check。 是否可以添加一项检查、通过检查组中的数据是否可用、并在初始化期间仅复位一次、而不是每次软复位、来防止调用擦除函数。

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

    尊敬的 Srikanth:

    C2000Ware EEPROM 乒乓示例不包括一种内置机制、用于在存储体中已存在有效数据时跳过擦除。 您需要在内部的擦除调用之前添加自定义验证检查 EEPROM_Config_Check 、以便有条件地跳过它。

    推荐方法:魔术编号/签名检查

    在 C2000 闪存上、 擦除会将所有位设置为 1 (即,擦除闪存读数为) 0xFFFF。 您可以利用它来检测银行是否已包含有效数据:

    1. 在每个 NVM 存储库中为“幻数“或签名(例如,或任何非的值)保留一个已知位置 0xA5A5 0xFFFF

    2. 在中调用 erase 函数之前 EEPROM_Config_Check、请先读取该位置。 如果签名存在且有效、则跳过擦除—该存储体已有初始化数据。

    3. 当签名位置读取 0xFFFF (空白/已擦除)或包含意外值(损坏的数据)时才擦除。

    伪代码示例:

    // At the start of EEPROM_Config_Check, before the erase call:
    uint16_t signature = *(volatile uint16_t *)EEPROM_BANK_SIGNATURE_ADDR;
    
    if (signature == EEPROM_VALID_SIGNATURE)
    {
    // Valid data exists — skip erase, proceed to normal operation
    return;
    }
    
    // Signature not found — first-time init or corrupted bank
    // Proceed with erase and then write the signature after initialization
    Fapi_issueAsyncCommandWithAddress(Fapi_EraseBank, ...);
    // ... after erase and initial data programming ...
    // Program the signature to mark the bank as initialized
    1. 在成功擦除+初始数据编程后、将签名写入最后一步。 这样可以确保在擦除过程中断电时、签名不会存在、擦除将在下次启动时正确地重新运行。

    为什么这样有效

    • Fapi_doBlankCheck() 检查闪存主阵列是否等于 0xFFFF —确认某个区域是否已擦除。 您还可以使用此 API 调用来确定存储体状态、而不是(或对幻数进行补充)。
    • 闪存 API 不会自动跟踪擦除计数或初始化状态 — 必须在应用程序代码中管理该状态。

    其他考虑因素

    您也可以 Fapi_doBlankCheck() 直接在存储体的数据区域上使用。 如果返回存储体 不为空、则表示您知道数据已编程、可以跳过擦除。 但是、专用签名/幻数更可靠、因为它可以区分“有效的初始化数据“和“部分写入/损坏的数据“。

    此致、

    Zackary Fleenor