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.

[参考译文] MSP430FG6626:将 FLASH2区域用作可写存储器

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1260859/msp430fg6626-using-the-flash2-region-as-writable-memory

器件型号:MSP430FG6626
主题中讨论的其他器件: MSP430WARE

 MSP430FG6626部件表示它支持128KB 的闪存、我们将尝试利用此存储器区域来写入数据。 这是可行的吗?

FLASH2区域似乎只有在编程时使用编程器存储代码时可写入。 我们试图声明全局数组如下: Int data[50000],我们收到一个编译器错误,说没有足够的内存。

我们可以使用只读全局存储器(但静态 const int array[50000])。

是否有办法在运行时的代码中使用此区域?

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

    您不能像使用 RAM 一样使用闪存。 写入需要特定设置、可能还需要一个擦除周期。 当然、这可以由您的应用来完成、但不能通过已命名的变量来完成、因为 C 可以理解这些变量。 假设您在小模式下编译、这样编译器/连接器就不可能将任何内容放入闪存的上部块、您可以按照自己喜欢的方式进行处理。

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

    是否有在应用中执行此操作的示例? 我知道需要在执行写入之前擦除数据、但我想知道这是 ptr = flashaddr;* ptr = 0;* ptr = val;或者类似的东西、您是否需要更详细的东西?

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

    该过程的相关文档非常清晰、但如果您需要示例、TI 为大多数器件提供了一系列代码示例。 链接的原型设计。 尝试一下。

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

    我看到过 msp430ware 库中的一个闪存写入示例、并且该示例针对信息段执行此操作、这是否适用于代码/存储器段(FLASH2)?

    主:代码内存

    组3 32KB 0243FFh 至01C400h

    组2 32KB 01C3FFh 至014400h  

    组1 32KB 0143FFh 至00C400h 3

    组0 32KB 00C3FFh 至004400h  

    Flash_ptrC =(char *) 0x1880;//初始化闪存段 C ptr
    Flash_ptrD =(char *) 0x1800;//初始化闪存段 D ptr

    _disable_interrupt ();// 5xx 变通办法:禁用全局
    //擦除时中断。 Re -使能
    //如果需要,请执行 GIE
    FCTL3 = FWKEY;//清除锁定位
    FCTL1 = FWKEY_ERASE;//设置擦除位
    *Flash_ptrD = 0;//虚拟写入以擦除闪存段 D
    FCTL1 = FWKEY |WRT;//设置 WRT 位以进行写入操作

    对于(I = 0;I < 128;I++)
    {
    * Flash_ptrD++=*闪存_PTRC++;//将值段 C 复制到段 D

    FCTL1 = FWKEY;//清除 WRT 位
    FCTL3 = FWKEY_LOCK;//设置 LOCK 位

    如果我将 Flash_ptrC 更 改为 FLASH2的位置、这是否起作用?

    FLASH_PTRC =(char*) 0x243FF (组3);

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

    您可以尝试以下代码并修改指向 FLASH2区域的闪存指针。

    dev.ti.com/.../node

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

    这似乎起作用、当我对电路板重新编程时、所有闪存在启动时都设置为0xff。 然后,当我使用上面的代码写入 FLASH2中的一个区域,并读回,我能够读回我所写的。 我查看了.out 文件、它似乎没有针对代码段的.end 符号、因此我们必须小心地确定写入的位置、以免覆盖代码。 但这是有效的、谢谢。