免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7563 | 回复: 13

[BootLoader] uboot 初始化内存的时候挂掉,不知道什么原因,迷茫中 [复制链接]

论坛徽章:
0
发表于 2013-11-26 23:45 |显示全部楼层
U-Boot 2013.01 (Nov 25 2013 - 21:19:0

CPU:   8536, Version: 1.2, (0x80370092)
Core:  E500, Version: 3.0, (0x80210030)
Clock Configuration:
       CPU0:1333.320 MHz,
       CCB:533.328 MHz,
       DDR:266.664 MHz (533.328 MT/s data rate) (Synchronous), LBC:33.333 MHz
L1:    D-cache 32 kB enabled
       I-cache 32 kB enabled
Board: ******ATCI  MPC8536 COME COMPUTER MODULE****
uboot >>>>>>>>>>stop againI2C:   ready
SPI:   ready
DRAM:  Detected UDIMM M471B2873FHS-CH9  
FSLDDR: cs[0]_config = 0x80044202
FSLDDR: cs[0]_config_2 = 0x00000000
FSLDDR: cs[1]_config = 0x00000000
FSLDDR: cs[1]_config_2 = 0x00000000
FSLDDR: timing_cfg_0 = 0x40110104
FSLDDR: timing_cfg_3 = 0x00010000
FSLDDR: timing_cfg_1 = 0x4a496646
FSLDDR: timing_cfg_2 = 0x0528ccc8
FSLDDR: ddr_cdr1 = 0x00000000
FSLDDR: ddr_cdr2 = 0x00000000
FSLDDR: ddr_sdram_cfg = 0xc7000000
DDR: ddr_data_init = 0xdeadbeef
FSLDDR: ddr_sdram_cfg_2 = 0x24401050
FSLDDR: ddr_sdram_mode = 0x00441011
FSLDDR: ddr_sdram_mode_2 = 0x00000000
FSLDDR: ddr_sdram_interval = 0x08200100
FSLDDR: clk_cntl = 0x03800000
FSLDDR: timing_cfg_4 = 0x00220001
FSLDDR: timing_cfg_5 = 0x01401400
FSLDDR: zq_cntl = 0x89080600
FSLDDR: wrlvl_cntl = 0x8675f608
FSLDDR: wrlvl_cntl_2 = 0x00000000
FSLDDR: wrlvl_cntl_3 = 0x00000000
1 GiB (DDR3, 64-bit, CL=5, ECC off)
Top of RAM usable for U-Boot at: 40000000
Reserving 780k for U-Boot at: 3ff30000
Reserving 1032k for malloc() at: 3fe2e000
uboot >>>>>>>>>>stop again

以上是我的uboot打印信息,在初始化SDRAM的时候,到了预留一块malloc空间后就挂掉了,后面的板级信息空间、全局数据的申请都没过去,这是为什么?不知道哪里出问题了?我用的处理器是mpc8536,内存用的是三星的DDR3 1G 1333M。大家看到了尽情猜测问题会在哪,小弟先在此谢过。还有这个硬件电路时自己设计的,是不是以上信息可以说明DDR3内存部分电路设计正确了?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2013-11-27 21:18 |显示全部楼层
是不是memory layout有冲突

论坛徽章:
0
发表于 2013-11-28 10:27 |显示全部楼层
这个layout冲突怎么检查,难道要用仿真?回复 2# arm-linux-gcc


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2013-11-28 15:18 |显示全部楼层
直接看代码,memory layout各个段的地址是写死的,检查堆、栈的地址和data text bss有没有冲突

论坛徽章:
0
发表于 2013-11-28 21:02 |显示全部楼层
我现在能确定的是uboot运行到这个函数memset(bd, 0, sizeof(bd_t));时有问题,查了这个函数是给分配的内存清零,感觉涉及到了对内存的硬件操作,难道是布线有问题???回复 4# arm-linux-gcc


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2013-11-29 12:53 |显示全部楼层
应该不是,你的代码应该是在ram里跑的吧?如果布线有问题,就根本跑不起来
有可能是bd和栈的地址有冲突,于是memset把栈给清零了,这样在返回时程序就飞掉了

论坛徽章:
1
技术图书徽章
日期:2013-10-29 15:46:41
发表于 2013-11-29 13:24 |显示全部楼层
直觉是硬件问题,uboot在norflash跑的吧

论坛徽章:
0
发表于 2013-11-29 16:15 |显示全部楼层
是在nor flash跑的,刚加了代码,给某个内存地址写数据,结果运行到给0x3fe6dfa0地址全写零*zq = 0x00000000;就过不去了。我怀疑会不会是DDR控制器的寄存器有问题,导致时序出现错误写不了,但是这个是直接从SPD读出的,应该问题不大。要是硬件的问题的话,就不知道怎么看DDR3的信号线了,刚才用示波器看了写使能MWE#信号,貌似没捕捉到什么,蛋疼了
ulong *zq; /*zq*/
        addr_sp -= sizeof(bd_t);
       zq = (ulong*)0x3fe6dfa0;
       *zq = 0x00000000;
printf("number1 at: %08lx\n",
               *zq);/*zq*/
      *zq = 0xffffffff;
printf("number2 at: %08lx\n",
               *zq);/*zq*/
回复 7# zj47596731


   

论坛徽章:
0
发表于 2013-11-29 16:18 |显示全部楼层
代码还没搬到ram中去,还在分配内存阶段,地址应该是没冲突的,我把memset注释掉之后,就接着往下分配gd什么的回复 6# arm-linux-gcc


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2013-11-29 21:05 |显示全部楼层
本帖最后由 arm-linux-gcc 于 2013-11-29 21:08 编辑

变量ulong *zq也是在内存里面,如果ddr timing有问题,那么zq = (ulong*)0x3fe6dfa0;这一句就应该过不了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP