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.

[参考译文] RM48L952:Hercules 闪存擦除/写入&放大器;BL_FLASH.c

Guru**** 2468460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/672617/rm48l952-hercules-flash-erase-write-bl_flash-c

器件型号:RM48L952

支持路径:/Product/Help、带器件选择/

您好!

我的 Hercules 应用需要擦除和写入闪存的某些部分。  我从 Hercules 引导加载程序项目中的代码开始、该项目包含 BL_FLASH.c、Fapi_UserDefinedFuncations.c、并且还使用 F021 API。 我还修改了 linker.cmd 文件以在 RAM 中找到 FAPI 和 BL_FLASH 代码。  通常、代码看起来工作正常、我可以写入片上闪存位置0x18000 (bank2)。

1.要使 bl_flash.c 正常工作、我必须在多个位置修改 bl_flash.c、以将"bytes"变量更改为 int。  这是因为代码执行" while (bytes >0)"检查、如果初始字节数不是4的倍数、则字节值变为负。  请注意、写入7个字节到闪存应该是有效的。

示例:

   寄存器 int bytes = No_for_bytes;  //was uint32、如果初始字节数不是4的倍数、则从不退出循环!

   while (字节> 0)
   {    
      if (* dst1++!=* src1++)
         误差= 1;

      字节-= 0x4;
   }

2.  当程序运行时、我可以看到闪存写入正常。  (存储器窗口在位置0x180000处显示正确的值。) 但是、如果我重新启动调试器并重新加载程序、整个闪存将被擦除、因此我之前写入闪存的"数据"值将丢失。  如何告知调试器启动但不擦除闪存的某些区域?

3. 我正在运行 FreeRTOS,并从 FreeRTOS 任务中调用 Fapi_BlockProgram()。  您是否建议我在关键部分内调用 FAPI 函数?  否则、FreeRTOS 会取代这些闪存编程/擦除调用。  假设没有其他任务正在使用 FAPI、FAPI 是否支持占先?

谢谢、

Keith

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

    如果您已经在片上闪存窗口的擦除选项下检查了所有扇区(整个闪存)、那么在加载程序之前、整个闪存将被擦除。

    请选中"仅限必要扇区"。