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:使用高速缓存启用/禁用功能擦除、编程和读回闪存

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1105287/rm57l843-erase-program-and-read-back-the-flash-with-cache-enable-disable

器件型号:RM57L843

尊敬的 TI 工程师:

  在我的应用程序的引导模式下、当处于引导加载程序模式时、MPU 被成功禁用。 但是、当调用下面所示的 cacheDisable 函数时 、MCU 异常并运行。

;-------------------------------------------------------------------------------
; Disable caches

        .def  _cacheDisable_
        .asmfunc

_cacheDisable_

        stmfd sp!, {r1}

        MRC   p15, #0, R1, c1, c0, #0   ; Read System Control Register configuration data
        BIC   R1, R1, #0x1 <<12         ; instruction cache disable
        BIC   R1, R1, #0x1 <<2          ; data cache disable
        DSB
        MCR   p15, #0, R1, c1, c0, #0   ; disabled cache RAMs
        ISB

        ldmfd sp!, {r1}

        bx    lr
        .endasmfunc

 在尝试 使用缓存使能功能对闪存进行擦除、编程和回读后、我发现擦除和编程可能正常、但回读内容是随机的。

我想 读取的内容将从高速缓存存储器而不是闪存中读取。

问:

1) 1)如何禁用高速缓存?

2) 2)能否在启用高速缓存的情况下运行引导加载程序? 如何解决回读问题?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="514665" URL"~μ C/support/microrims/arm-based microrims-group/arm-based microset/f/arm based microrims-forum/1105287/rm57l843-erase-program-and-read-back flash-with cache-enable-disable"])如何禁用高速缓存[引用]

    调用_cacheDisable_()以禁用高速缓存。 该函数应在非用户模式下调用。  

    [引用 userid="514665" URL"~μ C/support/microriers/arm-based microrims-group/arm -based microrims/f/arm based 微控制器-forum/1105287/rm57l843-erase-program-and-read-back flash-with cache-enable-disable"]2)我能否使用启用缓存启动加载程序运行缓存引导加载程序? 如何解决回读问题?[/quot]

    是的、您可以。 您可以为回读数据定义一个段。 该段应配置为写通而不是写回。

    链接器脚本:

     SHAREDRAM (RW):origin=0x0807F000 length=0x00001000

      sharedRAM:{}> SHAREDRAM

    在 main()中:

    #pragma SET_DATA_SECTION (".sharedRAM")
      uint8_t TX_DATA[SIZE]={0};
      uint8_t RX_DATA[SIZE]={0};
    #pragma SET_DATA_SECTION ()