我最近写了个MC9S12XE系列MCU的BOOTLOADER,用于串口烧写FLASH.在防真器BDM(P&E的)连接在目标板上时,可以烧写成功,在防真器BDM没有连接在目标板上时,就烧写不成功(烧完后没见程序跑起来. 具体现象就是:我先通过防真器把程序烧进去,点击运行让程序跑起来后,再通过PC机上的一个VC6.0编的串口发送程序,发送.glo文件(和.s19文件几乎一样),发送完毕后,更新后的程序就能跑起来(我以闪烁不同LED灯作为新旧程序标志).这时BDM是连接在目标板上的,在这种情况下,我继续烧写更新后.glo文件下去,也没有问题. 问题在我断电后,拔掉BDM,再上电(程序在运行),这时再烧.glo文件下去的话,能烧写完毕,但就不见更新后的程序跑起来(因为LED没有再闪烁). 我BOOTLOADER的原理:目标板串口检测特定字符后,相应程序就把BOOTLOADER那段代码拷贝到RAM内存中,然后CPU跳到内存中运行BOOTLOADER代码,接收PC机串口发下来的数据(按照相应协议).进行烧写FLASH,当接收到结束标志后,CPU就跳到复位地址,进行复位. |