⑳tiny4412 Linux驱动开发之MMC子系统驱动程序

本次我们来说一下MMC子系统的控制器的开发部分,这部分也是和硬件平台相关的,在说这个之前,我们先来了解一下相关硬件的基础知识和概念.

MMC
MMC全称MultiMedia Card,由西门子公司和SanDisk公司1997年推出的多媒体记忆卡标准。MMC卡尺寸为32mm x24mm x 1.4mm,它将存贮单元和控制器一同做到了卡上,智能的控制器使得MMC保证兼容性和灵活性。MMC卡具有MMC和SPI两种工作模式,MMC模式是默认工作模式,具有MMC的全部特性。而SPI模式则是MMC协议的一个子集,主要用于低速系统。


SD
SD卡全称Secure DigitalMemory Card,由松下、东芝和SanDisk公司于1999年8月共同开发的新一代记忆卡标准,已完全兼容MMC标准。SD卡比MMC卡多了一个进行数据著作权保护的暗号认证功能,读写速度比MMC卡快4倍。SD卡尺寸为32mm x 24mm x2.1mm,长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。SD卡与MMC卡保持向上兼容,也就是说,MMC卡可以被新的设有SD卡插槽的设备存取,但是SD卡却不可以被设有MMC插槽的设备存取。


SDIO
SDIO全称Secure DigitalInput and Output Card,SDIO是在SD标准上定义了一种外设接口,它使用SD的I/O接口来连接外围设备,并通过SD上的I/O数据接口与这些外围设备传输数据。现在已经有很多手持设备支持SDIO功能,而且许多SDIO外设也被开发出来,目前常见的SDIO外设有:WIFI Card、GPS Card、Bluetooth Card等等。


eMMC
eMMC全称Embedded MultiMediaCard,是MMC协会所制定的内嵌式存储器标准规格,主要应用于智能手机和移动嵌入式产品等。eMMC是一种嵌入式非易失性存储系统,由闪存和闪存控制器两部分组成,它的一个明显优势是在封装中集成了一个闪存控制器,它采用JEDEC标准BGA封装,并采用统一闪存接口管理闪存。eMMC结构由一个嵌入式存储解决方案组成,带有MMC接口、快闪存储设备及主控制器,所有这些由一个小型BGA封装。由于采用标准封装,eMMC也很容易升级,并不用改变硬件结构。eMMC的这种将Nand Flash芯片和控制芯片封装在一起的设计概念,就是为了简化产品内存储器的使用,客户只需要采购eMMC芯片放进产品中,不需要处理其它复杂的Nand Flash兼容性和管理问题,减少研发成本和研发周期。

本次是以SD卡拔插做为实验对象,所以,这里详细讲一下SDIO和SD卡的基础.SDIO是一种应用很广泛的接口,下面给出一张图清晰地表明了这一点:

SD卡物理结构

一张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5个部分,存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输:电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位:卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器;接口驱动器控制SD卡引脚的输入输出。

SD卡总共有8个寄存器,用于设定或表示SD卡信息,参考下表,这些寄存器只能通过对应的命令访问,对SD卡进行控制操作并不是像操作控制器GPIO相关寄存器那样一次读写一个寄存器的,它是通过命令来控制,SDIO定义了64个命令,每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。

名称 bit宽度 描述
CID 128 卡识别号(Card identification number):用来识别的卡的个体号码(唯一的)
RCA 16 相对地址(Relative card address):卡的本地系统地址,初始化时,动态地由卡建议,主机核准。
DSR 16 驱动级寄存器(Driver Stage Register):配置卡的输出驱动
CSD 128 卡的特定数据(Card Specific Data):卡的操作条件信息
SCR 64 SD配置寄存器(SD Configuration Register):SD卡特殊特性信息
OCR 32 操作条件寄存器(Operation conditions register)
SSR 512 SD状态(SD Status):SD卡专有特征的信息
CSR 32 卡状态(Card Status):卡状态信息

SDIO总线

1).总线拓扑

SD卡一般都支持SDIO和SPI这两种接口,共3种模式,分别是4bit模式,1bit模式和SPI模式,SD卡总线拓扑参考下图。虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独SD总线应该连接一个单独的SD卡。

SD卡使用9-pin接口通信,其中3根电源线、1根时钟线、1根命令线和4根数据线,具体说明如下:

●CLK:时钟线,由SDIO主机产生;  
●CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答(响应),SD卡也是通过该线传输应答信息;
●D0-3:数据线,传输读写数据:SD卡可将D0拉低表示忙状态; 
●VDD、VSS1、VSS2:电源和地信号。

SDIO不管是从主机控制器向SD卡传输,还是SD卡向主机控制器传输都只以CLK时钟线的上升沿为有效。SD卡操作过程会使用两种不同频率的时钟同步数据,一个是识别卡阶段时钟频率FOD,最高为400kHz,另外一个是数据传输模式下时钟频率FPP,这个频率按MHz来计算,可以通过配置寄存器的方式修改.

2).SDIO传输模式

