串口启动问题:从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]
则始终不行。这点细节折腾我好久!!
这几天遇到了郁闷的问题:系统从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]
则始终不行。这点细节折腾我好久!!
相关文章推荐
- javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题解决起来很简单
- 转载:用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解
- javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题解决起来很简单
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- cocos2d-x addImageAsync()异步加载资源成功之后的场景跳转问题
- 关于MyEclipse启动Tomcat,程序能运行,startup.bat启动,Tomcat启动成功,但程序不运行的问题
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。问题的解决方法!
- javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题
- 问题记录:同一台电脑上,两台Tomcat运行同样的webapp项目,只能一个启动成功
- javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题
- VS2010调试“正试图在 OS 加载程序锁内执行托管代码”和运行出现R6034问题解决
- 关于tomcat启动完自动执行的问题,初始化问题,加载两次问题
- 利用process.start()启动WinRAR.exe执行压缩命令在本地运行正常,放到服务器时WinRAR.exe也正常启动了,但没有成功完成压缩指令
- Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)
- Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)
- 正试图在os加载程序锁内执行托管代码。不要尝试在DllMain或映像初始化函数内运行托管代码 问题解决方法
- javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题
- [转]在BBB启动时自动加载dtbo(或执行脚本、运行程序)
- Android Studio 虚拟机启动出现qemu-system-i386.exe 已停止运行问题解决办法
- 在WIN10系统下运行VS2013编译成功后出现:无法启动程序“.exe” 系统找不到指定文件的问题的解决方法