Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1025467
  • 博文数量: 26
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 437
  • 用 户 组: 普通用户
  • 注册时间: 2019-09-08 12:19
个人简介

关于个人介绍,既然你诚心诚意的看了 我就大发慈悲的告诉你 为了防止世界被破坏 为了维护世界的和平 贯彻爱与真实的邪恶 可爱又迷人的反派角色 我们是穿梭在银河的火箭队 白洞,白色的明天在等着我们

文章分类

分类: 嵌入式

2019-11-13 15:47:16

SD/MMC描述

flash的出现,诞生了MMC, MMC的出现产生了SD,SD的出现造就了SDHC/SDXC以及后面的TF卡,TF卡容易松动造就了eMMC。eMMC和SSD本质一样,都内部含有控制器,只是一个是贴片,一个是硬盘。

注重接口叫sdio,注重卡一侧叫SD/MMC。 sdio支持1bit, spi, 4bit模式;而mmc支持1bit,spi,4bit,8bit模式。物理线主要是CMD,CLK, DATA0-DATA7(8bit,mmc)或者 CMD,CLK,DATA0-DATA3(sdio);在MMC中,通常data1复用为中断线。所有的命令传输都在CMD线上,DATA是双向的主要用于传数据。(工作模式有点类似于spi/i2c总线,只需要实现一个transfer函数功能就可以了(负责指令发送,应答接收,数据接收))

SD 总线协议

SD总线通信是基于指令和数据比特流,起始位开始和停止位结束。数据传输由host发起,comand->response(可选)->data(可选);  SD总线通信有三个元素:

  Command:由host发送到卡设备,使用CMD线发送;

  Response:从card端发送到host端,作为对前一个CMD的相应,通过CMD线发送;

  Data:即能从host传输到card,也能从card传输到host,通过data线传输。

Commands

以下是四种用于控制卡设备的指令类型,每个command都是固定的48位长度:

  1、broadcast commands(bc), no response:广播类型的指令,不需要有响应;

  2、broadcast commands with response(bcr):广播类型的指令且需要响应;

  3、addressed(point-to-point) commands(ac):由HOST发送到指定的卡设备,没有数据的传输;

  4、address(point-to-point) data transfercommands(adtc):由HOST发送到指定的卡设备且伴随有数据传输。

指令格式:

Card register

几个主要的寄存器:OCR,CID,CSD,RCA和SCR。

  Operation condition register(OCR):32位的OCR包含卡设备支持的工作电压表;

  Card identification number register (CID):包含用于在卡识别阶段的卡信息,包括制造商ID,产品名等;

  Card specific data register(CSD):CSD寄存器提供了如何访问卡设备的信息,包括定义了数据格式,错误校验类型,最大访问次数,数据传输率等;

  Relative card address register(RCA):存放在卡识别阶段分配的相对卡地址,缺省相对卡地址为0000h;

  SD card configuration register(SCR):SCR是一个配置寄存器,用于配置SD memory card的特殊功能。

Response

所有的response都通过CMD线发送到host端,R4和R5响应类型是SDIO中特有的:

  1、R1(normal response command):用来响应常用指令;

  2、R2(CID,CSD register):用来响应CMD2和CMD10或CMD9,并把CID或CSD寄存器作为响应数据;

  3、R3(OCR register):用来响应ACMD41指令,并把OCR寄存器作为响应数据;

  4、R6(published RCA response):分配相对卡地址的响应;

  5、R7(card interface condition):响应CMD8,返回卡支持的电压信息;

  6、R4(CMD5):响应CMD5,并把OCR寄存器作为响应数据;

  7、R5(CMD52):CMD52是一个读写寄存器的指令,R5用于CMD52的响应;


参考链接


https://www.cnblogs.com/lihuidashen/p/6112169.html
https://blog.csdn.net/jsn_ze/article/details/50832881

Host 探测SD/MMC指令

Setting 1-bit bus width (设置成1bit模式)
Setting clock 400000 (199999992/512) (设置初始时钟为400khz)
  CMD0 (0x00000300) arg 0x00000000 issue. // 复位
  CMD8 (0x00000408) arg 0x000001aa issue. // 读取版本号,读到就为2.0
  CMD5 (0x00000705) arg 0x01000000 issue. // 设置ocr属性,失败则用CMD1判断是SD还是MMC
       CMD error. INFO2 000000c0                
  CMD1 (0x00000701) arg 0x00000000 issue. // 设置ocr属性,失败则是SD,成功是MMC
       CMD error. INFO2 000000c0

SD初始化:
CMD0 (0x00000300) arg 0x00000000 issue.  // 复位SD
CMD8 (0x00000408) arg 0x000001aa issue.  // 重新读取版本号
while (1s) {

CMD55 (0x00000437) arg 0x00000000 issue. // 配置rca

CMD41 (0x00000729) arg 0x41300000 issue. // 配置电压相关
}

MMC初始化:
CMD0 (0x00000300) arg 0x00000000 issue.  // 复位SD
while (1s) {

CMD1 (0x00000408) arg 0x000001aa issue.  // 设置MMC ocr属性

}

阅读(2585) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~