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.

[参考译文] MSPM0L1306:写入闪存并从中读取、以获取闪存中存储的最后数据、在下电上电后从中读取。

Guru**** 2448780 points
Other Parts Discussed in Thread: MSPM0L1306

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1344500/mspm0l1306-writing-to-flash-memory-and-reading-from-it-to-get-the-last-data-stored-in-flash-to-read-from-it-after-power-cycle

器件型号:MSPM0L1306

您好!

我正在使用 MSPM0L1306 Launchpad、其中有一些用户需要设置的 Temperature 值。 设置温度值后、更新的值应存储在闪存中、我可以通过以下函数来执行此操作:

/*向主存储器中的闪存写入32位*/
DL_FlashCTL_UnprotectSector (
FLASHCTL、MAIN_BASE_ADDRESS、DL_FLASHCTL_REGION_SELECT_MAIN);
gCmdStatus = DL_FlashCTL_programMemoryFromRAM32 (
FLASHCTL、(MAIN_BASE_ADDRESS + 16)、&gData32);

但在器件重新启动后、存储的值应从闪存中读取。 但在示例中,我只有 readVerify ()函数,而在 dl_flashctl.h 中只有 readVerify ()函数。
从 readVerife()读取时产生错误,因为  
DL_FLASHCTL_COMMAND_STATUS DL_FlashCTL_readVerifyFromRAM64 (
FLASHCTL_Regs * flashctl、uint32_t address、uint32_t *数据);

*数据与存储的值不同。

您能帮助我从存储器中读取数据吗?

提前感谢您!

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

    您好!

    如果您希望读取存储器、

    您可以通过点直接读取地址。

    B.R.

    佐伊

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

    谢谢 Zaey

    我使用过  

    /*向主存储器中的闪存写入32位*/
    DL_FlashCTL_UnprotectSector (
    FLASHCTL、MAIN_BASE_ADDRESS、DL_FLASHCTL_REGION_SELECT_MAIN);
    gCmdStatus = DL_FlashCTL_programMemoryFromRAM32 (
    FLASHCTL、(MAIN_BASE_ADDRESS + 16)、&gData32);
    if (gCmdStatus != DL_FLASHCTL_COMMAND_STATUS_PASSED ){
    /*如果命令没有通过,设置错误标志。 */
    gErrorType = ERROR_WRITE_32_BIT;


    对存储器执行写操作
    和  
    gData32Read =*(uint32_t *)(MAIN_BASE_ADDRESS);
    只从存储器中读取。  

    但该读取指令将器件置于硬故障  

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

    您好!

    我可以 根据您的代码获得正确的数据。

    这是我编写的演示代码、您可以进行调试以查看 result.e2e.ti.com/.../E2E_5F00_write_5F00_read_5F00_L.zip

    B.R.

    佐伊

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

    非常感谢 Joey

    我已经浏览过您的代码、但在尝试读取  
      gData32Read =*(uint32_t *)(MAIN_BASE_ADDRESS+16);

    无法正常工作

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

    这似乎有点奇怪。

    该怎么办?

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

    是在  Launchpad MSPM0L1306上工作

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

    因此、如果您尝试读取代码、它仍会运行到默认处理程序中?

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

    这是我成功的结果。

    当您进入默认处理程序时、您是否可以查看寄存器 CPUSS 来确定是哪个使其进入默认处理程序?

    谢谢

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

    感谢 Joey、

    但我的无法正常工作、它甚至不是在内存上进行写入、

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

    您好!

    您的代码闪存似乎大于0x1000。  

    请尝试写入另一个更大的地址

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

    Joey、您好!

    程序大小:代码=8264 RO-DATA=572 rw-data=12 Zi-data=584   
    这是我的程序大小、我已经将 MAIN_BASE_ADDRESS 定义为0x00003000
    现在它不是把 MCU 置于硬故障状态,但如果有任何标志,且该标志为1,那么它也不会进入 main 中的 if condition ()

    u 可以看到、在跟随 SS


    在该条件下为真、仍然不在函数内部。

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

    我没有收到 TI 的任何丰硕回复。 我已经自己完成了我的代码、它可以按照我的要求运行。

    谢谢!