V2.00及以上协议的卡有两种类型:标准SD卡和SDHC卡。由于本驱动支持SDHC卡,在发送ACMD41命令时,将其参数中的HCS域(第30位)置为1。判断语句如下:

SdmmcSendCmd(MMC_APP_CMD,SDmmcCardRca);

SdmmcSendCmd(SD_APP_OP_COND,Ox40ff8000);

if(rSD1RSPO==0xcOff8000){

SdmmcCardType=HC_SD_CARD; /* SDHC CARD */

。..。..;

}

else if(rSDIRSP0 == Ox80ff8000){

SdmmcCardType = SD_CARD;/*S D CARD */

}

由于ACMD41命令为扩展命令.故需要在该命令前面发送MMC_APP_CMD(CMD55)命伽知卡后面紧跟的命令为扩展命令。

若卡不响应CMD8.则有可能是MMC卡或V2.00以下的SD卡。由于SD卡支持ACMD命令.而MMC卡不支持该命令。故当卡能正确响应时.则可判断为SD卡。判断语句如下:

SdmmcSendCmd(MMC_APP_CMD,SdmmcCardRca);

SdmmcSendCmd(SD_APP_OP_COND,OxOOff8000);

if(rSDIRSP0 == 0x80ff8000){

SdmmcCardType = SD_CARD; /* SD卡 */

⋯⋯⋯:

}

在识别完卡的类型后.便可发送CMD2获取卡标识等后续共同的初始化过程.

3.2 卡的读操作

在初始化和识别完成后并被选中后,SD/MMC卡进入传输模式.此时主机可使用读命令来读取卡上数据。每次读操作通常以块(一般为512字节)为单位。MMC卡还可以按字节流的方式读取。若一次读取的数据在一块以内,可使用单块读命令:若超过一块.则应使用多块读命令.此时还应在接收完预期数据后给卡发送停止传输命令(CMDl2)通知卡停止传送数据。

读命令的4字节参数为欲读取数据的地址。MMC卡和SD卡的最大容量为4G,地址以字节为单位,通常与512对齐。SDHC卡的容量为2G-32G,字节地址不能寻址全部空间.此时以块为单位。命令的参数为欲读数据的起始块号。

3.3 卡的写操作

写卡操作也有单块写命令和多块写命令.操作流程与读操作类似。SD/MMC卡接收完主机传送过来的数据之后进入编程状态。卡内部为写操作提供了一个缓存.该缓存使得卡在编程的同时可以接收下一块数据。当该缓存满时.卡从DAT0线输出低电平,表示正处于写的忙状态.否则从DAT0输出高阻态。因此.在往卡发送数据前应检查卡是否处于忙状态。另外,为了提高某些卡的写速度.建议在多读写命令之前发送预擦除命令.预擦除的块数在该命令的参数中给出。

4 结束语

本文的创新点是以SD通信模式实现了一个通用的、能同时支持MMC卡、SD卡和SDHC卡的SD/MMC卡驱动。目前它已被集成到基于FAT文件格式的嵌人式文件系统中.并被成功应用到MP3产品中。

关于接口,总线,驱动就介绍完了,您有什么想法可以联系小编。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查