大家好
我正在使用 MSP430FR2433器件开发一种小尺寸应用、该应用能够通过 IR 遥控来控制排针风扇。 我必须将某个值存储到 MCU 的 EEPROM 或闪存中、以便与这些值进行比较并执行操作。 基本上、在 IR 远程模式中有1、2、3、4小时休眠模式开关、因此我必须将这个小时的值存储到内存中、因此如果 MCU 重新启动或关闭电源、我可以检索这些值并开始处理。
您能建议我如何将此信息存储到闪存中或适用于此情况的任何更好选项吗?
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.
大家好
我正在使用 MSP430FR2433器件开发一种小尺寸应用、该应用能够通过 IR 遥控来控制排针风扇。 我必须将某个值存储到 MCU 的 EEPROM 或闪存中、以便与这些值进行比较并执行操作。 基本上、在 IR 远程模式中有1、2、3、4小时休眠模式开关、因此我必须将这个小时的值存储到内存中、因此如果 MCU 重新启动或关闭电源、我可以检索这些值并开始处理。
您能建议我如何将此信息存储到闪存中或适用于此情况的任何更好选项吗?
如果配置数据可以容纳在512个字节中、则最好使用信息("数据") FRAM、因为它与程序(其他所有内容) FRAM 分开保护。 链接器.cmd 文件定义了一个放置在这里的".infoA"段、因此请尝试类似的方法:
#pragma DATA_SECTION(config_data, ".infoA") // .infoA >INFOA from .cmd file unsigned config_data[512/2];
要对此区域执行写入操作、您需要关闭(然后重新开启)写保护、类似于:
SYSCFG0 = FRWPPW | PFWP; // DFWP=0 to write to Information (Data) FRAM
config_data[0] = 0x8877;
SYSCFG0 = FRWPPW | PFWP | DFWP; // DFWP=1
您可能需要检查您的擦除设置("Properties->Debug->MSP430 Flash Settings->Erase Options")是否设置为"MAIN MEMORY ONLY "。 这是默认设置、但值得确保。
您好!
感谢您的答复。
关于 FRAM、这是非常有用的信息。
我明白了、我已经将下面的代码添加到了 main.c 中用于缓冲区、并将段加载到.cmd 文件中、但有些点不清楚。
#pragma DATA_SECTION(config_data, ".infoA") // .infoA >INFOA from .cmd file unsigned config_data[512/2];
@存储器起始地址如何?或者它将存储来自 μ C CONFIG_DATA 的序列。 即 CONFIG_DATA[0]、CONFIG_DATA[1]等
如何 从 FRAM 检索这些信息。
在您的项目的 lnk_msp430fr2433.cmd 中、您可以看到".infoA"段被放置在内存区域"INFOA"中。
> .infoA (NoLoad):{}> INFOA /* MSP430 info FRAM Memory Segments */
该文件定义为从地址0x1800开始、
> INFOA:origin = 0x1800、length = 0x0200
这是信息 FRAM 所在的位置[请参阅数据表(SLASE59D)表6-23]。
----------------
在信息 FRAM 中写入变量需要禁用写保护、但您可以像读取任何其他变量一样、例如
> unsigned first_config_word = config_data[0];
当然,我刚刚发明了 config_data[]数组。 它不必是数组、甚至不必是512字节长。 我建议(作为设计)您使用单个结构或数组来映射所有配置数据、这样数据项就不会随着程序的增长而移动。
我想不出除写保护(这实际上更具特性而不是限制)之外的任何特定 FRAM 限制。 我敢肯定、您的用例正是信息存储器发明的初衷。
我将在这里提到(由于上面的"(NoLoad)")信息 FRAM 不会通过下载新代码进行更改(在大多数情况下也是一项功能)、因此在您的程序首次执行时将处于未知状态(可能为0xFF-s、但不能保证)。 这是由你来检测这种情况,但我要指出,这只是一个特殊的情况(意外)配置数据损坏。 可以使用合适的校验和/CRC 进行检测。