目录

1. 前言

2. 软件架构

3. 工作流程

4. mmc设备

4.1 mmc type card

4.2 sd type card

4.3 sdio type card

5. mmc协议

5.1 标准mmc卡协议

5.2 emmc协议(主要区别在于读写速度上)

5.3 sd协议

6. SDHC标准

7. 参考文献


1. 前言

由[1]中MMC、SD、SDIO的介绍可知,这三种技术都是起源于MMC技术,有很多共性,因此Linux kernel统一使用MMC framework管理所有和这三种技术有关的设备。

本文将基于[1]对MMC技术的介绍,学习Linux kernel MMC framework的软件架构。

2. 软件架构

Linux kernel的驱动框架有两个要点(尽管本站前面的文章已经多次强调,本文还是要再说明一下,因为这样的设计思想,说一千遍都不会烦):

1)抽象硬件(硬件架构是什么样子,驱动框架就应该是什么样子)。
       2)向“客户”提供使用该硬件的API(之前我们提到最多的客户是“用户空间的Application”,不过也有其它“客户”,例如内核空间的其它driver、其它framework)。

以本文的描述对象为例,MMC framework的软件架构如下面“图片1”所示:

图片1 Linux MMC framework软件架构

MMC framework分别有“从左到右”和“从下到上”两种层次结构。

1) 从左到右

MMC协议是一个总线协议,因此包括Host controller、Bus、Card三类实体(从左到右)。相应的,MMC framework抽象出了host、bus、card三个软件实体,以便和硬件一一对应:

host,负责驱动Host controller,提供诸如访问card的寄存器、检测card的插拔、读写card等操作方法。从设备模型的角度看,host会检测卡的插入,并向bus注册MMC card设备;

bus,是MMC bus的虚拟抽象,以标准设备模型的方式,收纳MMC card(device)以及对应的MMC driver(driver);

card,抽象具体的MMC卡,由对应的MMC driver驱动(从这个角度看,可以忽略MMC的技术细节,只需关心一个个具有特定功能的卡设备,如存储卡、WIFI卡、GPS卡等等)。

2)从下到上

MMC framework从下到上也有3个层次(老生常谈了):

MMC core位于中间,是MMC framework的核心实现,负责抽象host、bus、card等软件实体,负责向底层提供统一、便利的编写Host controller driver的API;

MMC host controller driver位于底层,基于MMC core提供的框架,驱动具体的硬件(MMC controller);

MMC card driver位于最上面,负责驱动MMC core抽象出来的虚拟的card设备,并对接内核其它的framework(例如块设备、TTY、wireless等),实现具体的功能。

3. 工作流程

基于图片1中的软件架构,Linux MMC framework的工作流程如下:

4. mmc设备

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

4.1 mmc type card

(1)标准mmc卡:闪存卡的一种,使用mmc标准。
     (2)emmc:Embedded MultiMediaCard,是MMC协会所制定的内嵌式存储器标准规格,带有mmc接口,是具备mmc协议的芯片。

4.2 sd type card

(1)sd卡:SD卡为Secure Digital Memory Card, 即安全数码卡。它在MMC的基础上发展而来, 增加了两个主要特色:SD卡强调数据的安全安全,可以设定所储存的使用权限,防止数据被他人复制。兼容mmc接口规范。

4.3 sdio type card

(1)sdio设备:SDIO是在SD标准上定义了一种外设接口,它和SD卡规范间的一个重要区别是增加了低速标准。在SDIO卡只需要SPI和1位SD传输模式。低速卡的目标应用是以最小的硬件开销支持低速IO能力。常见的sdio设备有Wi-Fi card、Bluetooth card等等。

注意,这几种类型的card统称为mmc card。

5. mmc协议

类似i2c协议、spi协议,mmc总线上也有一套自己的通讯规范。通信规范后续在说明。
      而上述mmc设备基于上mmc总线通讯规范上由自身硬件特性设置了自己的一套协议。
jedec的协议规范可以去jedec的官网上下载

5.1 标准mmc卡协议

<1> mmc4.0
<2> mmc4.2——《JESD84-B42——MULTIMEDIACARD (MMC) ELECTRICAL STANDARD, HIGH CAPACITY (MMCA, 4.2) 》

5.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) 》

5.3 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》

6. 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,这样的理解有助于后续理解整体的代码架构。

7. 软件框架及说明

7.1 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)》

7.2 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。后续会说明。

7.3 mmc card drivers

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

8. 参考文献

[mmc subsystem] 概念与框架_ooonebook的博客-CSDN博客

