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.

[参考译文] RM57L843:使用 F021闪存 API 处理 OTP (一次性可编程存储器)

Guru**** 2553260 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1052938/rm57l843-otp-one-time-programmable-memory-handling-with-f021-flash-api

器件型号:RM57L843
主题中讨论的其他器件:UNIFLASH

尊敬的 TI:

我对 F021闪存 API 使用 OTP 存储器的情况很好奇。 如何读取/处理这些存储器部件? 我知道,如果我写它们,我就不能再擦除了。 我还没有尝试过、因为我甚至无法在运行时读取这些内存部件。 您能否提供一些示例代码来说明如何读取 OTP 存储器器件? 当我尝试使用 F021闪存 API 读取它时、我遇到 ESM 错误组2通道3

此外、当我尝试使用 UniFlash 工具检查这些 OTP 存储器部件时、一些 OTP 存储器是可读的、另一些则不可读。 例如、TI OTP 组2 0xF008_2000仅显示"????" UniFlash 工具。  

但是、对于 F021闪存 API、我无法读取任何 OTP 存储器。  

您能否给我一些有关 Hercules RM57Lx OTP 存储器的文档、或者通过某种方式来了解这些存储器器件、以便更好地理解这一点。 此外、如果您有任何代码示例、一些代码示例也会非常适合。

此致、

Aron

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

    尊敬的 Aron:

    RM57L8x 器件的 GEL 文件中存在错误。

    在当前 GEL 文件中:

    GEL_MapAdd (0xF0080000、0、0x00001000、1、0); /* Bank0 TI OTP *
    GEL_MapAddStr (0xF00C0000、0、0x00000200、"R|AS2"、0); /* Bank0 TI OTP ECC *

    更正后的 GEL 文件应为:

    GEL_MapAdd (0xF0080000、0、0x00002000、1、0); /* Bank0 TI OTP *
    GEL_MapAddStr (0xF00C0000、0、0x00000400、"R|AS2"、0); /* Bank0 TI OTP ECC *

    GEL_MapAdd (0xF0082000、0、0x00002000、1、0); /* Bank1 TI OTP *
    GEL_MapAddStr (0xF00C0400、0、0x00000400、"R|AS2"、0); /* Bank1 TI OTP ECC *

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

    我将对其进行检查、但在代码中我无法读取 Bank7 OTP 存储器部件。 该部件是否也有任何错误?

    为什么可以通过读取存储器来生成 ECC? 我使用了错误的产品吗?  当我尝试读取时、此代码生成 ECC 错误  

    客户 OTP-ECC、EEPROM 组0xF004_1C00或 TI OTP-ECC、EEPROM 组0xF00C_1C00

    静态 int initEeprom (void)

    if (fapi_initializeFlashBanks (150)!= fapi_Status_Success){
    DBG ("无法初始化 EEPROM 支持!");
    返回-1;

    if (Fapi_setActiveFlashBank (Fapi_FlashBank7)!= Fapi_Status_Success){
    DBG ("无法激活闪存组!");
    返回-1;

    while (fapi_check_FSM_ready_busy!= fapi_Status_FsmReady);
    if (fapi_enableEpromBankSectors (0xffffffff、0x00000000)!= Fapi_Status_Success){
    DBG ("无法启用扇区!");
    返回-1;

    while (fapi_check_FSM_ready_busy!= fapi_Status_FsmReady);
    返回0;

    int eepromRead (uint32_t *地址、uint8_t * RDATA、uint32_t 大小)

    Fapi_FlashStatusWordType f021_State;

    initEeprom();
    f021_State.au32StatusWord[3]= 0;//准备函数应答
    while (fapi_check_FSM_ready_busy!= fapi_Status_FsmReady);
    if (fapi_doBlankCheck (address、2、&f021_State)= fapi_Status_Success){
    DBG ("内存空");
    返回-1;

    while (fapi_check_FSM_ready_busy!= fapi_Status_FsmReady);
    if (fapi_doMarginReadByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByte ((
    返回-2;
    }否则{
    返回0;

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

    GEL 文件中包含 EEPROM OTP。 但尺寸不正确。

    更改:

    GEL_MapAdd (0xF000E000、0、0x00001000、1、0); /*客户 OTP、EEPROM */
    GEL_MapAddStr (0xF0041C00、0、0x00000400、"R|AS2"、0); /*客户 OTP、EEPROM ECC */

    至:

    GEL_MapAdd (0xF000E000、0、0x00002000、1、0); /*客户 OTP、EEPROM */
    GEL_MapAddStr (0xF0041C00、0、0x00000400、"R|AS2"、0); /*客户 OTP、EEPROM ECC */

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

    谢谢你

    这个 GEL 文件在哪里? 我尝试搜索它、但找不到。 也尝试搜索函数、但没有任何结果。  

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

    它位于 C:\ti\ccs1100\ccs\ccs_base\emulation\gel 中

    您可以从 CCS 中打开它: CCS 调试-->工具--> gels