By: Ailson Jack
Date: 2023.10.21
个人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/160.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。
微信公众号:
嵌入式那些事
下面首先简单的介绍了MMC,SD和SDIO,对这些名词有个概念即可。
从本文开始会重点讲讲eMMC相关的内容(Linux MMC子系统
系列文章介绍的eMMC协议为:eMMC 5.1协议),对eMMC相关的知识有了一定的了解之后,后续文章也会对Linux的MMC子系统做一个介绍,包括MMC子系统的初始化过程,MMC host驱动与host设备是如何匹配的,MMC host驱动的基本框架,MMC驱动和MMC卡设备是如何关联起来的,MMC子系统是如何实现块设备驱动的等等。
对于MMC卡,SD卡或者SDIO接口的设备,Linux MMC子系统
同样适用。
好了,废话不多说,下面开始本文的内容吧。
多媒体卡(MMC)全称Multi Media Card,是由西门子公司和SanDisk公司于1997年推出的多媒体记忆卡标准。MMC卡尺寸为32mm x 24mm x 1.4mm,它将存储单元和控制器一同做到了卡上,这种携带方便、可靠性高、重量轻的数据载体一经推出,市场占有率不断上升,广泛应用于移动电话,数码相机,MP3等产品。
MMC卡具有MMC和SPI两种工作模式,MMC模式是默认工作模式,具有MMC的全部特性。而SPI模式则是MMC协议的一个子集,主要用于低速系统。
SD卡(Secure Digital Memory Card)是一种基于半导体快闪存记忆器的新一代记忆存储设备。SD卡是由松下、东芝和SanDisk公司于1999年8月共同开发的新一代记忆卡标准,已完全兼容MMC标准。SD卡比MMC卡多了一个进行数据著作权保护的暗号认证功能。
SD卡尺寸为32mm x 24mm x 2.1mm,长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存储单元。SD卡与MMC卡保持向上兼容,也就是说,MMC卡可以被新的设有SD卡插槽的设备存取,但是SD卡却不可以被设有MMC插槽的设备存取。
SDIO全称为Secure Digital Input and Output,中文名称为:安全数字输入输出接口。SDIO是在SD标准上定义的一种外设接口,它使用SD的I/O接口来连接外围设备,并通过SD上的I/O数据接口与这些外围设备传输数据。现在已经有很多手持设备支持SDIO接口,而且许多SDIO外设也被开发出来,目前常见的SDIO外设有:WIFI Card、GPS Card、 Bluetooth Card等等。
eMMC卡全称为Embedded Multi Media Card,是MMC协会所制定的内嵌式存储器标准规格。通俗点讲,eMMC就是一个类似于SD卡一样的存储芯片。eMMC主要应用于智能手机和平板电脑等产品。eMMC在封装中集成了一个控制器,提供标准接口来管理闪存,使得产品开发过程中不再需要考虑NAND Flash兼容性问题和管理问题,让产品开发人员能够专注于产品开发,缩短产品推向市场的时间。
eMMC的整体结构如下图所示:
eMMC主要由设备控制器和存储阵列组成。设备控制器主要提供主机接口和存储管理功能。
HOST和eMMC之间的接口连接如下图所示:
HOST和eMMC之间的通信都是以HOST发送一个Command给eMMC开始的,eMMC对于收到的不同Command会做出不同的response,当然了eMMC对于收到的部分Command可以不做response。
聊了这么久的eMMC,到底eMMC长什么样,大多数的eMMC芯片一般是黑色的外观,来欣赏下某厂商的eMMC芯片外观图:
大多数的eMMC芯片一般采用BGA封装,下图是某厂商的BGA封装的eMMC芯片引脚图:
eMMC接口各个引脚的输入输出类型以及相关描述可以参考下图进行理解:
eMMC的存储阵列是由非易失性的存储器组成,目前,绝大多数eMMC芯片内部的存储器都是由Nand Flash组成的。
在智能手机或者其他嵌入式设备中,可以使用eMMC的存储阵列来存放操作系统,应用数据等信息。
eMMC芯片内部的设备控制器具有存储管理功能,主要用于对Nand Flash的管理,包括:擦写均衡,坏块管理,ECC校验等。相比于直接将NAND Flash连接到Host端,采用eMMC芯片屏蔽了NAND Flash的物理特性,可以减少Host端软件的复杂度,让Host端专注于上层业务,省去对NAND Flash进行特殊的处理。同时,eMMC通过使用Cache、Memory Array等技术,在读写性能上也比NAND Flash要好很多。
以前实现的eMMC协议(比如eMMC 4.1协议)采用的是32位域的字节寻址。这种寻址机制限制了eMMC的最大容量为2GB。
为了支持更大容量的eMMC,后续的eMMC协议(比如eMMC 5.1协议)增加了sector寻址方式(1 sector=512B)。容量大于2GB的eMMC,都是采用sector寻址的方式。
为了确定eMMC的寻址模式,主机可以读取eMMC的OCR寄存器,通过OCR寄存器的bit[30:29]可以知道eMMC的寻址模式。
随着eMMC协议的不断更新,eMMC总线的速率越来越高。为了兼容旧版本的eMMC,所有eMMC在上电启动或者Reset后,都会先进入兼容速率模式(Backwards Compatibility with legacy MMC card)。在完成对eMMC的初始化后,Host可以通过特定的流程,让eMMC进入其他高速率模式,目前支持以下几种速率模式。
Extended CSD寄存器的HS_TIMING[185],可以配置总线速率模式。
Extended CSD寄存器的BUS_WIDTH[183],可以配置配置总线宽度和Data Strobe。
在一个时钟周期内,DAT0~DAT7信号线上传输1个比特时,就是SDR(Single Data Rate)模式。
在一个时钟周期内,DAT0~DAT7信号线上传输2个比特时,就是DDR(Double Data Rate)模式。
欢迎关注博主的公众号(微信搜索公众号:嵌入式那些事
),可以扫描下面的公众号二维码:
如果文中有什么问题欢迎指正,毕竟博主的水平有限。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。
排版更好的内容见我博客的地址:http://www.only2fire.com/archives/160.html
注:转载请注明出处,谢谢!^_^