Linux内核4.14版本——mmc框架_软件总体架构相关推荐

  1. Linux内核4.14版本——alsa框架分析(1)—alsa简介

    目录 一,ALSA声音编程介绍 二,ALSA历史 三,数字音频基础 四,ALSA基础 五,ALSA体系结构 六,设备命名 七,声音缓存和数据传输 八,Over and Under Run 九,一个典型 ...

  2. Linux内核4.14版本——drm框架分析(1)——drm简介

    目录 1. DRM简介(Direct Rendering Manager) 1.1 DRM发展历史 1.2 DRM架构对比FB架构优势 1.3 DRM图形显示框架 1.4 DRM图形显示框架涉及元素 ...

  3. Linux内核4.14版本——mmc core(3)——host模块

    1. 前言 2. MMC host驱动介绍 3. 主要数据结构 3.1 struct mmc_host 3.2 struct mmc_host_ops 3.2.1 数据传输有关的函数 3.2.2 总线 ...

  4. Linux内核4.14版本——mmc core(7)——mmc core主模块(3)总线io setting相关(struct mmc_ios)

    目录 1. mmc_ios说明 2. mmc_set_ios 3. mmc_set_bus_mode & mmc_set_bus_width 1. mmc_ios说明 struct mmc_i ...

  5. Linux内核4.14版本——alsa框架分析(8)-ASoC(Codec)

    1. 概述 ASOC的出现是为了让Codec独立于CPU,减少和CPU之间的耦合,这样同一个Codec驱动无需修 改就可以适用任何一款平台.还是以下图做参考例子: 在Machine中已经知道,snd_ ...

  6. Linux内核4.14版本——mmc core(10)——mmc core主模块(6)mmc请求相关

    目录 1. 数据结构说明 1.1 struct mmc_command 1.2 struct mmc_data 1.3 struct mmc_request 1.4 struct mmc_async_ ...

  7. Linux内核4.14版本——mmc core(4)——card相关模块(mmc type card)

    目录 1. 简介 1.1 mmc card的几种类型 1.2 mmc子系统如何区分使用哪种card的?(mmc_rescan) 2. mmc type card协议相关操作 3. 一些重要的API函数 ...

  8. Linux内核4.14版本——alsa框架分析(11)——DAPM(2)——widget、route和path的概念

    目录 1. DAPM的基本单元:widget(struct  snd_soc_dapm_widget) 2. widget的种类 3. widget之间的连接器:path(struct snd_soc ...

  9. Linux内核4.14版本:ARM64的内核启动过程(二)——start_kernel

    目录 1. rest_init 2. init 进程(kernel_init) 2.1 kernel_init_freeable 2.1.1 do_basic_setup 2.1.2 prepare_ ...

最新文章

  1. paddle版fnet_google
  2. 单细胞数据初步处理 | drop-seq | QC | 质控 | 正则化 normalization
  3. iptables详解(1):iptables概念
  4. java json path_Java使用JSONPath解析JSON完整内容详解
  5. 【小程序】【Tips】跨页面全局变量的正确方法 - globalData
  6. 利用fiddler给android模拟器抓包
  7. 怎么才能成为一名PHP专家?
  8. java对世界各个时区(TimeZone)的通用转换处理方法
  9. 可以看游资的app_大大游资软件下载
  10. CentOS Mysql安装配置
  11. 数字藏品平台开发数字藏品系统开发技术架构分析
  12. 4. 嵌入式OpenWRT入门基础篇-----设置OpenWRT系统为AP、中继模式
  13. linux sed 替换 斜杠,sed命令替换字符包含斜杠\,引号的处理方法
  14. 11n、11ac和11ax速率表
  15. 数据技术-分析报告如何写
  16. Calculator Conundrum
  17. c语言松树树干如何编程jemg,JE-C编程指南(上)
  18. 分支机构稳定接入 库存信息实时掌握
  19. 耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道····
  20. mysql 批量生成测试数据_mysql生成批量数据进行数据测试

热门文章

  1. 三分钟时间告诉你提词器哪款软件好用
  2. Certbot 安装Let’s Encrypt踩坑记录
  3. 将阿拉伯数字转换为大写汉字
  4. 要被抖音笑死了,打开个网页就算黑客?
  5. 数据分享_SoilGrids世界土壤信息数据
  6. 概率期望——cf round362 div1
  7. 小程序开发API之添加手机通讯录联系人wx.addPhoneContact
  8. 移动端h5页面预览word文档
  9. 国外程序员喜爱的5种文本编辑器
  10. latex排版毕业论文成绩评定表