4798|10

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于WINCE50的EBOOT 系列问题2 [复制链接]

直接说事:
\WINCE500\PLATFORM\COMMON\SRC\ARM\INTEL\PXA27X\STARTUP中是PXA270EBOOT
的真正入口:StartUp
在这个函数中:
首先 bl      PreInit
然后 tst     r10, #RCSR_HARD_RESET
     beq     OALStartUp
然后 tst     r10, #RCSR_GPIO_RESET
     bne     Continue_StartUp
然后 bl  xlli_mem_init
我利用LED调试发现程序进入xlli_mem_init就没出来
进入xlli_mem_init跟踪发现死在了这句:
bl      Light_xlliLEDs                  ; LED可以亮
str     r1,  [r4, #xlli_MSC0_offset]    ; Write the value out
bl      Light_xlliLEDs                  ; LED没有亮
ldr     r1,  [r4, #xlli_MSC0_offset]    ; Read back to latch the data

1、为了调试LED我在 bl   PreInit 之前先调用了 bl   xlli_GPIO_init
   这个应该没有影响吧??
2、xlli_mem_init是初始化内存,WINCE5自带的是64M的SDRAM
   我的板子是128M的SDRAM
   所以我将原来的xlli_mem_init换成我以前BSP下的xlli_mem_init
   可是跟WINCE5自带的这个xlli_mem_init效果一样都是死在了
   str     r1,  [r4, #xlli_MSC0_offset]这条之后
3、是不是也需要将
   bl      PreInit替换成我以前BSP的这个同名函数???
4、  tst     r10, #RCSR_HARD_RESET
     beq     OALStartUp
     tst     r10, #RCSR_GPIO_RESET
     bne     Continue_StartUp
这是在判断硬件重起或者挂起吧?为什么放在这
这个对后面应该没有影响吧??
希望各位有相关经验的给点意见!
感谢各位!

最新回复

问题2已经搞定 总结: 1、修改对应的OEMaddressTable,虽然程序还没走到这,但是早晚需要修改   注意FLASH和SDRAM大小 2、注意硬件连接方式:FLASH、SDRAM是16位还是32位   注意其中的一些宏 3、注意LED部分  详情 回复 发表于 2009-4-9 15:17
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1. 這種問題很難回答, 寫程式本來就是會牽一髮而動全身, 不真的追進去沒人敢保證, 何況你的 xlli_mem_init 跟我的 xlli_mem_init 又不見得一樣.

2. 建議你先回頭看一下 User's Manual, MSC0 是做什麼的, 你就會發現你把 NOR Flash 的 access timing/width 給改變了, 而你的 eboot 又放在 nor flash 執行, 故程式就死了

3. 抱歉, 不是很懂意思

4. 若是 Suspend/Wakeup, 則直接跳至 OALStartUp, 不需再做一次系統重新設定.

Paul, Chao @ Techware
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
2. 建議你先回頭看一下 User's Manual, MSC0 是做什麼的, 你就會發現你把 NOR Flash 的 access timing/width 給改變了, 而你的 eboot 又放在 nor flash 執行, 故程式就死了

这个太重要了!!!

但是还是有个疑问:
我的板子已经可以跑WINCE4
在CE4的BSP下同样有xlli_lowlev_init.s这个文件
也同样有这个函数
也同样有str    r1,  [r4, #xlli_MSC0_offset]    ; Write the value out 这句
但是在CE4的BOOT中可以正常通过,没有问题

现在我将xlli_mem_init这整个函数都拿到WINCE5的xlli_lowlev_init.s这个文件下,将以前的xlli_mem_init都替换掉
为什么会把 NOR Flash 的 access timing/width 給改變了呢??

 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(中级)

4
 
        ldr   r1,  =xlli_MSC0_DC_value          ; Get MSC0 setting value

        ldr     r4,  =xlli_MEMORY_CONFIG_BASE   ; Get memory controller base address

        str     r1,  [r4, #xlli_MSC0_offset]    ; Write the value out
                bl      Light_xlliLEDs                  ;LED
        ldr     r1,  [r4, #xlli_MSC0_offset]    ; Read back to latch the data

        ldr     r2,  =xlli_MSC1_value           ; Get MSC1 setting
        str     r2,  [r4, #xlli_MSC1_offset]    ; Write the value out
        ldr     r2,  [r4, #xlli_MSC1_offset]    ; Read back to latch the data
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(初级)

5
 
1. 重點是 r1 的值吧, 你的 xlli_MSC0_DC_value 都一樣嗎?? 甚至有一些 flag or option, 那是不是都一樣??

2. 不知你 Light_xlliLEDs 內有否改變 r0-r15 的值.

Paul, Chao @ Techware
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 
1. 重點是 r1 的值吧, 你的 xlli_MSC0_DC_value 都一樣嗎?? 甚至有一些 flag or option, 那是不是都一樣??

强人!高手!

刚刚发现xlli_MSC0_DC_value这个值的定义处:
IF  :DEF:  xlli_FLASH_WIDTH_16_BIT
xlli_MSC0_DC_value EQU   (0x7FF07FFA)     ; Bulverde Card Flash value (MCP version)
        ELSE
xlli_MSC0_DC_value EQU   (0x7FF0B8F2)     ; Bulverde Card Flash value (Non-MCP version)
        ENDIF

在我以前BSP中通过source.cmn下
!IF "$(FLASH_WIDTH_16_BIT)" == "1"
ADEFINES=-pd "FLASH_WIDTH_16_BIT SETS \"$(FLASH_WIDTH_16_BIT)\"" $(ADEFINES)
ADEFINES=-pd "xlli_FLASH_WIDTH_16_BIT SETS  \"1\"" $(ADEFINES)
CDEFINES= $(CDEFINES) -DFLASH_WIDTH_16_BIT
!ELSE
ADEFINES=-pd "FLASH_WIDTH_16_BIT SETS \"0\"" $(ADEFINES)
!ENDIF

看log可以看出是设置了FLASH_WIDTH 为16位

而在WINCE5下我没有搜到相关的设置,那么应该默认为
ELSE
xlli_MSC0_DC_value EQU   (0x7FF0B8F2)     ; Bulverde Card Flash value (Non-MCP version)

估计是这里出的问题
还没测试,一会出结果

再问下
1、source.cmn这个文件在网上找是
source.cmn该文件是一个BSP的sources的总文件,它会作用于BSP中所有的sources文件,就是说在这里面的设置会被用到BSP所有的sources文件中。

那么我可以在WINCE5下的source.cmn中添加上ADEFINES=-pd "xlli_FLASH_WIDTH_16_BIT SETS  \"1\"" $(ADEFINES)这句吧??
2、我看我的WINCE4下的BSP,大部分环境变量都写在mcore.bat中了,这两个地方(source.cmn和mcore.bat)对环境变量来说有什么区别呢???
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
我在platform->setting中设置了环境变量xlli_FLASH_WIDTH_16_BIT SETS = 1
但是重新sysgen and build 还是不行!!
问题还是在那句上
str    r1,  [r4, #xlli_MSC0_offset]    ; Write the value out
死掉了!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
ding!
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
1. 建議你把該行 str    r1,  [r4, #xlli_MSC0_offset] 先用 ';' 移除, 當 eboot 起來後, 再於 OEMPlatformInit 內將 MSC0 透過 Debug Port 輸出其值, 你再比比看, 跟你的設定值哪裡不同, 再回頭看看 Manual 怎麼寫的, 你就可知為什麼設了不同的值會造成執行失敗了.

2. xlli_FLASH_WIDTH_16_BIT  這跟你的硬體有關, 不能亂設, 要先搞清楚, 你的 Flash 到底是接到 Bus 的 D0-D15 or D0-D31.

3. 你的 xlli_mem_init 是放在 BSP 還是 COMMON 內, sources.cmn 只能改變它的 subfolder 下的 sources 的行為, 也可以說是 subfolder 下所有 sources 的預設值, 若是 sources 沒寫到的東西, 則用 sources.cmn, 若是你每個 folder 的 sources 已經寫明的, 則會蓋掉 sources.cmn 的設定.

4. 就 sources 中的 !IF "$(FLASH_WIDTH_16_BIT)" == "1" 這一行來看, FLASH_WIDTH_16_BIT 這個 flag, 不是在你的 %_TGTPLAT%.bat 內, 就是在你的 .cec file 內會去設定它, 而 sources 根據不同的 FLASH_WIDTH_16_BIT 設定值, 再去設定不同的 ADEFINES & CDEFINES, ADEFINES 影響到你的 *.s, CDEFINES 影響到你的 C/C++ 程式.

Paul, Chao @ Techware

 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 
学习了,
我现在直接把xlli_MSC0_DC_value EQU  (0x7FF07FFA)   
这个值带到ldr  r1,  =xlli_MSC0_DC_value          ; Get MSC0 setting value
这句里
现在可以执行完xlli_mem_init 了
但是还有问题!
我再看看卡在什么地方了!
感谢Paul_Chao!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
问题2已经搞定
总结:
1、修改对应的OEMaddressTable,虽然程序还没走到这,但是早晚需要修改
  注意FLASH和SDRAM大小
2、注意硬件连接方式:FLASH、SDRAM是16位还是32位
  注意其中的一些宏
3、注意LED部分
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表