您的位置:首页 > 其它

串口启动问题:从BL1运行起来后,加载EBOOT.NB0成功,跳转到EBOOT去执行时停止,什么问题?

2012-05-18 13:50 405 查看
硬件平台介绍:三星S5PV210芯片,wince6.0系统。

这几天遇到了郁闷的问题:系统从UART启动,通过dragin工具也加载成功BL1_UART.NB0文件,通过串口打印消息可以看出,BL1也运行起来了,初始化OTG口也成功了,传输EBOOT.NB0文件也成功了,跳转到EBOOT去执行时停止了。停在了如下消息处:

OEMInitLIb is Success

+++InitializeInterrupt()

---InitializeInterrupt()

+++OTGDEV_InitOtg

OTGDEV_SetSoftDisconnect

---OTGDEV_InitOtg

TSR START ADDRESS : 0x47700000

TSR IMAGE SIZE : 0x00080000

DOWNLOADING IS COMPLETED

我对比了我的BL1_UART目录下的代码,和原来开发板提供的代码一致,也对比了EBOOT下的代码,我有在BSP_ARGS这个结构体里增加了2个DWORD的变量。然后就是修改了LOGO显示部分的代码,LOGO图片也比之前的小很多。系统编译能通过,但是不管我怎么恢复,就是跳转运行EBOOT.NB0不成功。也测试了PMIC的POWERHOLD脚的电平也没有变化,从上电到运行EBOOT.NB0始终是高电平。这点应该可以排除电源跌落造成停止运行的情况。难道是DDR2 RAM初始化代码方面的问题?

分析EBOOT代码,正常启动应该是:从BootloaderMain函数里的KernelRelocate执行完后就执行OEMDebugInit函数,然后就是打印出:

Microsoft Windows CE Bootloader Common Library Version 1.4 Built May 17 2012 11:40:09

+OEMPlatformInit.

Microsoft Windows CE Bootloader for the Samsung SMDKV210 Version 2.5 Built May 17 2012

这一串东西。我现在的情况就是打印不出上面的那串消息。如何判断有没有执行到BootloaderMain函数里面呢?决定点灯试试。还有个疑问:有什么工具可以断点调试BL1或者eboot代码?VS2005可以吗?

现在测到的最新进展是:当一执行:BL1代码里的main函数的最后:

CallTSR = (TSR_RUN)dwImgAddr;

CallTSR();

就系统复位。(原来我设定的某个管脚置高的脚变低了。),地址是没错的:0x47700000,为什么跳到这个地址去就复位了呢?

CallTSR 是这样定义的: TSR_RUN CallTSR;

现在测到的最新进展是:BL1文件用我自己的BL1_UART.NB0,EBOOT用以前能正常启动的开发板的EBOOT.NB0,就能正常跳到eboot去执行。因此断定:肯定是我的EBOOT代码问题,造成跳到eboot去后系统复位。后面重点检查eboot代码问题。

问题搞定:在BL1或EBOOT目录下的startup.s中复位后增加如下代码:

ldr r1, =0x02 ;GPH1DAT[1] =1

ldr r0, =GPH1DAT

str r1, [r0]



ldr r1, =0x00000010 ;GPH1[1] : Output PMIC_PWRHOLD_OUTPUT=1

ldr r0, =GPH1CON

str r1, [r0]



ldr r1, =0x02 ;GPH1DAT[1] =1

ldr r0, =GPH1DAT

str r1, [r0]

若是增加如下代码:

ldr r1, =0x00000010 ;GPH1[1] : Output PMIC_PWRHOLD_OUTPUT=1

ldr r0, =GPH1CON

str r1, [r0]

ldr r1, =0x5551 ;GPH1PUD[1] ENables Pull-up

ldr r0, =GPH1PUD

str r1, [r0]

ldr r1, =0x02 ;GPH1DAT[1] =1

ldr r0, =GPH1DAT

str r1, [r0]

则始终不行。这点细节折腾我好久!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