This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am3358 换uboot版本后uboot跑步起来

Other Parts Discussed in Thread: AM3358

硬件: 自行设计的am3358主板 + AR8031

软件: ubuntu 10.04

uboot版本:1. uboot-2011.09    2. uboot-2013.01(sdk6.0自带的uboot)

问题:   之前用uboot2011.09时,在设置完ddr参数后,上电uboot直接就起来了,串口能正常打印消息。但由于uboot下总是ping

不通host, 提示在cpdma_process()函数中有异常返回。后来论坛上遇到同样问题并解决的的人讲说早期版本的uboot网络驱动有bug,

建议换一个uboot试试。 我下载的am335x sdk6.0,并使用自带的 uboot-2013.01,按照uboot2011.09里配置的DDR参数,但是uboot

起不来,串口打印不出任何消息。对比了一下两个版本的uboot发现差异比较大,但uboot这一块应该我的配置没有错,硬件也不会有问题

因为uboot2011.09已经成功跑起来(只是网络不通),现在暂时没有头绪,各位能有何建议么

  • uboot2013的改动主要是:

    1. 设置ddr参数,uboot2013比uboot2011多一个参数,ZQ_CONFIG,未对其调整,保持uboot2013默认参数。uboot2013比ub2011少配置了3个寄存器,可能不需要配置或者按照复位默认值就可以了,因此我在ub2013也未做处理

    2.根据本论坛置顶帖子屏蔽掉eeprom读写功能

    现在uboot2003跑不起来,请问有何建议,谢谢,盼复

  • 从您的描述来看,该修改的地方应该都改过了。

    请问您起不来的具体现象是什么,是完全没输出吗?

  • 完全起不来,完全打印不出任何东西

    我pc上的调试终端也没有因为uboot改变做任何新的配置,sd卡拷贝uboot2011.09打印的很欢快,拷贝uboot2013.01就完全打印不出消息来了

    就算没有做任何配置或配置出错,是不是MLO运行起来也应该打印 uboot版本呀, 德州仪器呀什么东西的。

    这下把我郁闷坏了,有何良策么?

    或者之前我发帖说am335x 连不上千兆网,2个问题,任意解决一个都好。

    求帮助

    附:现在ddr的配置完全是按照uboot2013.01设置的,它需要配什么寄存器就配什么寄存器,只是改参数,没有多配置也没有少配置。

  • ddr3的配置有几个地方与以前不同的:

    1. 增加了一个zq_config 寄存器

    2.

    ddr.c中的代码为

    void config_ddr_data(int macrono, const struct ddr_data *data) 
    {
     writel(data->datardsratio0, &ddr_reg[macrono]->dt0rdsratio0); 
     writel(data->datawdsratio0, &ddr_reg[macrono]->dt0wdsratio0); 
     writel(data->datawiratio0, &ddr_reg[macrono]->dt0wiratio0);  
     writel(data->datagiratio0, &ddr_reg[macrono]->dt0giratio0); 
     writel(data->datafwsratio0, &ddr_reg[macrono]->dt0fwsratio0); 
     writel(data->datawrsratio0, &ddr_reg[macrono]->dt0wrsratio0); 
     writel(data->datauserank0delay, &ddr_reg[macrono]->dt0rdelays0);
     writel(data->datadldiff0, &ddr_reg[macrono]->dt0dldiff0); 
    }

    board.c 中发现并没有定义以下 #if 0   #endif 中间的寄存器

    static const struct ddr_data ddr3_evm_data = {
     .datardsratio0 = MT41J512M8RH125_RD_DQS,
     .datawdsratio0 = MT41J512M8RH125_WR_DQS,
     .datafwsratio0 = MT41J512M8RH125_PHY_FIFO_WE,
     .datawrsratio0 = MT41J512M8RH125_PHY_WR_DATA,
     .datadldiff0 = PHY_DLL_LOCK_DIFF,
    #if 0
     .datawiratio0 =MT41J512M8RH125_PHY_WRLVL,/*offset: 0xf0*/
     .datagiratio0 =MT41J512M8RH125_PHY_GATELVL,/*offset:0xfc*/
     .datauserank0delay=MT41J512M8RH125_RAND_DELAYS,/*offset:0x134*/
    #endif
    };

    ddr_defs.h中我根据我ddr的配置增加以下定义

    #if 0
    #define MT41J512M8RH125_PHY_WRLVL      0x20
    #define MT41J512M8RH125_PHY_GATELVL     0x20
    #define MT41J512M8RH125_RAND_DELAYS     0x1
    #endif

    不管我加不加上面#if 0 和#endif 之间的定义,串口还是没任何东西出来。也不会打印CCCCCCCCCCC

     

  • board.c 里面有

    if defined(CONFIG_SPI_BUILD) || id defined (#define CONFIG_NOR_BOOT )

    定义debug串口基地址

    endif

    board.c里面也有很多地方需要根据以上两个常量是否定义来决定执行什么程序。我把uboot2013.01所有的代码都加到sourceinsight,

    结果只有判断是否定义,没有真正定义的地方。但如果不定义,很明显,除了上面的debug uart基地址没指定外还有很多程序都不会执行。

    现在问题来了,如果我在board.c #define CONFIG_SPI_BUILD 或#define CONFIG_NOR_BOOT  或者二者都定义,编译的时候就会报错?

    我串口打印不出消息来跟以上的定义有关么

     

     

     

  • winds2001 说:

    board.c 里面有

    if defined(CONFIG_SPI_BUILD) || id defined (#define CONFIG_NOR_BOOT )

    定义debug串口基地址

    endif

    board.c里面也有很多地方需要根据以上两个常量是否定义来决定执行什么程序。我把uboot2013.01所有的代码都加到sourceinsight,

    结果只有判断是否定义,没有真正定义的地方。但如果不定义,很明显,除了上面的debug uart基地址没指定外还有很多程序都不会执行。

    现在问题来了,如果我在board.c #define CONFIG_SPI_BUILD 或#define CONFIG_NOR_BOOT  或者二者都定义,编译的时候就会报错?

    我串口打印不出消息来跟以上的定义有关么

     

    这部分是默认的,你先不要改。

  • Qin工,麻烦移步《

    MLO不能在调试终端打印消息

    》统一在这个帖子进行沟通,谢谢

  • 注释掉rtc32k_enable()即可