Board logo

标题: 关于Flash擦写问题——S12 [打印本页]

作者: ferrarikwan    时间: 2008-3-11 10:14     标题: 关于Flash擦写问题——S12

问题1:Flash擦写是不是有两种方式:
(1)把Flash擦写代码Copy到RAM,然后跳到RAM的擦写代码首地址执行;
(2)把Flash擦写代码存放到非分页区0x4000-0x7FFF或0xC000-0xFEFF去擦写分页区0x8000-0xBFFF的Flash

问题2:读取非分页地址内容很简单,但怎样读取分页地址的内容如PAGE_30 0x308000-0x30BFFF;是不是先设置PPAGE 再读取0x8000-0xBFFF???
作者: strongchen    时间: 2008-3-11 10:30

问题1:你说的基本上是对的。一般来说,S12的FLASH分成几个块(称为BLOCK或BANK),程序可以在一个块中执行,对另外的块进行擦写操作。当然,如果程序在RAM中执行的话,就可以对任意FLASH地址进行擦写操作了。可以参看此贴:
http://bbs.eccn.com/dispbbs.asp?boardid=3&rootid=124387&id=124387&star=
作者: strongchen    时间: 2008-3-11 10:35

问题2:对于汇编编程来说是这样,读分页地址时,必须先设置PPAGE寄存器然后读0x8000~0xBFFF区的地址。但对于C编程来说,用户只要设定数据地址为分页地址,那么编译器会自动加上对PPAGE的操作,无需用户另外加对PPAGE操作的指令。
作者: ferrarikwan    时间: 2008-3-11 11:04

在CW调试中,memory窗口的0x8000~0xBFFF区的数据是会根据PPAGE的切换而切换的吗?
如果成功在PAGE_30 0x308000~0x30BFFF擦写Flash,memory窗口的0x8000~0xBFFF区和0x308000~0x30BFFF区都会更改吧

如果PAGE_30 0x308000地址数值为 0x55
i=*((volatile unsigned char*)(0x8000));不能读到0x55,是不是只能汇编先设置PPAGE寄存器然后才能读0x8000
作者: strongchen    时间: 2008-3-11 13:51

memory窗口的显示与当前PPAGE寄存器的值有关。
可以直接用PPAGE=0x30来对PPAGE寄存器赋值,不一定要用汇编指令。但对PPAGE寄存器的操作一定要小心,因为程序代码的获取和执行也与之有关。最好由编译器自动对PPAGE进行操作。
作者: ferrarikwan    时间: 2008-3-11 16:09

感谢!!!




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