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.

SD boot出错 串口打印Can’t read from device 0



大家好,

功能需求是通过SD烧录code,正常工作从Nand启动,不需要OS。实验小板经过startware单元测试Nand、DDR、SD等功能都是正常的。

SD烧录准备文件:MLO+u-boot.imgboot_ti.binfor Nand boot)、gpio_test_ti.binjust for testing)、uEnv.txt

uboot版本u-boot-2011.09-psp04.06.00.03(非官方原版,经第三方修改)

此种方法在之前做的大板上使用是可以正常烧录的。

现在  在小板上发现问题,串口信息:

#ccccccccc

U-Boot SPL 2011.09 (Mar 25 2015 - 21:00:17)

Texas Instruments Revision detection unimplemented

Booting fron MMC…

OMAP SD/MMC: 0

“”””Can’t read from device 0””

Spl:  fat register err -  -1

### ERROR  ### please  RESET the board ###

 

之前的大板和现在的实验小板原件相同,只有SD的MMC0_SDCD、SDWP脚位不同,不知道u-boot中有没有先判读SDCD、SDWP然后再执行呢?

在u-boot中查了一下错误信息来自 fs/fat/fat.c中第70行的fat_register_device()函数,代码详情如下:

int fat_register_device (block_dev_desc_t * dev_desc, int part_no)

{

unsigned char buffer[SECTOR_SIZE];

   disk_partition_t info;

   if (!dev_desc->block_read)

            return -1;

   cur_dev = dev_desc;

   /* check if we have a MBR (on floppies we have only a PBR) */

   if (dev_desc->block_read(dev_desc->dev, 0, 1, (ulong *)buffer) != 1) {d

            printf("** Can't read from device %d **\n",

             dev_desc->dev);

            return -1;

      }

已排查的怀疑点如下:

  1. 实验板的sysboot设置错误?-------------验证OK 为SD启动
  2. 实验板的SD硬件功能错误?------------------验证OK可读写文件
  3. U-boot中SD代码初始化脚位与实验板不同-------------验证后发现  只有SDCD脚位不同。

不知道此错误信息还有可能是哪些原因?哪位可以指点一下,谢谢!

  • 你好!

    请问你的u-boot中的board/ti/am335x/mux.c中

    关于MMC0的pinmux配置,调用的是static struct module_pin_mux mmc0_no_cd_pin_mux[]

    还是static struct module_pin_mux mmc0_pin_mux[]

    实际硬件连接是怎样的?

  • 您好,

    uboot中MMC0代码为

    #ifdef CONFIG_MMC 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},

     };

    实际硬件连接只有MMC0_WP和MMC0_CD与code中的不同,其余六个是一样的。

     

  • 你的意思是pinmux调用的有CD脚功能的这组pinmux。

    上面附的是与TI源代码一致的配置。而你说的WP和CD脚不同,具体你是如何在代码除修改的?

    实际硬件有无如何连接的?

  • uboot代码是没有改过的,拿过来直接make的。

    我讲的不同是说 小板硬件使用的WP和CD脚位  和   代码中的这两个不同,硬件使用B13、A13 。

    当然这个不同点之前根本没有注意,原因是大板boot成功,没有关注这个

    (但是大板和小板硬件上这两个脚位是相同的,大板却能boot成功,所以失败的原因不在这两个脚位)。

     

    现在在查找问题的时候发现这个情况了,所以想确认下uboot中的这两个脚位应该不起作用。

     

  • CD脚是有关系的。之前遇到的情况是设计中没有CD脚,但u-boot中却调用有CD脚的MMC0配置,会导致SD读写报错。

    但是与你的错误又不同。