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:RM57L843:闪存组0 &放大器;7不能正确擦除

Guru**** 2551110 points
Other Parts Discussed in Thread: RM57L843

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/741363/rm57l843-rm57l843-flash-bank-0-7-does-not-erase-correctly

器件型号:RM57L843

您好!

   我需要通过引导加载程序进行 FW 升级、因此我参考   了"e2e.ti.com/.../2218757""主题中的"http://www.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=spna190和项目"https://e2e.ti.com/cfs-file/__key/communityserver- discussions -compon组件-files/312/F021_5F00_Sample_5F00_v2.zip"。

这是我的项目文件。

e2e.ti.com/.../3146.TestA.zip

   在我的项目中、我标记了除 SCI1之外的所有驱动程序。 参数为默认值

   我参考 F021_Sample 并进行了一些修改、将组7更改为组1。  但我也有类似的问题。

   擦除 BANK1 SECTOR0后、我使用 CCSv8中的存储器浏览器来观察地址0x00200000。 我发现存储器中的值并非全部变为0xFFFFFFFF。

   我不知道为什么。

    因此、它会导致 Fapi_doBlankCheck  返回错误。

   

   是否有人可以帮助我指出什么会导致 F021API 不擦除 Bank0和1?

谢谢

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

    对于 RM57L843器件、默认情况下启用 ECC。 您在 CCS 存储器浏览器中看到的随机数据是由 ECC 错误引起的(相应组1的 ECC 区域也处于擦除状态)。 ECC 等式包括多个地址位、在某些地址、闪存和 ECC 中所有'1'的组合加上地址位被视为可纠正的错误。 更正后的值是您在 CCS 中看到的值、而不是0xFFFFFFFF。 这看起来很奇怪、但这是部件的设计方式、因此请忽略它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

      感谢您的支持。

      我有一些问题:

      1.您说错误值是因为 ECC 错误。 我是否需要修复此错误?以及如何解决

      2.你说我可以忽略这个问题吗? 但是、如何检查擦除是否成功? 因为 Fapi_doBlankCheck 始终返回错误。

      3.我尝试擦除组1扇区0、修改组1的 HL_SYS_LINK_cmd 以填充0x12345678、如" FLASH1 (RX):origin=0x00200000 length=0x00200000 fill = 0x12345678"  

        然后、我进入调试模式并使用存储器浏览器观察0x00200000中的值。 ALL 值为0x12345678、看起来是正确的

        

         

        但是在 Fapi_issueAppiCommandAppiAddress (Fapi_EraseSector、(uint32_t *) BANK1_START_ADDRESS)和 BANK1_START_ADDRESS 为0x00200000之后。 值变为

        

           似乎地址0x00200000至0x0020007F 未成功擦除。 为什么?

       4、擦除后如何获得全部1?

       

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

    正如我说过的、当您擦除闪存时 ECC 也会被擦除、因此 ECC 值变为无效。 闪存中的内容为0xFFFFFFFF、但当您读取闪存时、返回值通过 ECC (值)进行校正。 这就是输出不是0xFFFFFFFF 的原因。

    我建议使用链接器命令为整个闪存生成 ECC。

    下面是一个执行该操作的链接器命令文件示例。 生成.out 后、您需要确保在 CCS 中禁用自动 ECC、因为.out 已包含 ECC。

    /*------------------ *
    /*链接器设置 *

    --retain="*(.intvecs)"

    /*用户代码开始(1)*/
    /*用户代码结束*/

    /*------------------ *
    /*内存映射 *

    存储器

    /*用户代码开始(2)*/
    #if 0
    /*用户代码结束*/
    引导程序(X):origin=0x00000000 length=0x00000020
    FLASH0 (RX):origin=0x00000020 length=0x001FFFE0
    FLASH1 (RX):origin=0x00200000 length=0x00200000
    堆栈(RW):origin=0x08000000 length=0x00001500
    RAM (RW):origin=0x08001500 length=0x0007EB00

    /*用户代码开始(3)*/
    #endif
    引导程序(X):origin=0x00000000 length=0x00000020 vfill =0xFFFF
    FLASH0 (RX):origin=0x00000020 length=0x001FFFE0 vfill = 0xffffffff
    FLASH1 (RX):origin=0x00200000 length=0x00200000 vfill = 0xffffffff
    堆栈(RW):origin=0x08000000 length=0x00001500
    RAM (RW):origin=0x08001500 length=0x0002EB00

    ECC_VEC (R):origin=0xf0400000 length=0x4 ECC={ input_range=vectors }
    ECC_FLA0 (R):origin=0xf0400000 + 0x4 length=0x3FFFC ECC={INPUT_RANGE=FLASH0}
    ECC_FLA1 (R):origin=0xf0440000 length=0x40000 ECC={input_range=FLASH1}
    /*用户代码结束*/


    /*用户代码开始(4)*/
    ECC

    algo 名称:address_mask = 0xfffffff8
    汉明_MASK = R4
    奇偶校验掩码= 0x0c
    镜像= F021

    /*用户代码结束*/


    /*------------------ *
    /*段配置 *

    部分

    /*用户代码开始(5)*/
    /*用户代码结束*/
    .intvecs:{}>向量
    .text align(8):{}>FLASH0| FLASH1
    .const align(8):{}> FLASH0| FLASH1
    .cinit align (8):{}> FLASH0| FLASH1
    .pinit align (8):{}> FLASH0| FLASH1
    .bss :{}> RAM
    .data :{}> RAM
    .sysmem:{}>RAM


    /*用户代码开始(6)*/
    /*用户代码结束*/


    /*用户代码开始(7)*/
    /*用户代码结束*/


    /*------------------ *
    /*其他 *

    /*用户代码开始(8)*/
    /*用户代码结束*/
    /*------------------ *