Board logo

标题: EEPROM数据初始化 [打印本页]

作者: ucosII    时间: 2008-1-22 10:28     标题: EEPROM数据初始化

请问版主。怎样可以对EEPROM的数据进行初始化。
作者: strongchen    时间: 2008-1-22 14:31

请参考这个贴子:
http://bbs.eccn.com/dispbbs.asp?boardid=3&rootid=114183&id=114183&star=
作者: qhelie    时间: 2008-1-24 00:14

学习了
作者: ucosII    时间: 2008-1-24 10:15

我用的MC9S12HZ128的芯片。
1、为什么EEPROM在默认的0x400~0x7EF范围初始化不对。但是从新镜像了是对的。
2、从新镜像EEPROM的地址,会对EEPROM的使用寿命有影响吗?
3、因为HZ128是2K的EEPROM和特殊功能寄存器地址复用。镜像EEPROM定义为2K会对
特殊功能寄存器产生影响吗?
作者: strongchen    时间: 2008-1-24 10:17

重新映射EEPROM地址只是改变地址译码器的译码,对EEPROM本身没有任何影响。
作者: ucosII    时间: 2008-1-24 15:09

那为什么不镜像数据能初始化?
作者: strongchen    时间: 2008-1-24 17:22

那要看初时化是在重新映射之前还是之后。
作者: ucosII    时间: 2008-1-25 11:31

1、初时化是在重新映射之前还是之后怎么判断?
2、附件是我的工程。请帮我看看。
3、我的程序写和擦除为什么返回始终是错误。
作者: ucosII    时间: 2008-1-25 11:32

附件从新上传(接上)
http://bbs.chinaecnet.com/uploadImages/eeprom_.rar
作者: strongchen    时间: 2008-1-25 17:18

你是在哪里对EEPROM进行初始化的?
作者: ucosII    时间: 2008-1-26 10:40

在main.c里面
#pragma CONST_SEG EEPROM_DATA
const INT8U VAR[10]=
{
0xA1,0x22,0x33,0x44,0x55,0x11,0x22,0x33,0x44,0x55
};
INT8U *EP;
#pragma CONST_SEG DEFAULT
作者: strongchen    时间: 2008-1-28 11:03

你的这个数组再程序并没有引用,似乎已经被优化掉了。
作者: ucosII    时间: 2008-1-28 13:20

我在prm中定义了
ENTRIES /* keep the following unreferenced variables */
VAR
/* OSEK: always allocate the vector table and all dependent objects */
//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart
END
不应该被优化掉吧?
作者: strongchen    时间: 2008-1-28 15:11

是的,应该没有被优化掉。你把PRM文件中EEPROM的属性改为READ_ONLY试试?
作者: ucosII    时间: 2008-1-28 16:56

1、改成READ_ONLY可以初始化了。这是为什么?
2、请问我的程序为什么在RUN时写EEPROM和擦除是返回是0
但是在单步是返回是1.

作者: strongchen    时间: 2008-1-28 17:24

如果是READ_WRITE而不是READ_ONLY,编译器认为是RAM而不是FLASH或EEPROM,就不会生成代码,也就不会初始化了。
作者: strongchen    时间: 2008-1-28 17:28

你可以检查一下总线时钟是否正确,另外,看看EEPROM中的内容是否改变。
作者: ucosII    时间: 2008-1-29 09:01

EEPROM时钟15K。EEPROM的内容是正确的。
作者: ucosII    时间: 2008-1-29 09:11

请问EEPROM时钟不是在震荡时钟上分频得到的吗?和总线时钟有什么关系。
作者: strongchen    时间: 2008-1-29 10:15

EEPROM时钟应该来自总线时钟。怎么会是15K?
作者: ucosII    时间: 2008-1-29 11:23

MC9S12HZ256V2的数据手册上说EEPROM的时钟是震荡时钟的分频。
我的总线时钟是25M。