SPI mode, 1-bit mode, 4-bit mode.

Pin# SD 4-bit Mode SD 1-bit Mode SPI Mode
1 CD/DAT[3] Data Line 3 N/C Not Used CS Card Select
2 CMD Command Line CMD Command Line DI Data Input
3 VSS1 Ground VSS1 Ground VSS1 Ground
4 VDD Supply Voltage VDD Supply Voltage VDD Supply Voltage
5 CLK Clock CLK Clock SCLK Clock
6 VSS2 Ground VSS2 Ground VSS2 Ground
7 DAT[0] Data Line 0 DATA Data Line DO Data Output
8 DAT[1] Data Line 1/Interrupt IRQ Interrupt IRQ Interrupt
9 DAT[2] Data Line 2/Read Wait RW Read Wait NC Not Used

3).总线协议

SD总线通信是基于命令和数据传输的。通讯由一个起始位(“0”),由一个停止位(“1”)终止。SD通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与.SD总线的基本交互是命令与响应交互.

SD数据是以块(Black)形式传输的,SDHC卡数据块长度一般为512字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要CRC位来保证数据传输成功。CRC位由SD卡系统硬件生成。HOST控制器可以控制使用单线或4线传输,本开发板设计使用4线传输下图为主机向SD卡写入数据块操作示意:

SD数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测SD卡忙状态,因为SD卡在接收到数据后编程到存储区过程需要一定操作时间。SD卡忙状态通过把D0线拉低表示。数据块读操作与之类似,只是无需忙状态检测.使用4数据线传输时,每次传输4bit数据,每根数据线都必须有起始位、终止位以及CRC位,CRC位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过D0线反馈给主机.SD卡数据包有两种格式,一种是常规数据(8bit宽),它先发低字节再发高字节,而每个字节则是先发高位再发低位,4线传输示意如下图.

4线同步发送,每根线发送一个字节的其中两个位,数据位在四线顺序排列发送,DAT3数据线发较高位,DAT0数据线发较低位。另外一种数据包发送格式是宽位数据包格式,对SD 卡而言宽位数据包发送方式是针对SD卡SSR(SD状态)寄存器内容发送的,SSR寄存器总共有512bit,在主机发出ACMD13命令后SD卡将SSR寄存器内容通过DAT线发送给主机。宽位数据包格式见下图:

4).命令

SD命令由主机发出,以广播命令和寻址命令为例,广播命令是针对与SD主机总线连接的所有从设备发送的,寻址命令是指定某个地址设备进行命令传输。

3.1 命令格式

SD命令格式固定为48bit,都是通过CMD线连续传输的(数据线不参与),见下图:

SD 命令的组成如下:
●起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为0,终止位为1。
●传输标志:用于区分传输方向,该位为1时表示命令,方向为主机传输到SD卡,该位为0时表示响应,方向为SD卡传输到主机。
命令主体内容包括命令、地址信息/参数和CRC 校验三个部分。
●命令号:它固定占用6bit,所以总共有64个命令(代号CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于SD卡操作,只是专门用于MMC卡或者SD I/O卡。
●地址/参数:每个命令有32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址。
●CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。

3.2 命令类型

SD命令有4种类型:  
●无响应广播命令(bc),发送到所有卡,不返回任务响应;
●带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;
●寻址命令(ac),发送到选定卡,DAT线无数据传输;
●寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。

另外,SD卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令:特定应用命令(ACMD)和常规命令(GEN_CMD)。要使用SD卡制造商特定的ACMD命令如ACMD6,需要在发送该命令之前无发送CMD55命令,告知SD卡接下来的命令为特定应用命令。CMD55命令只对紧接的第一个命令有效,SD卡如果检测到CMD55之后的第一条命令为ACMD则执行其特定应用功能,如果检测发现不是ACMD命令,则执行标准命令。

3.3 命令描述

SD卡系统的命令被分为多个类,每个类支持一种“卡的功能设置”。下表列举了SD卡部分命令信息,更多详细信息可以参考SD简易规格文件说明,表中填充位和保留位都必须被设置为0.虽然没有必须完全记住每个命令详细信息,但越熟悉命令对后面编程理解非常有帮助。

命令序号 类型 参数 响应 缩写 描述
        基本命令(Class 0)
CMD0 bc [31:0]填充位 - GO_IDLE_STATE 复位所有的卡到idle状态
CMD2 bcr [31:0]填充位 R2 ALL_SEND_CID 通知所有卡通过CMD线返回CID值
CMD3 bcr [31:0]填充位 R6 SEND_RELATIVE_ADDR 通知所有卡发布新RCA
CMD4 bc [31:16]DSR[15:0]填充位 - SET_DSR 编程所有卡的DSR
CMD7 ac [31:16]RCA[15:0]填充位 R1b SELECT/DESELECT_CARD 选择/取消选择RCA 地址卡
CMD8 bcr

[31:12]保留位

[11:8]VHS[7:0]检查模式

R7 SEND_IF_COND 发送SD卡接口条件,包含主机支持的电压信息,并询问卡是
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值