SDMMC卡初始化及读写流程介绍.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二、MMC/SD卡的模型和工作原理 PIN脚、SD卡总线、SD卡结构、SD卡寄存器、上电过程 SD卡寄存器: ?OCR:操作电压寄存器: 只读,32位 第31位:?表示卡上电的状态位? ?CID: 卡身份识别寄存器 只读 128位 生产厂商、产品ID,生产日期和串号等? ?CSD: 部分可写 128位 卡的容量、擦出扇区大小、读写最大数据块的大小、读操作的电流、电压等等 ?CSR: 卡配置寄存器 64位 数据位宽? ?RCA: 16位 相关的卡地址寄存器,卡识别过程中主控器和卡协商出来的一个地址? ?三、SD卡命令和响应格式 命令和相应格式 SD卡命令,命令类型,ACMD命令 响应类型、卡类型、卡状态转换表 命令的格式: 48位 起始位0 方向位(host to card: 1, card to host: 0) 内容 CRC7 结束位1·? 响应的格式:48位 或者136位? 卡命令: 命令的类型: ?bc: broadcast without Response?无响应的广播? ?bcr: broadcast with Response?有响应的广播? ?ac: Address(point-to-point) Command:?点对点,DATA0~DATA3数据线上无数据? ?adtc: Adress(point-to-point) Data Transfer Commands 点对点,DATA0~DATA3数据线上有数据 ?CMD0, CMD2, CMD3, CMD55, ACMD41 命令可能会导致卡的状态发生变化? ?响应类型: R1,R1b, R2, R3,R6(SD2.0扩展了R7)? ?扩展内容:? SPI工作模式: 要知道的特点:只支持一个卡,没有RCA,命令只是MMC/SD的基本的子集? ?SDHC:(支持2GB~32GB):理解CMD8的作用,命令格式和响应,了解CSDV2.0寄存器做了扩展   SDIO WIFI: 增加CMD52, CMD53?? CMD8可以通过重新定义先前保留的位,来扩展一些已经存在的命令的新功能。ACMD41扩大到支持高容量SD记忆卡的初始化 上面介绍了一个控制寄存器等信息? 绿色表示sd和mmc的不同点 对于计算卡的容量 要注意 对于sd 卡 可以参考Simplified_Physical_Layer_Spec v2.0.pdf手册上面有 对于mmc ?可以参考JESD84-A441.pdf 注意对于大卡的mmc 是通过发送8号命令 来获取ext_csd ?中的212到215位置来得到的 -S-------------------------------------------------------------------------- ----------------------------------------------------------------- static void sd_init(void) { int retries; u8 *resp; unsigned int cardaddr; / resp = mmc_cmd(2, 0, MSC_CMDAT_RESPONSE_R2, MSC_CMDAT_RESPONSE_R2); //serial_puts( ?SD carsd CID ?=R2= ?); ?serial_dump_data(resp, 15); resp = mmc_cmd(3, 0, MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1); cardaddr = (resp[4] 8) | resp[3]; ?//发生3命令 来或者rca rca = cardaddr 16; //serial_puts(rca=); serial_puts_hex(rca); resp = mmc_cmd(9, rca, MSC_CMDAT_RESPONSE_R2, MSC_CMDAT_RESPONSE_R2); sd2_0 = (resp[14] 0xc0) 6; //serial_puts(sd2_0=====); serial_puts_hex(sd2_0); //serial_puts( ?SD carsd CSD Register =R2= ); ?serial_dump_data(resp, 16); OUTREG16(A_MSC_CLKRT(0), 0); resp = mmc_cmd(7, rca, MSC_CMDAT_BUSY | MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1); resp = mmc_cmd(55,

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档