TI中文支持网
TI专业的中文技术问题搜集分享网站

求助:C2000 F28027 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");

多谢。

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程序兼容目前烧录软件的,不知各位大侠有木,多谢。

赞(0)
未经允许不得转载:TI中文支持网 » 求助:C2000 F28027 Bootloader引导程序 串口烧录 程序跳转 相关问题
分享到: 更多 (0)