使用SST89E516RD控制器,如何将变量值写入内部闪存并从闪存读回

问题描述 投票:0回答:1

我正在使用新版本的SST89E516RD控制器和KEIL c51编译器。我想将变量值存储到闪存中以供开机周期使用。为此,我正在使用 in_application_programming (IAP)。如何使用应用内购买?如果我对变量使用 CODE 关键字,则表明显示未修改的值错误。如何将变量值存储到闪存中并在电源关闭和打开时读回?你能提供一个示例代码吗?

我期待存储在闪存中的一个字符值的简短逻辑代码,并在 8051 控制器中电源关闭和打开时读取它。如何启用IAP以及如何解锁8051控制器中闪存的安全锁?

embedded firmware 8051
1个回答
0
投票

Flash是可重写存储器,但不是“读写”存储器。而且,它通常具有页块擦除功能,因此虽然可以写入单个字节,但必须擦除整个页,并且只有处于擦除状态的字节才能写入。

闪存在正常状态下是只读存储器,要擦除一页或写入一个字节,必须将内存控制器设置为写入模式。完成此操作的方法因特定 MCU 而异,详细信息将在数据表中提供。 MCU 供应商可能会提供库代码来执行写入操作。

但是,您不能像修改 RAM 中那样简单地修改 ROM 驻留变量。事实上,由于块擦除约束,您更有可能在 RAM 中维护变量,并在启动时从 ROM 初始化它(以及其他 NV 数据),并在修改时将所有变量写入块。这需要特别小心(和代码),以确保更新时发生电源故障时数据的完整性(闪存写入和擦除“非常慢”),并且对我来说还要尽量减少写回,因为闪存的“耐用性”有限,某些部件的擦除/写入周期耐久性可能低至 10000 次,通常不超过 100000 次。 因为如果出现这些问题,替代的 NV 存储(例如外部 SPI 或 I2C 串行 EEPROM 或 FRAM)可能是更安全的解决方案。

现在考虑到所有这些注意事项,您的特定 MCU 的详细信息在

https://ww1.microchip.com/downloads/en/DeviceDoc/25093B.pdf

第 35 页中定义。该部件具有相对较小的 128 字节擦除块(或扇区)。确保电源故障安全的一个简单方法是主训练数据的两个副本,并在交替写入时翻转它们,并包括序列和完整性检查,以便您可以确定启动时当前是哪个扇区。

© www.soinside.com 2019 - 2024. All rights reserved.