把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。
阅读(1778) | 评论(1) | 转发(0) |