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.

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

(担心回复uboot跑步起来的帖子会使得管理员看不见,所以新建此帖)

硬件 :自己设计的板子(参照英蓓特SBC8600B和官网am335xevm)

软件:ubuntu10.04    sdk6.0

现象: uboot2011.09可以运行,串口正常打印消息

              uboot2013.01不能运行,串口不能打印消息

 

之前一直在试是不是新的uboot的ddr参数没有配置好,结果当我用此论坛测试DDR参数的MLO,英贝特SBC8600的MLO(与我的板子DDR厂家型号都不一样)串口都能打印东西出来,打印消息类似

U-Boot SPL 2013.01 (Sep 24 2014 - 21:58:36)
Texas Instruments Revision detection unimplemented

 

因为MLO是在cpu内部sram运行的,会配置debug uart0 ,然后在函数preloader_console_init()中打印以上信息,接着再配置ddr ,因此可以判断就算ddr没有配对,也能打印消息的

所以我认为是MLO文件没有正确运行起来,通常来讲,在串口打印第一个消息之前只有2个外设需要配置,一个是mmc/SD,一个是串口,仔细比对了2个uboot这部分代码的区别,就只有新的uboot里少了一个 {OFFSET(mcasp0_aclkr), (MODE(4) | RXACTIVE)},  /* MMC0_WP */的配置?

以下是新uboot的mmc配置:

static struct module_pin_mux mmc0_pin_mux_sk_evm[] = {
 {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */
 {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */
 {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */
 {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */
 {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */
 {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD */
 {OFFSET(spi0_cs1), (MODE(5) | RXACTIVE | PULLUP_EN)}, /* MMC0_CD */
 {-1},
};

我的编译环境应该没有问题,我的硬件应该至少在MLO运行阶段串口是好的,除此之外,uart的代码新旧uboot差别较大,不过个人感觉应该都没有问题。

今天晚上查的代码没法调试,明天看看。

  • 看你的描述,硬件上面应该是使用的DDR3,而且使用的是MMC0那组mode 0接法的SD卡。目前的使用过程中,你用这个链接里面的MLO,能否成功运行software leveling得到收敛的结果呢?http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/53263.aspx

    串口如果是使用uart0的话,对终端进行输入输出是没问题的吧?

    如果能够得到收敛的结果,那就使用这组参数值进行设置;如果没能得到收敛的结果,那说明没配成功,还需要再查验你的配置,一定要过了这步在进行下一步移植。

    针对你提到的两个版本的uboot问题,我比较关心一点,你对uboot中EEPROM的处理,是怎么做的。在两个版本中,都会通过EEPROM进行设备ID号的识别,从而进行资源的配置,这里就会牵扯到DDR的配置,如果EEPROM的相关配置有问题,你可能根本没有使用DDR3的配置去运行,就无法正常进行配置了。

  • 一并说明给管理员的答复和现在调试找到的问题:

    1.  串口之前不打印东西是因为启动方式为0100 0010 0011 0111  即 mmc0 spi0 uart0 usb0,当插上sd卡,不打印任何东西,拔下卡,可以打印ccc。

    2. 用过software leveling可以得到收敛结果。

    3. sd一直不能启动,因此在保持上述启动方式不变的情况下,通过串口将u-boot-spl.bin和u-boot.img发送到cpu,可以正常运行,而且说明其实ddr应该已经配置成功了。每个部分都会对打印一些消息,如下:

    CCCCCCCC
    U-Boot SPL 2013.01.01 (Sep 26 2014 - 12:13:39)
    Could not probe the EEPROM; something fundamentally wrong on the I2C bus.
    Could not get board ID.
    musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO
    Rx, HB-ISO Tx, SoftConn)
    musb-hdrc: MHDRC RTL version 2.0
    musb-hdrc: setup fifo_mode 4
    musb-hdrc: 28/31 max ep, 16384/16384 memory
    USB Peripheral mode controller at 47401000 using PIO, IRQ 0
    musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO
    Rx, HB-ISO Tx, SoftConn)
    musb-hdrc: MHDRC RTL version 2.0
    musb-hdrc: setup fifo_mode 4
    musb-hdrc: 28/31 max ep, 16384/16384 memory
    USB Host mode controller at 47401800 using PIO, IRQ 0
    CCCxyzModem - CRC mode, 2(SOH)/358(STX)/0(CAN) packets, 5 retries
    Loaded 366036 bytes


    U-Boot 2013.01.01 (Sep 26 2014 - 12:13:39)

    I2C: ready
    DRAM: 512 MiB
    WARNING: Caches not enabled
    Could not probe the EEPROM; something fundamentally wrong on the I2C bus.
    Could not get board ID.
    NAND: 2048 MiB
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    ECC: uncorrectable.
    ECC: uncorrectable.
    ECC: uncorrectable.
    ECC: uncorrectable.
    NAND read from offset 260000 failed -74
    *** Warning - readenv() failed, using default environment

    musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO
    Rx, HB-ISO Tx, SoftConn)
    musb-hdrc: MHDRC RTL version 2.0
    musb-hdrc: setup fifo_mode 4
    musb-hdrc: 28/31 max ep, 16384/16384 memory
    USB Peripheral mode controller at 47401000 using PIO, IRQ 0
    musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO
    Rx, HB-ISO Tx, SoftConn)
    musb-hdrc: MHDRC RTL version 2.0
    musb-hdrc: setup fifo_mode 4
    musb-hdrc: 28/31 max ep, 16384/16384 memory
    USB Host mode controller at 47401800 using PIO, IRQ 0
    Net: PHY reset timed out
    cpsw, usb_ether
    Hit any key to stop autoboot: 0
    U-Boot#

