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.

[参考译文] TMS470MF03107:TMS470MF03107的 C 语言闪存 ECC 算法源代码

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/648905/tms470mf03107-the-flash-ecc-algorithm-source-code-in-c-language-for-tms470mf03107

器件型号:TMS470MF03107
主题中讨论的其他器件: NOWECC

您好!

  我想执行加载程序来写入(刻录)  TMS470MF03107的闪存 ECC 存储器、但我不知道  TMS470MF03107的 ECC 生成算法。

  是否为  TMS470MF03107提供 C 语言的闪存 ECC 算法源代码?

 就像之前一样、我听说 有一个 ECC 生成工具、此工具使用 nowECC 命名、用于 TMS470MF03107。

 但我无法下载它(NowECC)。

 可以帮帮我吗?

 非常感谢。

此致~

Xin Chen

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

    您是不是要开发引导加载程序来将应用程序编程到闪存中、并计算 ECC 并将其编程到 ECC 存储器空间中?

    TMS470M 使用 F035闪存 API、此 API 不具有自动生成 ECC 的功能。 但是、您可以使用闪存寄存器(FEMU_ECC、FEMU_DMSW、FEMU_DLSW、FEMU_ADDR)根据代码及其地址计算 ECC。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、QJ Wang、

    是的、我可以。

    是的、我发现 F035闪存 API 没有自动生成 ECC 的功能。

    如果我使用闪存寄存器来生成、情况不清楚、您能帮我检查一下吗?
    Q1:使用这些寄存器生成 ECC 的过程是什么?

    Q2:闪存和相关 ECC 存储器之间的逻辑存储器映射是什么?
    我是否可以参阅"图7-3. "SPNU495C"文档中的"CPU 地址空间中的 ECC 字内存映射"

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

    您好 XIN、

    我编写了一个函数来使用 F035计算 ECC:

    静态 uint8 Flash_ECC_CALC (uint32* Flash_Address、uint32* pdata)

    uint8 ECC;

    uint32 femuAddr、femuDataLSW、femuDataMSW;

    //禁用诊断模式

    flashWREG->F035_FDIAGCTRL = 0x0;

      执行{

    flashWREG->F035_FEMUADDR =(uint32) Flash_Address;

    femuAddr = flashWREG->F035_FEMUADDR;

      }while (femuAddr!=(uint32) Flash_Address);

    //将已知数据写入仿真数据寄存器

      执行{

    flashWREG->F035_FEMUDLSW =(uint32)(*pdata);

    femuDataLSW = flashWREG->F035_FEMUDLSW;

      }while (femuDataLSW!=*pdata);

      pdata +;

    执行{

    flashWREG->F035_FEMUDMSW=(uint32)(*pdata);

    femuDataMSW = flashWREG->F035_FEMUDMSW;

    }while (femuDataMSW!=*pdata);

    ECC = flashWREG->F035_FEMUECC & 0xFF;

    返回 ECC;

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

    感谢您的示例代码。
    还有另一个问题。

    如果两个连续闪存字的值为空值(0xFFFFFFFF、0xFFFFFFFF)、
    是否可以将关联的 ECC 字节保留为空值(0xFF)?

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

    您好、QJ Wang、
    我已经执行了 F035 ECC 算法、并写入闪存和相关的 ECC 内存。
    但我不确定结果是否正确。
    我有两个存储器存储视图、一个是从0x0000开始的闪存存储视图、另一个是从0x400000开始的 ECC 数据存储视图。 请参见下图。
    您是否愿意帮助检查它?
    非常感谢。

    此致~
    Xin Chen