工作平台28027+CCS5.5,想自己做Bootloader引导程序通过串口升级应用程序,这样就不用跳线;
FlashA区放Bootloader引导程序,FlashB/C/D区放应用程序;
用烧录器烧录时先烧录Bootloader引导程序至FlashA区(烧录时只擦除A区),仿真运行正常;
再用烧录器烧录应用程序至FlashB/C/D区(只擦除BCD区,由于还在调试阶段所以用仿真器烧录),每次烧录提示“Load Program Failed”,这个怎么解决?
另外,关于两个程序间跳转,不知跳转指令对不对,还需不需要其他处理?
从bootloader跳转至应用程序:
asm(" MOVL XAR7, #0x3F0000"); //0x3F0000是FlashBCD区的起始地址
asm(" LB *XAR7");
从应用程序跳转至bootloader:
asm(" MOVL XAR7, #0x3F6000"); //0x3F6000是FlashA区的起始地址
asm(" LB *XAR7");
多谢。
mangui zhang:
回复 bkn1860:
芯片上电厂商固话的 跳转应该是_c_int00吧
可以进行二次引导
工作平台28027+CCS5.5,想自己做Bootloader引导程序通过串口升级应用程序,这样就不用跳线;
FlashA区放Bootloader引导程序,FlashB/C/D区放应用程序;
用烧录器烧录时先烧录Bootloader引导程序至FlashA区(烧录时只擦除A区),仿真运行正常;
再用烧录器烧录应用程序至FlashB/C/D区(只擦除BCD区,由于还在调试阶段所以用仿真器烧录),每次烧录提示“Load Program Failed”,这个怎么解决?
另外,关于两个程序间跳转,不知跳转指令对不对,还需不需要其他处理?
从bootloader跳转至应用程序:
asm(" MOVL XAR7, #0x3F0000"); //0x3F0000是FlashBCD区的起始地址
asm(" LB *XAR7");
从应用程序跳转至bootloader:
asm(" MOVL XAR7, #0x3F6000"); //0x3F6000是FlashA区的起始地址
asm(" LB *XAR7");
多谢。
Andy8:
回复 bkn1860:
多谢,按照你说的思路在map中找_c_int00地址,实际运行能正常跳转,是可行的,不过这样实现有点麻烦,源文件改动后_c_int00地址很可能也变了。
查找了下解决方法,由于_c_int00是从cmd文件BEGIN分配的地址跳转过来的,所以在跳转时直接跳转到BEGIN分配的地址去,实际运行OK,两个程序间能正常跳转了,这样的话跳转地址是分配好的,实现起来更方便些,不知这个实现方案有没有其他问题,因为没有在产品中应用过,不是很确定?
对于第一个问题也找到问题了,是由于之前两个程序的BEGIN地址空间分配的是一样的,导致烧录其中一个后,另一个就不能运行了,现在改为Bootloader分配自己的BEGIN地址空间,应用程序分配自己的BEGIN地址空间,两个程序间跳转也是根据这个地址跳转。
现在两个程序烧录后,每次最先运行的是Bootloader程序,这个先后顺序不知是确定的还是随机的,可不可以自己指定哪个程序最先运行?
工作平台28027+CCS5.5,想自己做Bootloader引导程序通过串口升级应用程序,这样就不用跳线;
FlashA区放Bootloader引导程序,FlashB/C/D区放应用程序;
用烧录器烧录时先烧录Bootloader引导程序至FlashA区(烧录时只擦除A区),仿真运行正常;
再用烧录器烧录应用程序至FlashB/C/D区(只擦除BCD区,由于还在调试阶段所以用仿真器烧录),每次烧录提示“Load Program Failed”,这个怎么解决?
另外,关于两个程序间跳转,不知跳转指令对不对,还需不需要其他处理?
从bootloader跳转至应用程序:
asm(" MOVL XAR7, #0x3F0000"); //0x3F0000是FlashBCD区的起始地址
asm(" LB *XAR7");
从应用程序跳转至bootloader:
asm(" MOVL XAR7, #0x3F6000"); //0x3F6000是FlashA区的起始地址
asm(" LB *XAR7");
多谢。
Andy8:
回复 mangui zhang:
mangui zhang:
多谢,不知你说的二次引导是如何实现的?
工作平台28027+CCS5.5,想自己做Bootloader引导程序通过串口升级应用程序,这样就不用跳线;
FlashA区放Bootloader引导程序,FlashB/C/D区放应用程序;
用烧录器烧录时先烧录Bootloader引导程序至FlashA区(烧录时只擦除A区),仿真运行正常;
再用烧录器烧录应用程序至FlashB/C/D区(只擦除BCD区,由于还在调试阶段所以用仿真器烧录),每次烧录提示“Load Program Failed”,这个怎么解决?
另外,关于两个程序间跳转,不知跳转指令对不对,还需不需要其他处理?
从bootloader跳转至应用程序:
asm(" MOVL XAR7, #0x3F0000"); //0x3F0000是FlashBCD区的起始地址
asm(" LB *XAR7");
从应用程序跳转至bootloader:
asm(" MOVL XAR7, #0x3F6000"); //0x3F6000是FlashA区的起始地址
asm(" LB *XAR7");
多谢。
Hank Zhao:
回复 Andy8:
你可以在两个程序的CMD文件中,一个将BEGIN分配给codestart,另一个不分配,分别测试一下。
工作平台28027+CCS5.5,想自己做Bootloader引导程序通过串口升级应用程序,这样就不用跳线;
FlashA区放Bootloader引导程序,FlashB/C/D区放应用程序;
用烧录器烧录时先烧录Bootloader引导程序至FlashA区(烧录时只擦除A区),仿真运行正常;
再用烧录器烧录应用程序至FlashB/C/D区(只擦除BCD区,由于还在调试阶段所以用仿真器烧录),每次烧录提示“Load Program Failed”,这个怎么解决?
另外,关于两个程序间跳转,不知跳转指令对不对,还需不需要其他处理?
从bootloader跳转至应用程序:
asm(" MOVL XAR7, #0x3F0000"); //0x3F0000是FlashBCD区的起始地址
asm(" LB *XAR7");
从应用程序跳转至bootloader:
asm(" MOVL XAR7, #0x3F6000"); //0x3F6000是FlashA区的起始地址
asm(" LB *XAR7");
多谢。
Andy8:
回复 Hank Zhao:
多谢,可以试一下,不过一个分配codestart地址,另一个不分配,那两个程序跳转就没有一个确定的入口地址了。
工作平台28027+CCS5.5,想自己做Bootloader引导程序通过串口升级应用程序,这样就不用跳线;
FlashA区放Bootloader引导程序,FlashB/C/D区放应用程序;
用烧录器烧录时先烧录Bootloader引导程序至FlashA区(烧录时只擦除A区),仿真运行正常;
再用烧录器烧录应用程序至FlashB/C/D区(只擦除BCD区,由于还在调试阶段所以用仿真器烧录),每次烧录提示“Load Program Failed”,这个怎么解决?
另外,关于两个程序间跳转,不知跳转指令对不对,还需不需要其他处理?
从bootloader跳转至应用程序:
asm(" MOVL XAR7, #0x3F0000"); //0x3F0000是FlashBCD区的起始地址
asm(" LB *XAR7");
从应用程序跳转至bootloader:
asm(" MOVL XAR7, #0x3F6000"); //0x3F6000是FlashA区的起始地址
asm(" LB *XAR7");
多谢。
Hank Zhao:
回复 Andy8:
Flash运行时,BOOT ROM程序结束后会跳转到0x33FFF6这个地址,跟codestart也没有关系,哪个程序的begin放在0x33FFF6这个位置就会先执行哪一个程序。
工作平台28027+CCS5.5,想自己做Bootloader引导程序通过串口升级应用程序,这样就不用跳线;
FlashA区放Bootloader引导程序,FlashB/C/D区放应用程序;
用烧录器烧录时先烧录Bootloader引导程序至FlashA区(烧录时只擦除A区),仿真运行正常;
再用烧录器烧录应用程序至FlashB/C/D区(只擦除BCD区,由于还在调试阶段所以用仿真器烧录),每次烧录提示“Load Program Failed”,这个怎么解决?
另外,关于两个程序间跳转,不知跳转指令对不对,还需不需要其他处理?
从bootloader跳转至应用程序:
asm(" MOVL XAR7, #0x3F0000"); //0x3F0000是FlashBCD区的起始地址
asm(" LB *XAR7");
从应用程序跳转至bootloader:
asm(" MOVL XAR7, #0x3F6000"); //0x3F6000是FlashA区的起始地址
asm(" LB *XAR7");
多谢。
Andy8:
回复 Hank Zhao:
我懂你的意思了,就是0x3FFF6分配给应用程序codestart,则应用程序先执行,反之Bootloader程序先执行。由于我工程是把FlashA空间分配给Bootloader程序,所以肯定是先执行Bootloader程序,如果想让应用程序先执行,则需把FlashA空间分配给应用程序,我是这么理解的。关于Bootloader程序跳转等问题基本搞定。
不过,想问各位大侠,有没有C2PROG、SDFLASH或其他烧录软件的烧录过程及通信协议,烧录通信协议本来想自己定义,但是没有自己开发的上位机烧录,所以想让Bootloader程序兼容目前烧录软件的,不知各位大侠有木,多谢。