我正在使用 LPC4078 和 MCUXpresso,并尝试在 Eeprom 中存储数值。
我想在不清除整个页面的情况下在页面中间写几个字节。
在数据表中可以看到,在将数据写入页面寄存器后,还必须将其编程到非易失性存储器中,而这是通过擦除/编程操作完成的。
擦除/编程操作是擦除整个页面,还是只擦除有新数据的页面区域?- 擦除/编程的地址设置会忽略 6 个 lsbs,因此它只知道页面。
UM10562.pdf 没有明确说明这个问题。
谢谢!
亚历克斯
我附上了一个工作区,其中包含上述项目。我使用 lpc-link2 调试器在 LPC4078 上运行了它。
(我懒得让半托管工作,所以使用断点来检查数据)。
嗨,爱丽丝、
我的实验证明并非如此:
我使用 lpc_board_ea_devkin_4088 库和 periph_eeprom 演示项目编写了一个小程序来启动它。
我擦除了一页 Eeprom,然后读了回来。令我惊讶的是,结果都是 "0",而不是 0xFF
然后,我将 "ABCDEFG/0 "写入该页面的地址 0,并读回页面。我收到 "ABCDEFG\0
然后,我将 "ABCDEFG/0 "写入该页的地址 7,并回读该页。我收到 "ABCDEFGABCDEFG\0
除了两件事之外,一切都在预料之中:
1. 擦除 eeprom 后读数为 0
2. 从Chip_EEPROM_Write()的实现来看,似乎没有读取-修改-擦除-写入的顺序。只有 Chip_EEPROM_WritePageRegister 之后的 Chip_EEPROM_EraseProgramPag。
这就是我提问的原因。
谢谢!
亚历克斯
在所有 printf 字符串中添加换行符后,我的半托管系统就能正常工作了!还有更清楚的证据证明了我所说的一切:
擦除将 Eeprom 设置为 0x00
该代码不执行读-修改-擦除-写序列,只执行擦除-写序列。
LPC4078 在擦除时似乎只擦除写入的位置。
我真的很想澄清这一点。
谢谢!
亚历克斯
尽管事态“升级”(无论这意味着什么),但恩智浦方面对此事仍未作出进一步回应。
我还需要进一步澄清。
感谢您的回复,很抱歉回复晚了。
遗憾的是,我们之前的社区脚本存在故障,因此客户回复无法在我们的内部系统中触发案例更新通知。对于延误,我深表歉意。
关于 LPC4078 上的 EEPROM,根据用户手册,与实际 EEPROM 块的所有通信都是通过 64 字节的页面缓冲区进行的。因此,请确保您的 EEPROM 操作符合用户手册中描述的要求。
目前,除非按照这些要求访问 EEPROM,否则我们无法确定是否存在问题。
谢谢!
BR
爱丽丝
嗨,爱丽丝、
我正在使用 eeprom_17xx_40xx.h 中的函数。和 eeprom_17xx_40xx.c(由恩智浦提供,并包含在我附上的项目中)
Chip_EEPROM_Write() 函数调用 Chip_EEPROM_WritePageRegister() 函数,然后调用 Chip_EEPROM_EraseProgramPage() 函数。
Chip_EEPROM_WritePageRegister() 函数使用 Chip_EEPROM_SetAddr() 函数设置 EEPROM 地址,该函数负责移位和消隐低 6 位。
然后使用 Chip_EEPROM_WriteData() 函数将数据字节写入 EEPROM 写入数据寄存器 (WDATA)。
Chip_EEPROM_EraseProgramPage() 使用 Chip_EEPROM_SetAddr() 函数设置页地址,启用擦除/页编程位,并等待编程完成。
我找不到任何读取页面中现有 EEPROM 数据以执行页面读取-修改-写入操作的代码。
然而,正如我的项目所展示的那样,EEPROM 页擦除似乎不会擦除整个页面,而只会擦除写入数据寄存器中加载了新数据的地址。
谢谢!
亚历克斯