Chinaunix首页 | 论坛 | 博客
  • 博客访问: 547854
  • 博文数量: 105
  • 博客积分: 3274
  • 博客等级: 中校
  • 技术积分: 1161
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-21 12:14
文章分类

全部博文(105)

文章存档

2011年(1)

2010年(104)

分类: LINUX

2010-09-14 20:22:49

 
0
把SPI模式的SD卡协议简单的看了下,知道SD卡的初始化过程,读写数据是怎么回事了。

然后跟踪SD卡的初始化,发现SD卡复位,进入IDLE模式都没问题,而问题是出在获取CID上,程序如下:
static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
        struct mmc_card *oldcard)
{
                省略
        ----------------

        err = mmc_send_if_cond(host, ocr);
        if (!err)
                ocr |= 1 << 30;

        err = mmc_send_app_op_cond(host, ocr, NULL);
        if (err)
                goto err;

        /*
         * For SPI, enable CRC as appropriate.
         */
        if (mmc_host_is_spi(host)) {
                //err = mmc_spi_set_crc(host, use_spi_crc);
                err = mmc_spi_set_crc(host, 0);  //zhh

                if (err)
                        goto err;
        }

        /*
         * Fetch CID from card.
         */
        if (mmc_host_is_spi(host))
    {      
        err = mmc_send_cid(host, cid);      
    }               
        else
                err = mmc_all_send_cid(host, cid);
        if (err)
                goto err;
-----------------------------
省略               
}
于是猜想会不会是spi加了ECC的原因,网上有位高手说SPI模式的SD卡加ECC是自讨苦吃,于是我把ECC去掉了,程序上面红色部分。

然后就成功了。

查看dev是179 0
然后mknod
试了下,OK。
阅读(1730) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-15 14:57:52

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com