- 打卡等级:常住居民III
- 打卡总天数:121
- 最近打卡:2025-05-01 19:17:52
已绑定手机
中级会员
- 积分
- 492
|
我使用 20.5.1 例程中的 4个EEPROM基本函数,然后把操作中间和最后的 EEPROM 数据通过串口上送PC机显示,进行EEPROM操作测试, 发现操作结果如下:
1. 烧写程序时设置 EEPROM 32K, 系统时钟 22.1184MHz, 【我的测试程序代码只有2K不到】
2. 程序上电完成串口初始化之后,先读出 0x000000uL 地址开始的 32 字节,发现这32字节和 我的程序代码开头处的 32 字节完全相同;
for(i=0, add=0x000000uL ; i<32; i++, add++) IapRead(add);
3. 再擦除 0x004000uL 地址处的1个扇区;
IapErase(0x004000uL);
3. 然后读出 0x004000uL 地址开始的 32字节, 发现 这32字节 都是 0xFF
for(i=0, add=0x004000uL ; i<32; i++, add++) IapRead(add);
4. 对 0x004000uL 地址开始 写入16字节
memcpy(w_buf, "0123456789ABCDEF", 16);
for(u16_i=0u, u32_addr=0x004000uL; u16_i<16u; u16_i++, u32_addr++)
{
IapProgram(u32_addr, w_buf[u16_i]); //EEPROM 0x004000 开始写入16字节
}
5. 读出 0x004000uL 地址开始的 32字节, 发现 这32字节中,前16字节 是 "0123456789ABCDEF", 后16字节 都是 0xFF
for(i=0, add=0x004000uL ; i<32; i++, add++) IapRead(add);
//==============================================================================
第二次测试: 程序下载后,执行
IapErase(0x000000uL);
然后再读出32字节
for(i=0, add=0x000000uL ; i<32; i++, add++) IapRead(add);
上电之后的时候,程序传输一次数据后,状态就乱了 【应该是程序第一扇区被擦除了, IAP的4个函数在C文件的最后,不使用第一扇区】
测试结论: 在 STC8051U-34K64-LQFP48 上面, EEPROM的划分 似乎不像 芯片文档 20.4.1 的描述
请问版主,是这样的情况吗? 或者说不同的芯片型号,操作 EEPROM 还是有区别的? 如果是的话,文档也应该单独说明一下,谢谢!
|
|