最近在做F28335串口升级,目标是不改变boot方式来实现升级。在参考了大量的学习资料后,调试程序跳转。
分两个工程,bootloader工程和app工程,通过JTAG口分别烧写入FLASHA,FLASHB~H,从反汇编中观察到两个SECTOR区中已经有数据写入,所以想尝试实现bootloader向app工程的跳转。
由于BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */,和reset都设置在bootloader的cmd文件中,因而在开机上电时,复位后运行bootloader的codestart。
做了以下的准备:
1.固定两个工程文件的_c_int00,分别为
flashA,bootloader CINT00: origin = 0x338000, length = 0x000050/* define _c_int00 */ boot : > CINT00 PAGE = 0 { -l rts2800_fpu32.lib<boot.obj>(.text) }
flashB~H CINT00: origin = 0x300002, length = 0x000050 /*define _c_int00*/ boot : > CINT00 PAGE = 0 { -l rts2800_fpu32.lib<boot.obj>(.text) }
2.修改bootloader工程的codestart.asm的汇编文件,如下所示,
*********************************************************************** WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0 .ref _c_int00.global code_start *********************************************************************** * Function: codestart section * * Description: Branch to code starting point ***********************************************************************.sect "codestart" code_start:.if WD_DISABLE == 1LB wd_disable ;Branch to watchdog disable codex .else;LB _c_int00;Branch to start of boot.asm in RTS libraryLB check.endif ;end codestart section *********************************************************************** * Function: wd_disable * * Description: Disables the watchdog timer ***********************************************************************.if WD_DISABLE == 1.text wd_disable:SETC OBJMODE ;Set OBJMODE for 28x object codeEALLOW ;Enable EALLOW protected register accessMOVZ DP, #7029h>>6 ;Set data page for WDCR registerMOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WDEDIS ;Disable EALLOW protected register access;LB check ;Branch to start of boot.asm in RTS library check: MOVL XAR0, #0x338000 ; CMP *XAR0, #0x28AD ;never update before; B app, EQ LB search addPTR: ADDB XAR0, #0x4 search: CMP *XAR0, #0xFFFF B addPTR, NEQ SUBB XAR0, #0x4 CMP *XAR0, #0xFFF0 B app, EQ LB _c_int00 app: MOVL XAR7, #0x300000 LB *XAR7.endif ;end wd_disable .end
问题是:
在JTAG进行在线仿真调试的时候,发现程序无法正常启动,也无法跳转到app main函数的入口地址处运行??
因为第一次尝试做相关的升级项目,定位问题可能不够清晰,如果有任何说得不清楚的地方,望能及时指出,我及时补充。
很困惑,诚心请教有相关调试经验的DSP高手或者TI的FAE帮忙解答,在线等,谢谢!!!
Huihong LIU1:
LB check;调试过程中未注释,此处贴错。
问题是:
在JTAG进行在线仿真调试的时候,发现程序无法正常启动,也无法跳转到app main函数的入口地址处运行??
因为第一次尝试做相关的升级项目,定位问题可能不够清晰,如果有任何说得不清楚的地方,望能及时指出,我及时补充。
很困惑,诚心请教有相关调试经验的DSP高手或者TI的FAE帮忙解答,在线等,谢谢!!!
最近在做F28335串口升级,目标是不改变boot方式来实现升级。在参考了大量的学习资料后,调试程序跳转。
分两个工程,bootloader工程和app工程,通过JTAG口分别烧写入FLASHA,FLASHB~H,从反汇编中观察到两个SECTOR区中已经有数据写入,所以想尝试实现bootloader向app工程的跳转。
由于BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */,和reset都设置在bootloader的cmd文件中,因而在开机上电时,复位后运行bootloader的codestart。
做了以下的准备:
1.固定两个工程文件的_c_int00,分别为
flashA,bootloader CINT00: origin = 0x338000, length = 0x000050/* define _c_int00 */ boot : > CINT00 PAGE = 0 { -l rts2800_fpu32.lib<boot.obj>(.text) }
flashB~H CINT00: origin = 0x300002, length = 0x000050 /*define _c_int00*/ boot : > CINT00 PAGE = 0 { -l rts2800_fpu32.lib<boot.obj>(.text) }
2.修改bootloader工程的codestart.asm的汇编文件,如下所示,
*********************************************************************** WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0 .ref _c_int00.global code_start *********************************************************************** * Function: codestart section * * Description: Branch to code starting point ***********************************************************************.sect "codestart" code_start:.if WD_DISABLE == 1LB wd_disable ;Branch to watchdog disable codex .else;LB _c_int00;Branch to start of boot.asm in RTS libraryLB check.endif ;end codestart section *********************************************************************** * Function: wd_disable * * Description: Disables the watchdog timer ***********************************************************************.if WD_DISABLE == 1.text wd_disable:SETC OBJMODE ;Set OBJMODE for 28x object codeEALLOW ;Enable EALLOW protected register accessMOVZ DP, #7029h>>6 ;Set data page for WDCR registerMOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WDEDIS ;Disable EALLOW protected register access;LB check ;Branch to start of boot.asm in RTS library check: MOVL XAR0, #0x338000 ; CMP *XAR0, #0x28AD ;never update before; B app, EQ LB search addPTR: ADDB XAR0, #0x4 search: CMP *XAR0, #0xFFFF B addPTR, NEQ SUBB XAR0, #0x4 CMP *XAR0, #0xFFF0 B app, EQ LB _c_int00 app: MOVL XAR7, #0x300000 LB *XAR7.endif ;end wd_disable .end
问题是:
在JTAG进行在线仿真调试的时候,发现程序无法正常启动,也无法跳转到app main函数的入口地址处运行??
因为第一次尝试做相关的升级项目,定位问题可能不够清晰,如果有任何说得不清楚的地方,望能及时指出,我及时补充。
很困惑,诚心请教有相关调试经验的DSP高手或者TI的FAE帮忙解答,在线等,谢谢!!!
Terry Deng:
回复 Huihong LIU1:
下载 spraaq2文档和相关例程,有详细关于bootloader的制作
最近在做F28335串口升级,目标是不改变boot方式来实现升级。在参考了大量的学习资料后,调试程序跳转。
分两个工程,bootloader工程和app工程,通过JTAG口分别烧写入FLASHA,FLASHB~H,从反汇编中观察到两个SECTOR区中已经有数据写入,所以想尝试实现bootloader向app工程的跳转。
由于BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */,和reset都设置在bootloader的cmd文件中,因而在开机上电时,复位后运行bootloader的codestart。
做了以下的准备:
1.固定两个工程文件的_c_int00,分别为
flashA,bootloader CINT00: origin = 0x338000, length = 0x000050/* define _c_int00 */ boot : > CINT00 PAGE = 0 { -l rts2800_fpu32.lib<boot.obj>(.text) }
flashB~H CINT00: origin = 0x300002, length = 0x000050 /*define _c_int00*/ boot : > CINT00 PAGE = 0 { -l rts2800_fpu32.lib<boot.obj>(.text) }
2.修改bootloader工程的codestart.asm的汇编文件,如下所示,
*********************************************************************** WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0 .ref _c_int00.global code_start *********************************************************************** * Function: codestart section * * Description: Branch to code starting point ***********************************************************************.sect "codestart" code_start:.if WD_DISABLE == 1LB wd_disable ;Branch to watchdog disable codex .else;LB _c_int00;Branch to start of boot.asm in RTS libraryLB check.endif ;end codestart section *********************************************************************** * Function: wd_disable * * Description: Disables the watchdog timer ***********************************************************************.if WD_DISABLE == 1.text wd_disable:SETC OBJMODE ;Set OBJMODE for 28x object codeEALLOW ;Enable EALLOW protected register accessMOVZ DP, #7029h>>6 ;Set data page for WDCR registerMOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WDEDIS ;Disable EALLOW protected register access;LB check ;Branch to start of boot.asm in RTS library check: MOVL XAR0, #0x338000 ; CMP *XAR0, #0x28AD ;never update before; B app, EQ LB search addPTR: ADDB XAR0, #0x4 search: CMP *XAR0, #0xFFFF B addPTR, NEQ SUBB XAR0, #0x4 CMP *XAR0, #0xFFF0 B app, EQ LB _c_int00 app: MOVL XAR7, #0x300000 LB *XAR7.endif ;end wd_disable .end
问题是:
在JTAG进行在线仿真调试的时候,发现程序无法正常启动,也无法跳转到app main函数的入口地址处运行??
因为第一次尝试做相关的升级项目,定位问题可能不够清晰,如果有任何说得不清楚的地方,望能及时指出,我及时补充。
很困惑,诚心请教有相关调试经验的DSP高手或者TI的FAE帮忙解答,在线等,谢谢!!!
Lu Hui:
回复 Huihong LIU1:
请问一下,你的问题解决了吗?