    因此可以判定,uart0的配置是没有问题的。另外,今天我有英贝特的开发板,使用英贝特的uboot都可以在这个板子上通过sd卡启动运行MLO并打印部分消息,使用uboot2011.09的版本也能启动uboot,使用测试ddr参数的MLO也能在这个板子上运行,就是用sdk6.0里面的uboot用sd卡就启动不了(以上方式拨码开关、硬件环境都没有改变)。

    分析了uboot的启动方式,MLO要正确运行需要配置mmc0和uart0,能从uart0启动的方式启动uboot,不能从mmc0(SD)卡的方式启动uboot,似乎就是mmc0的问题。

    检查了2个uboot2011.09和现在使用的uboot2013.01版本,发现mmc0这一块软件的的差别是

    uboot2011.09 (此版本经过修改ddr参数后可以在我的板子上运行uboot,一切正常) mmc0的定义如下

    static struct module_pin_mux mmc0_pin_mux[] = {
    {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */
    {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */
    {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */
    {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */
    {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */
    {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD */
    {OFFSET(mcasp0_aclkr), (MODE(4) | RXACTIVE)}, /* MMC0_WP */
    {OFFSET(spi0_cs1), (MODE(5) | RXACTIVE | PULLUP_EN)},/* MMC0_CD */
    {-1},
    };

    而在2013.01版本中我使用与上面完全一样的的定义。

    硬件上面有一点差别:mcasp0_aclkr (WP脚)官网的板子因为用的mmc,所以定义了这个脚

    我的硬件上:mcasp0_aclkr 没有这个wp脚,但是如果按照上面软件的配置,这个脚是连到 PMIC sleep 脚上去了(有上拉)。

    cd脚官方的板子用的是spi0_cs1,我用的是mcasp0_aclkx。

    我根据硬件,不管把以上引脚怎么定义,时钟不能从sd卡启动uboot。

    但是很奇怪的是,如果是mmc0配置的问题,为什么好几个版本的uboot都能在我的板子上运行,唯独sdk6.0里面的uboot不能运行。

    管理员能从我现在uart0打印出的消息给点意见么,实在是搞晕了。

    谢谢,盼复

  • 补充:eeprom的功能我意见屏蔽掉,是按照帖子《基于AM335x EZSDK06.00.00.00去掉EEPROM验证ID功能》

    http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/68813.aspx

    进行处理的。

  • 补充:附原理图

  • MLO现在起不来有3种可能“
    1. 硬件问题(由于uboot2011.09跑的很好,而且uboot2013.01通过串口也能启动,因此排除硬件问题)
    2. 软件问题:
    1. uart uart配置应该ok,上面的描述也证明了这一点
    2. ddr ddr匹配应该ok,因为uboot可以通过uart正确启动,并可以通过命令行进行交互
    3. mmc0 就只有管脚需要配置,这一块查了很久,应该也没有问题
    4. eeprom 就像管理员说的,有可能这一块没有处理好,导致很多参数都没有到软件里去
    (只有网口和mmc0的配置与eeprom有关,都在mux.c里面,board里面会去配置uart0)

    因此到底我的屏蔽eeprom的代码对不对?我是完全参照《基于am335x sdk6.0去掉EEPROM》的帖子进行了,因为我在打补丁
    前修改过补丁涉及的文件,因此我是手工按照以上pdf修改的,难道改的有错?
    附上修改后的文件,麻烦帮我看看,不慎感激。

  • 应该直接把可以打印的uboot 和不可以打印的uboot上传,就能够 直接对比和找到问题。 。

  • 两版本的uboot差别较大,目前已经就uboot启动到串口打印到ddr配置做了检查了

  • winds2001 说:

    两版本的uboot差别较大,目前已经就uboot启动到串口打印到ddr配置做了检查了

    板子上有网口吗?如果有,可以通过nfs把系统先起来,然后再读读mmc,看能不能读到,如果不能读到,说明是硬件的问题,继续查,如果可以,看看emmc的版本,会不会是超过了那个4g的限制。

  • 这个是自己设计的板子,有网口,

    uboot2011.09  在板子上能正常跑起来,但网络不通

    uboot2013.01 根本就不能跑起来

    硬件感觉没有太大问题,因为有几个uboot都能在这个板子上跑起来,唯独uboot2013.01跑不起来了。而我又想在官方的这个uboot下进行试。

    换uboot就是因为uboot2011.09网络不通。

    我现在用的就是4G的SD卡,请问如何看emmc是不是超过4G的限制?

    实在是找不到问题了。郁闷

  • 目前将从sd卡启动打印不出任何消息的uboot2013.01重新编译后,通过uart0来引导uboot启动的方式可正常启动,并且使用uboot下的mmcinfo命令可以检测到sd卡,打印消息如下:

    CCCCCCC
    U-Boot SPL 2013.01.01 (Sep 29 2014 - 12:34:54)
    musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO
    Rx, HB-ISO Tx, SoftConn)
    musb-hdrc: MHDRC RTL version 2.0
    musb-hdrc: setup fifo_mode 4
    musb-hdrc: 28/31 max ep, 16384/16384 memory
    USB Peripheral mode controller at 47401000 using PIO, IRQ 0
    musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO
    Rx, HB-ISO Tx, SoftConn)
    musb-hdrc: MHDRC RTL version 2.0
    musb-hdrc: setup fifo_mode 4
    musb-hdrc: 28/31 max ep, 16384/16384 memory
    USB Host mode controller at 47401800 using PIO, IRQ 0
    CCCxyzModem - CRC mode, 2(SOH)/356(STX)/0(CAN) packets, 5 retries
    Loaded 364068 bytes


    U-Boot 2013.01.01 (Sep 29 2014 - 12:34:54)

    I2C: ready
    DRAM: 512 MiB
    WARNING: Caches not enabled
    NAND: 2048 MiB
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    *** Warning - readenv() failed, using default environment

    musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO
    Rx, HB-ISO Tx, SoftConn)
    musb-hdrc: MHDRC RTL version 2.0
    musb-hdrc: setup fifo_mode 4
    musb-hdrc: 28/31 max ep, 16384/16384 memory
    USB Peripheral mode controller at 47401000 using PIO, IRQ 0
    musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO
    Rx, HB-ISO Tx, SoftConn)
    musb-hdrc: MHDRC RTL version 2.0
    musb-hdrc: setup fifo_mode 4
    musb-hdrc: 28/31 max ep, 16384/16384 memory
    USB Host mode controller at 47401800 using PIO, IRQ 0
    Net: PHY reset timed out
    cpsw, usb_ether
    Hit any key to stop autoboot: 0
    U-Boot# mmcinfo
    Device: OMAP SD/MMC
    Manufacturer ID: 2
    OEM: 544d
    Name: SD04G
    Tran Speed: 50000000
    Rd Block Len: 512
    SD version 2.0
    High Capacity: Yes
    Capacity: 3.7 GiB
    Bus Width: 4-bit
    U-Boot# mmc dev
    mmc0 is current device
    U-Boot# mmc part

    Partition Map for MMC device 0 -- Partition Type: DOS

    Part Start Sector Num Sectors UUID Type
    1 63 7741377 00811087-01 0c Boot
    U-Boot#
    mc0 is current device
    U-Boot# mmc erase 0 0x100

    MMC erase: dev # 0, block # 0, count 256 ... 256 blocks erase: OK

    就是说在通过串口启动的方式下市可以操作sd卡的。

    现在硬件软件都检测了,到底问题出在什么地方?

    我有2个板子,出现的同一样的现象。

  • 有没有用JTAG单步调试下具体程序是卡在什么地方了?

  • 没有JTAG仿真器,也没有预留jtag接口,咋办

  • 在MLO里面增加GPIO点灯或者GPIO拉高拉低控制。

  • 问题已解决,原来是rtc的问题,board.c里注释掉rtc32k_enable()函数即可运行起来,但暂未明白是何原因。

  • 注释掉rtc32k_enable()即可,暂未查明是何原因