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.

[参考译文] RTOS/TM4C1294NCPDT:不进行闪存写入和读取

Guru**** 2439710 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/613647/rtos-tm4c1294ncpdt-flash-write-and-read-is-not-happening

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

您好!

我使用的是 TM4C1294NCPDT EVM TI RTOS 控制器、我可以在 flash.c 文件中找到用于闪存操作的函数、

FlashUserSet (userreg0、userreg1);

FlashUserGet (&userreg0、&userreg1);


我想写入和读取 闪存用户寄存器。 以下是我的代码:

int main()

uint32_t value1 = 12345678;

uint32_t value2 = 12345678;

 

 FlashUserSet (value1、value2);

system_printf ("闪存变量为%d %d\n"、value1、value2);

system_flush();

FlashUserGet (&value1,&value2);

system_printf ("闪存变量为%d %d\n"、value1、value2);

system_flush();

上面的打印内容如下:

闪存变量为 12345678 12345678

闪存变量为0 0

我的问题:

1.为什么函数不将32位数据写入闪存用户寄存器?

由于它不写入数据、当我读取它时、它的值为0。

2.建议使用任何其他方法来访问闪存并读回数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    看起来闪存用户变量之前已经被设置和保存为0值。 您是否检查了 FlashUserSet()的返回值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob Crosby:
    我已经遵守了以下代码、每个函数的返回值为0。 我在下面捕获并提到过的内容。

    /*源代码*/
    uint32_t value1 = 12345678;

    uint32_t value2 = 12345678;

    vui32FlashRet = FlashUserSet (value1、value2);
    system_printf ("闪存变量为%d %d\n"、value1、value2);
    System_printf ("返回值%d\n"、vui32FlashRet);
    system_flush();

    vui32FlashRet = FlashUserGet (&value1、&value2);
    system_printf ("闪存变量为%d %d\n"、value1、value2);
    System_printf ("返回值%d\n"、vui32FlashRet);
    system_flush();

    /*控制台中的打印值*/
    闪存变量为12345678 12345678
    返回值0
    闪存变量为0 0
    返回值0



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

    也许您器件上的闪存用户寄存器已经被编程。 如果您擦除器件、使其不再包含您的代码、则执行上电复位。 现在连接 CCS 并在"Registers"窗口中查看 FLASH_USERREGn、如下图所示:

    与 我的器件一样、如果您的器件在 FLASH_USERREG0或1中显示了除0xFFFFFFFF 以外的其他内容、则说明它们已被编程并保存。 当你再次写入这些寄存器时、你写入的值与已经存在的值进行"与"运算。 (闪存只能被设定为1到0。) 这可能解释了为什么您总是读0。

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

    您好!

    默认情况下、我将获得如下寄存器值、即使写入任何内容、也不会对这些寄存器进行任何更改。

    此致、

    Manohar

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

    您的 FLASH_USERREG0和 FLASH_USERREG1已经被设定为零并被提交。 由于闪存位只能在1到0之间进行编程、因此在这些寄存器被擦除之前、您不能对它们进行任何更改。 擦除闪存用户寄存器的唯一方法是遵循“恢复一个“锁定的”微控制器”过程。 数据 表第614页。

    这可以通过 CCS 来实现。