标题: 如何初始化S12的EEPROM? [打印本页]
作者: plutus00 时间: 2006-12-17 17:36 标题: 如何初始化S12的EEPROM?
各位:
不知道如何在IDE环境下直接对EEPROM中的参数进行初始化。我使用的芯片是S12D64。他内部具有1k的EEPROM。
我的想法是,在IDE的环境下,针对在EEPROM中的一些参数(参数非常多,大约是使用了800个字节的EEPROM),直接进行初始化赋值,保证程序在运行的过程中,不用再对EEPROM初始值进行赋值。
现在,我在PRM文件,针对EEPROM的分区采用了FILL指令的方式,对其中的数据进行填充,如下所示:
EEPROM = READ_ONLY 0x2000 TO 0x23FF FILL
0x00 0x3D 0x10 0x80 0x02 0x00 0x74 0x00
0x07 0x00 0x00 0x00 0x1E 0x00 0x00 0x00
0x1E 0x22 0x28 0xA7 0x00 0xAA 0x00 0x00 //CODING DATA BLOCK 0
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
实际上,FILL这个指令在CW的手册中,只有针对flash的操作,并没有提到这个质量也可以针对EEPROM进行操作,现在我只是强制将EEPROM认为是flash,这样强制他生成相干的S19代码,但是代码是生成了,现在还不是很好的理解,BDM和IDE是符合确保这个数据是可以烧写到EEPROM的准确位置上的?
但是,针对S12的MCU他的EEPROM是可重定位的,在软件下载的过程中,如何保证BDM能够直接找到相关的EEPROM的准确位置。
并且针对针对S12D64的的复位INITEE的复位默认值,在不同的烧写时刻,通过BDM烧写器发现,他的数值,经常是不一样的,并不总是手册中的默认复位值?不知道这是个什么现象?
作者: strongchen 时间: 2006-12-18 13:56
在IDE中,即在CodeWarrior中直接对EEPROM的数据进行初始化有多种方式,可以定义常数,也可以采用这种FILL命令的方式。一般来说,不管采用哪种方式定义EEPROM中的初始数据,都是在对芯片进行编程时将数据写入芯片,此时EEPROM并没有被重新定位,所以应该采用EEPROM的缺省地址来进行定义。当芯片开始运行用户程序后,EEPROM有可能被重新定位,此时用户程序就需对新的地址进行操作了,而EEPROM中的原始数据也会同时移位到新的地址。
作者: plutus00 时间: 2006-12-19 13:42
IDE中,实际上,EEPROM和reg&RAM的缺省地址都有重叠的部分,如果按照上面的方法进行的话,不能将所有的eeprom的地址都进行设置,不知道这个问题是如何解决的。
作者: strongchen 时间: 2006-12-20 12:28
你可以将EEPROM地址映射到一个不被覆盖的区域(FLASH区也可以,因为EEPROM的级别比FLASH要高),然后在PRM文件中直接将这个地址用于EEPROM的定义。然后,在文件P&E_Multilink_CyclonePro_Reset.cmd中,加入这么一句命令:
// After reset the commands written below will be executed
WB 0x12 0x21
就是复位后将INITEE(地址0x12)置为0x21。这个值根据你要映射EEPROM的地址来确定。
这样当调试程序启动后,它会先改INITEE的值,将EEPROM映射到你要的地方,然后再写芯片,这样,你的EEPROM的初始值也就写到这个地方去了。
作者: plutus00 时间: 2006-12-21 18:22
如前面所述,我现在是将EEPROM的地址放到了0x2000的起始地址上,这个地址在默认的情况下是没有人使用的。
同时在P&E_Multilink_CyclonePro_Reset.cmd文件中,我并没有加上你那个命令。在程序下载的过程中,有的时候是好使的,有的时候是不好使的,同时不好使的时候,在进入debug界面中,里面的地址显示信息总是显示EEPROM的地址不是在0x2000上,好使的时候,他显示的地址都是在0x2000上的,我现在就是不知道,在具体的程序下载过程中,到底是那个文件定义的INITEE的值,保证能够把我在PRM文件中定义的EEPROM的地址对应起来。
如你上面所述,我曾经在P&E_ICD_Erase_unsecure_hcs12.cmd,增加过WB 0x12 0x21命令行,但是他的后面还有一个reset命令。我不知道在命令文件中的这几个文件,是在什么过程中使用的,哪些是和flash编程有关的。
我不知道这几个命令文件是在什么阶段执行命令的?
不胜感激,十分感谢你的回复!
作者: strongchen 时间: 2006-12-25 09:48
你的帖子中有乱码,看不清楚。
作者: plutus00 时间: 2006-12-25 12:04
如前面所述,我现在是将EEPROM的地址放到了0x2000的起始地址上,这个地址在默认的情况下是没有人使用的。
同时在P&E_Multilink_CyclonePro_Reset.cmd文件中,我并没有加上你那个命令。在程序下载的过程中,有的时候是好使的,有的时候是不好使的,同时不好使的时候,在进入debug界面中,里面的地址显示信息总是显示EEPROM的地址不是在0x2000上,好使的时候,他显示的地址都是在0x2000上的,我现在就是不知道,在具体的程序下载过程中,到底是那个文件定义的INITEE的值,保证能够把我在PRM文件中定义的EEPROM的地址对应起来。
如你上面所述,我曾经在P&E_ICD_Erase_unsecure_hcs12.cmd,增加过WB 0x12 0x21命令行,但是他的后面还有一个reset命令。我不知道在命令文件中的这几个文件,是在什么过程中使用的,哪些是和flash编程有关的。
我不知道这几个命令文件是在什么阶段执行命令的?
不胜感激,十分感谢你的回复!
作者: plutus00 时间: 2006-12-25 12:07
你看看这个行不行,
我主要是想知道,在ML12烧写程序的过程中,他的几个命令文件是如何工作的,在什么阶段,执行哪个命令文件?
另外就是CW12中的烧写程序应该是根据FPP文件进行,不知道是不是这样的?
这个命令文件的执行和FPP文件中的程序代码是如何联系上的?
多谢指点
作者: plutus00 时间: 2006-12-25 12:08
如何还是乱码的话,请参见附件。http://bbs.eccn.com/uploadImages/关于EEPROM编程的问题.doc
作者: strongchen 时间: 2006-12-25 13:45
按照我提供的方法,应该可以解决你的问题了,是吗?
作者: plutus00 时间: 2007-1-29 08:54
这个方法不好使,使用了这个指令,对他的基地址没有什么影响。
我看到在进行S12的程序下载的时候,发现他需要一个*.FPP文件,我问过P&E公司的工程师,他讲需要,metroworks公司提供最新的*.FPP文件,才可。
作者: strongchen 时间: 2007-1-29 09:13
我在DP256的EVB板上试过,每次都是可以的。不知为何在你那不行。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |