[mmc subsystem] 概念与框架

参考蜗窝科技http://www.wowotech.net/comm/mmc_framework_arch.html

mmc subsystem系列(持续更新中):
[mmc subsystem] 概念与框架
[mmc subsystem] mmc core(第一章)——概述
[mmc subsystem] mmc core(第二章)——数据结构和宏定义说明
[mmc subsystem] mmc core(第三章)——bus模块说明
[mmc subsystem] mmc core(第四章)——host模块说明
[mmc subsystem] mmc core(第五章)——card相关模块(mmc type card)
[mmc subsystem] mmc core(第六章)——mmc core主模块

建议先参考《[mmc subsystem] 概念与框架》和《[mmc subsystem] mmc core(第一章)——概述》对整体有一个了解。

=========================================================================================================

一、概念

1、mmc的概念

mmc有很多种意义,具体如下:

  • mmc
    MultiMedia Card,多媒体存储卡, 但后续泛指一个接口协定(一种卡式),能符合这接口的内存器都可称作mmc储存体。
    主要特性如下:

    • 工作电压:高电压为2.7~3.6 V,低电压为1.65~1.95 V,可选。
  • mmc总线
    mmc总线是和I2C总线、SPI总线类似的一种总线结构。简化系统结构图如下(也可以理解为硬件框架图):


- 卡与主控制器间串行传送,工作时钟频率范围为0~200 MHz。
- mmc总线上最多可识别64 K个mmc设备,在总线上不超过10个卡时,可运行到最高频率。
- 具体总线连接参考《。。。》

  • mmc设备
    使用mmc接口规范(MCI, Multimedia Card Interface)的设备都可以称之为mmc设备。
    又分成三个种类,如下

    • mmc type card
      (1)标准mmc卡:闪存卡的一种,使用mmc标准。
      (2)emmc:Embedded MultiMediaCard,是MMC协会所制定的内嵌式存储器标准规格,带有mmc接口,是具备mmc协议的芯片。
    • sd type card
      (1)sd卡:SD卡为Secure Digital Memory Card, 即安全数码卡。它在MMC的基础上发展而来,增加了两个主要特色:SD卡强调数据的安全安全,可以设定所储存的使用权限,防止数据被他人复制。兼容mmc接口规范。
    • sdio type card
      (1)sdio设备:SDIO是在SD标准上定义了一种外设接口,它和SD卡规范间的一个重要区别是增加了低速标准。在SDIO卡只需要SPI和1位SD传输模式。低速卡的目标应用是以最小的硬件开销支持低速IO能力。常见的sdio设备有Wi-Fi card、Bluetooth card等等。
      注意,这几种类型的card统称为mmc card。
  • mmc协议
    类似i2c协议、spi协议,mmc总线上也有一套自己的通讯规范。通信规范后续在说明。
    而上述mmc设备基于上mmc总线通讯规范上由自身硬件特性设置了自己的一套协议。
    jedec的协议规范可以去jedec的官网上下载

    • 标准mmc卡协议
      <1> mmc4.0
      <2> mmc4.2——《JESD84-B42——MULTIMEDIACARD (MMC) ELECTRICAL STANDARD, HIGH CAPACITY (MMCA, 4.2) 》

    • emmc协议(主要区别在于读写速度上)
      <1> emmc4.41——《JESD84-A44》
      <2> emmc4.5——《JESD84-B45》
      <3> emmc5.0——《JESD84-B50》
      <4> emmc5.1—— 《JESD84-B51——EMBEDDED MULTI-MEDIA CARD (e•MMC), ELECTRICAL STANDARD (5.1) 》

    • sd协议
      <1> SD2.0协议——《SD_Ver2.00_Final_060509》
      <2> SD3.0协议——《SD_Ver3.00_Final_090416》
      <3> SD4.0协议——《SD_Ver4.00_Final_130122》

  • mmc subsystem
    kernel中的mmc subsystem用于管理所有mmc总线控制器以及mmc设备,包括mmc type card(标准mmc卡、emmc)、sd type card(sd卡)、sdio type card。
    也就是说只要使用MCI的设备都交由mmc subsystem统一管理。

2、mmc软件抽象组件的概念

kernel中的mmc subsystem从软件上主要分成三个组件

  • mmc host
    mmc结构中的主机端,对应硬件上mmc controller。主控制器(CPU)通过mmc host来控制mmc设备,包括各种类型的card。
    这也是mmc驱动的主要实现部分。
  • mmc device(mmc card)
    对应硬件上的mmc设备。包括mmc type card、sd type card、sdio type card。
  • mmc core
    mmc core是mmc subsystem的核心实现,用于管理mmc host和mmc device,并提供相应的API。

3、SDHC标准

注意,不同于SDHC\SDXC的概念。这里是指一种标准。
SDHC:Secure Digital(SD) Host Controller,是指一套sd host控制器的设计标准,其寄存器偏移以及意义都有一定的规范,并且提供了对应的驱动程序,方便vendor进行host controller的开发。
vendor按照这套标准设计host controller之后,可以直接使用sdhci driver来实现host controller的使用,(qcom和samsung都使用了这套标准)。而vendor只需要实现平台相关的部分、如clock、pinctrl、power等等的部分即可。
注意,强调一下,这是一种mmc host controller的设计标准,其本质上还是属于mmc host。并且,其兼容mmc type card,而不是说只能使用于sd type card。
后续,我们将这种标准当作一种控制器,也就是把host和controller独立开来。例如高通的sd host使用了sdhc的标准,那么我们可以理解为msm host中包含了sdhci controller,这样的理解有助于后续理解整体的代码架构。

二、软件框架及说明

这里使用wowo的一张图:

(上图摘自蜗窝科技http://www.wowotech.net/comm/mmc_framework_arch.html)

整体大目录路径为drivers/mmc,具体内容如下:

  • mmc core
    对应于代码中的core目录。
    mmc subsystem的实现核心。
    负责抽象和管理mmc host、mmc device、mmc bus,为mmc device抽象出对应的card设备。规范mmc的操作集合。为底层驱动提供统一的接口。同时,也负责部分和card type相关的操作以及协议层的东西。
    具体请参考《[mmc subsystem] mmc core(第一章)——概述》
    如上图所示:mmc core中又分成如下几个模块

    • mmc core主模块,请参考《[mmc subsystem] mmc core(第六章)——mmc core主模块》
    • bus模块,请参考《[mmc subsystem] mmc core(第三章)——bus模块说明》
    • host模块,请参考《[mmc subsystem] mmc core(第四章)——host模块说明》
    • card模块,请参考《[mmc subsystem] mmc core(第五章)——card相关模块(mmc type card)》
  • mmc host drivers
    对应于代码中的host目录。
    主要提供了一系列mmc host的具体实例的driver,例如sdhci-msm(高通)和sdhci-s3c(samsung)。
    这里补充说明,sdhci并不是实际的host驱动,而是上述说明的sdhc标准的host的驱动部分。sdhci-msm和sdhci-s3c都使用了SDHC标准,故会借助sdhci driver(sdhci.c)来实现host。后续会说明。

  • mmc card drivers
    对应于代码中的card目录。
    主要实现驱动mmc core抽象出来虚拟的card,对接其他的模块,实现其实际的功能。
    例如,mmc卡或者emmc是一种存储设备,mmc core会使用card目录中的block来实现mmc卡或者emmc的功能,生成对应的块设备。

你可能感兴趣的:(mmc,mmc,kernel)