本人使用飞思卡尔S12XEG128MAL做烧录板,希望自制以PIC18F25K80为目标板的ICSP高压烧录程序。
之前通过抓取PICKIT3对目标板烧录程序时的波形,分析其烧录过程大致可以分为四个部分:
1、读DEVICE ID,估计是 PICKIT3 用于做校验的;
2、擦除所有模块,包括:
a、ERASE BOOT BLOCK;
b、ERASE BLOCK 0;
c、ERASE BLOCK 1;
d、ERASE BLOCK 2;
e、ERASE BLOCK 3;
f、ERASE (801004);貌似微芯官方文件《Flash Microcontroller Programming Specification》,没有给出定义,姑且以关键数据代替;
g、ERASE CONFIGURATION FUSES;
h、LongTime Duration for ERASE;这也是官方文件没有给出的,自己写的一些话,其实就是一大段寄存器配置;
i、写0x927F,写0x6A7F;这好像是结束的意思,清除EECON1寄存器的各标志位。
3、写数据;以单次写入操作数据不得超过64bytes,可小于;(PICKIT3在此过程中会执行回读数据操作,估计也是用于内部校验)
4、对配置寄存器CONFIGnL和CONFIGnH写数据。问题的关键所在,PICKIT3会在数据写入完成以后,会再对配置寄存器CONFIGnL和CONFIGnH赋值(通过示波器观察得到所赋数据)。但是自制的ICSP烧录的只是将mplab IDE提供的HEX文件中的数据提取出来,然后进行烧录,其中应该是没有用于配置寄存器CONFIGnL和CONFIGnH等的值的,所以暂时做不了配置寄存器赋值操作。我不是很确定用mplab IDE 在线烧录HEX文件和用mplab IDE编译源文件后再烧录程序是否有区别。还望各位大神不吝赐教,谢谢! |