首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何初始化S12的EEPROM?

如何初始化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烧写器发现,他的数值,经常是不一样的,并不总是手册中的默认复位值?不知道这是个什么现象?

在IDE中,即在CodeWarrior中直接对EEPROM的数据进行初始化有多种方式,可以定义常数,也可以采用这种FILL命令的方式。一般来说,不管采用哪种方式定义EEPROM中的初始数据,都是在对芯片进行编程时将数据写入芯片,此时EEPROM并没有被重新定位,所以应该采用EEPROM的缺省地址来进行定义。当芯片开始运行用户程序后,EEPROM有可能被重新定位,此时用户程序就需对新的地址进行操作了,而EEPROM中的原始数据也会同时移位到新的地址。
海纳百川  有容乃大
IDE中,实际上,EEPROM和reg&RAM的缺省地址都有重叠的部分,如果按照上面的方法进行的话,不能将所有的eeprom的地址都进行设置,不知道这个问题是如何解决的。
你可以将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的初始值也就写到这个地方去了。
海纳百川  有容乃大
如前面所述,我现在是将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编程有关的。

我不知道这几个命令文件是在什么阶段执行命令的?

不胜感激,十分感谢你的回复!


你的帖子中有乱码,看不清楚。
海纳百川  有容乃大
如前面所述,我现在是将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编程有关的。

我不知道这几个命令文件是在什么阶段执行命令的?

不胜感激,十分感谢你的回复!
你看看这个行不行,
我主要是想知道,在ML12烧写程序的过程中,他的几个命令文件是如何工作的,在什么阶段,执行哪个命令文件?
另外就是CW12中的烧写程序应该是根据FPP文件进行,不知道是不是这样的?
这个命令文件的执行和FPP文件中的程序代码是如何联系上的?
多谢指点
如何还是乱码的话,请参见附件。http://bbs.eccn.com/uploadImages/关于EEPROM编程的问题.doc
按照我提供的方法,应该可以解决你的问题了,是吗?
海纳百川  有容乃大
这个方法不好使,使用了这个指令,对他的基地址没有什么影响。
我看到在进行S12的程序下载的时候,发现他需要一个*.FPP文件,我问过P&E公司的工程师,他讲需要,metroworks公司提供最新的*.FPP文件,才可。
我在DP256的EVB板上试过,每次都是可以的。不知为何在你那不行。
海纳百川  有容乃大
返回列表