作者: strongchen    时间: 2008-1-29 11:38

HZ256的EEPROM时钟确实来自外部振荡时钟,但必须是在150K~200KHz之间。
作者: ucosII    时间: 2008-1-29 13:51

我的EEPROM时钟是200K。但是我的读写返回值时钟是错误。这是为什么?
附件中是我的工程文件。
作者: ucosII    时间: 2008-1-29 13:53

重新上传附件http://bbs.chinaecnet.com/uploadImages/eeprom_20080129.rar
作者: strongchen    时间: 2008-1-29 16:00

那你是在什么情形下返回错误值?EEPROM内容本身正确吗?
作者: ucosII    时间: 2008-1-29 16:41

EEPROM的内容是对的。
我是在EEPROM写完后。将写入后的数据和写入数据进行比对时发现两数据不一样。
所以返回错误。
作者: strongchen    时间: 2008-1-29 17:20

你说EEPROM的内容是对的,那怎么会写入后的数据和写入数据不一样?
作者: ucosII    时间: 2008-1-30 09:25

在我的写入和擦除函数中。在数据写入或擦除后就立刻用EEPROM的数据和写入的数据进行比对发现两个数据不一样。所以函数返回错误。但是我用读函数将全部EEPROM读出发现数据是正确的。这是为什么?
作者: strongchen    时间: 2008-1-30 11:02

你可以试试等CCIF标志置位,即指令完成后再去检测。
作者: ucosII    时间: 2008-1-30 13:55

我的CCIF为什么始终是“1”.我已经清零了CBEIF。(CBEIF = 1;)
作者: strongchen    时间: 2008-1-30 14:36

那说明EEPROM指令很快就完成了。
作者: ucosII    时间: 2008-1-30 14:57

1、那为什么我的数据比对不正确?
2、在BDM方式下,在写EEPROM函数内CCIF始终是1.(包括CBEIF=1前后)
这样对吗?
作者: strongchen    时间: 2008-1-31 10:15

CCIF没有清零?
作者: ucosII    时间: 2008-1-31 11:06

是的。我感觉好像是不对的。
作者: ucosII    时间: 2008-1-31 11:08

我的工程在前面的帖子上有。请帮我看看到底是什么原因。谢谢
作者: strongchen    时间: 2008-1-31 14:20

我看过,但是里面好像没有对CCIF的操作。
作者: ucosII    时间: 2008-2-1 13:30

http://bbs.chinaecnet.com/uploadImages/eeprom_20080201.rar

哦。不好意思我以为原来上传的是改过的。
这个加上了CCIF的但是还是不好用。
请帮我看看。谢谢
作者: strongchen    时间: 2008-2-1 16:30

你这个问题隐藏得太深了,真是难发现啊:你把ESTAT_CCIF写成了FSTAT_CCIF,而偏偏它们都是有效的符号!改过来就好了。
作者: ucosII    时间: 2008-2-2 09:17

非常感谢。问题解决了。
作者: ucosII    时间: 2008-2-2 11:09

请帮我看看我的块擦除程序。为什么还是返回错误。
CCIF应该加在什么位置?
作者: strongchen    时间: 2008-2-2 11:42

CCIF应该就加在判断之前。那你有没有执行擦除校验指令,结果如何?
作者: ucosII    时间: 2008-2-2 15:07

我是加在判断之前了。我进行了擦除检测。返回错误。
如果上电就块擦除。程序会死掉。
附件是我的程序。请帮我看看。谢谢http://bbs.chinaecnet.com/uploadImages/eeprom_20080202.rar
作者: strongchen    时间: 2008-2-3 12:18

我试过你的块擦除程序,其本身应该没有问题。你检查一下程序别的部分吧。你可以试试把程序分成小的部分分别进行调试。
作者: strongchen    时间: 2008-2-3 12:48

你可以参考我的这个project:
http://bbs.chinaecnet.com/uploadImages/dp256_eeprom_1.rar




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