emmc驱动修改_MT2502的SD卡驱动改成EMMC卡驱动出问题了

有没有对EMMC/MMC/SD熟悉的人帮忙看一下,非常感谢!

初始化过程:1、发送CMD0,arg = 0x0; // 复位2、一直发送CMD1,arg = 0x40ff8080; // 直到收到0xc0ff8080(OCR寄存器),即收到外设没有busy为止3、发送CMD2,arg = 0x0; // 获取CID寄存器的信息,值为(0xc05d51d3)(0x52011f7a)(0x574d4233)(0x15010038)&nBSP;  ID = 0x15与实际的EMMC的ID一致;4、发送CMD3,arg = 0X20000; // 分配一个地址0x2给外设,5、发送CMD9,arg = 0x20000; // 通过分配的地址,获取设备的CSD寄存器的值;值为(0x8e40400d)(0xf6dbffef)(0x0f5903ff)(0xd0270132)6、发送CMD7,arg = 0x20000; // 选择外设7、// 由于发送CMD8,MSDC_STA状态位里的FIFO empty并没有被清掉,没办法从DAT里面读取EXT_CSD寄存器的值,但不影响读写吧8、发送CMD16,arg = 0x200; // 设置block len为512

这时状态已经切换为trans状态了,按道理,是可以进行读写操作了;用默认的1线做以下测试:

/* 写过程(测试1)*/// 因为一个block len的长度为512字节,直接写一个block吧9、发送CMD24,arg = 0x0; // 在地址为0开始写,写一个block10、往寄存器里面写数据,写到56*4个字节之前,就不能再往寄存器里面写了,寄存器状态变了FULL了。

/* 既然一次不能写太多到寄存器里面,就写少一点吧(测试2)*/11、发送CMD16,arg = 0x8; // 设置block len为8个byte12、发送CMD24,arg = 0x0; // 在地址为0开始写发送完CMD24后,在命令线上直接返回0x20000900,意思是设置block len错误

/* 读操作 (测试3)*/13、发送CMD17后,主机的FIFOCNT既然有数据,就开始读取一个block的数据,512个byte,好开心,没报错;结果读到的数据全是0,肯定哪里有问题了;

请问:1、往主机的DAT里面写56*4个字节后,就满了,block len为512byte,怎么写?2、为何设置了block len不等于512时,如设置为0x8(测试2),发送CMD24就会报block len设置错误?3、读512个字节全是0,是我的操作有问题?

帮忙看一下,非常感谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值