c - 8051F340 微 Controller 中的闪存被删除

标签 c microcontroller 8051 flash-memory

好吧,我希望这个问题适合 Stackoverflow(否则,我已经道歉了)

我有来自 Silabs 的 C8051F340 微 Controller 。我写了一个小接口(interface),将信息存储在 uC 的非 volatile 闪存中。现在,如数据表所述,我将所有数据保存在地址 0x0200 - 0x0300 之间。要将我的数据复制到那里,我只需使用 memcpy。

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

好吧,复制本身运行良好(我查看了闪存,它正确地保存了我的数据)- 如果我现在断开我的 uC 并在大约 5 秒内再次连接它,数据仍然存在。但是,如果我不再断开连接,我的数据或多或少会“重置”——这意味着它每次都会获得几乎相同的“重置值”。那我做错了什么?我的意思是闪存数据不是非 volatile 的还是我弄错了什么?

最佳答案

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

要写入闪存,您需要遵循特定协议(protocol)来解锁闪存编程电路,然后删除您将要写入的区域,然后使用 MOVX 指令写入字节,如数据表第 12 节所述。

此 Silicon Labs 应用说明 "Writing to Flash from Firmware"详细描述了这个过程。

关于c - 8051F340 微 Controller 中的闪存被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8203496/

相关文章:

c - 使用 c 中的 libcurl 将地理编码的 json 响应保存在 json 文件中

c - 无需类型转换的二进制 int 到 double

c - 找到两个最差的值并删除总和

c - BeagleBone 上的段错误 SIGSEGV 错误

c - 当我调用 vfork() 时,我可以调用任何 exec*() 函数,还是必须调用 execve()?

我可以从 SD 存储器而不是闪存在评估板上运行程序(嵌入式编程)吗?

c - 在 Micro 8051 的 Keil 中将字符指针函数的返回值分配给字符变量数组时出错

c - 如何在 Keil uVision 中创建延迟功能?

C51 编译器 - 写入 xdata

c - 什么是最小化 RAM 消耗的良好实现实践