8051F340微控制器中的闪存被擦除

时间:2011-11-20 17:58:56

标签: c microcontroller 8051 flash-memory

好吧,我希望这个问题适合Stackoverflow(如果不是,我想要道歉)

我有来自Silabs的C8051F340微控制器。我写了一个小接口,它将信息存储在uC的非易失性闪存中。现在在描述的数据表中,我将所有数据保存在地址0x0200 - 0x0300之间。要复制我的数据,我只使用memcpy。

char xdata *ptr_selection       = 0x0210;
// Some other code here
memcpy (ptr_selection, writeBuffer, sizeof (writeBuffer));

复制本身运行良好(我抬头看了一下闪存,它保存了我的数据) - 如果我现在断开我的uC并在5秒内再次连接它,数据仍然存在。但是,如果我让它断开连接,我的数据或多或少会“重置” - 这意味着它每次都会获得几乎相同的“重置值”。那么我做错了什么?我的意思是闪存数据不是非易失性的,还是我搞错了?

2 个答案:

答案 0 :(得分:2)

根据您在问题中显示的代码,您尝试写入外部数据(xdata),即RAM,而不是非易失性闪存。数据在几秒钟后消失的原因是电源电容器仍然为芯片供电足够长的时间以保持内部RAM的存活。

要写入闪存,需要按照特定协议解锁闪存编程电路,然后擦除要写入的区域,然后使用MOVX指令写入字节,如数据表第12节所述。

此Silicon Labs应用说明"Writing to Flash from Firmware"详细介绍了该过程。

答案 1 :(得分:1)

闪存不像oridnary SRAM,SDRAM内存。

你不能只是写信给它。最大限度的可以 - 从中​​读取 正常记忆(只有你有NOR闪光灯)。

但如果你想写信, 你必须首先擦除它(将所有位设置为1)。 只有这样你才能写信给它。 Normaly,擦除部门。他们称擦除扇区。 请参阅您的微控制器的数据表,了解它们的大小。

PS

根据您的CPU的数据表,写入您必须使用特殊指令。 确保memcpy在内部使用它。