Board logo

标题: 关于EEPROM的擦写 [打印本页]

作者: ky3453079    时间: 2007-3-22 13:14     标题: 关于EEPROM的擦写

 

MC9S12A512的芯片
对EEPROM进行擦除跟写入当重新上电时数据丢失了,我把EEPROM映射到0xa000地址上了。
在调试的时候,在memory窗口下0xa000上的值都是FF,我写入数据后这些FF没变成我写的那写数据的值,可是读出来的时候却是我写进去的那些值。但是最重要的还是上电数据丢失了。请斑竹帮忙下!程序如下:

[此贴子已经被作者于2007-3-22 13:14:54编辑过]


作者: ky3453079    时间: 2007-3-22 13:14

http://bbs.eccn.com/uploadImages/eeprom.rar
作者: strongchen    时间: 2007-3-23 10:18

0xA000处于分页地址区。当对此地址进行操作时,必须注意其分页,即PPAGE寄存器的值。
作者: ky3453079    时间: 2007-3-23 14:26

如果我不是映射到0xa000,如果映射到固定页也是一样的情况。
我试过在不映射的情况下,因为EEPROM的地址跟寄存器地址还有RAM地址重叠了,但还留出从0x400到0x800的地址没有重叠,我在0x400的地址上也试过,出现的情况跟上面所说的一样。
作者: strongchen    时间: 2007-3-23 15:53

把映射到固定页的project也贴出来看看。
作者: ky3453079    时间: 2007-3-26 10:48

http://bbs.eccn.com/uploadImages/eeprom1.rar
作者: strongchen    时间: 2007-3-26 14:37

问题其实很简单。实际上你的程序对EEPROM的操作都是对的,只是你没有告诉编译器你的EEPROM在哪里,所以调试时无法正确显示。你只要在PRM文件中加上这么一句即可:

/* unbanked FLASH ROM */
ROM_4000 = READ_ONLY 0x4000 TO 0x6FFF;
EEPRO_RM = READ_ONLY 0x7000 TO 0x7FFF;
ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF;

另外你说的上电后数据丢失,应该是由于再次调试连接时会将芯片全部擦除。你也可以选择不擦除EEPROM。
作者: ky3453079    时间: 2007-3-26 16:22

在哪里可以选择不擦除EEPROM的选项?
关于freescale的内部EEPROM的地址,要用到全部的4K空间就必须要跟其他的存储空间重叠,而且EEPROM只支持字写入,不知道我理解的对不对?

作者: strongchen    时间: 2007-3-26 17:20

在调试界面的File->Configuration里,选择Load,选中“Automatically erase and program into FLASH and EEPROM”(打勾),然后按它下方的“Advanced...”按钮,就可以选择在编程时不擦除哪个部分了。

关于第二个问题,你的理解是对的。但EEPROM的映射地址是可以改变的。如果你愿意,完全可以用到全部的EEPROM空间。
作者: aileensummer    时间: 2007-5-27 16:11

请问版主,“在调试界面的File->Configuration里,选择Load,选中“Automatically erase and program into FLASH and EEPROM”(打勾),然后按它下方的“Advanced...”按钮,就可以选择在编程时不擦除哪个部分了。”是哪个版本中的呢?
我在cw4.1中没有看到呢?
作者: strongchen    时间: 2007-5-28 10:08

CW4.5和CW4.6。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0