0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux MMC子系统简介

嵌入式那些事 来源:嵌入式那些事 2023-11-30 13:57 次阅读

前言

下面首先简单的介绍了MMC,SDSDIO,对这些名词有个概念即可。

从本文开始会重点讲讲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 SD SDIO介绍

MMC

多媒体卡(MMC)全称Multi Media Card,是由西门子公司和SanDisk公司于1997年推出的多媒体记忆卡标准。MMC卡尺寸为32mm x 24mm x 1.4mm,它将存储单元和控制器一同做到了卡上,这种携带方便、可靠性高、重量轻的数据载体一经推出,市场占有率不断上升,广泛应用于移动电话,数码相机,MP3等产品

MMC卡具有MMC和SPI两种工作模式,MMC模式是默认工作模式,具有MMC的全部特性。而SPI模式则是MMC协议的一个子集,主要用于低速系统。

SD

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

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

eMMC介绍

eMMC卡全称为Embedded Multi Media Card,是MMC协会所制定的内嵌式存储器标准规格。通俗点讲,eMMC就是一个类似于SD卡一样的存储芯片。eMMC主要应用于智能手机和平板电脑等产品。eMMC在封装中集成了一个控制器,提供标准接口来管理闪存,使得产品开发过程中不再需要考虑NAND Flash兼容性问题和管理问题,让产品开发人员能够专注于产品开发,缩短产品推向市场的时间。

eMMC整体结构

eMMC的整体结构如下图所示:

3432bb26-8f38-11ee-939d-92fbcf53809c.png

Snipaste_2023-10-10_20-35-50

eMMC主要由设备控制器和存储阵列组成。设备控制器主要提供主机接口和存储管理功能。

eMMC主机接口

HOST和eMMC之间的接口连接如下图所示:

345e8f44-8f38-11ee-939d-92fbcf53809c.png

Linux_MMC子系统_eMMC主机接口

eMMC与HOST之间的通信涉及的信号线描述如下:

CLK:时钟线上的每个时钟周期,意味着命令线上传输了1bit命令,或者数据线上完成了1bit或者2bit的数据传输。时钟频率的范围为:0~最大时钟频率。

CMD:该信号线主要用于传输HOST到eMMC的command和eMMC到HOST的response。

DAT0~DAT7:用于传输数据的8bit数据线。在上电或者复位以后,仅仅只有DAT0数据线可以用于数据传输。可以通过eMMC主机控制器来配置eMMC的数据总线位宽,eMMC支持的数据线宽度有:1bit(DAT0),4bit(DAT0~DAT3),8bit(DAT0~DAT7)。

Data Strobe:该信号是从eMMC设备输出给Host的时钟信号,频率和CLK信号相同,用于Host进行接收数据的同步。该信号只在HS400模式下使用,启用后可以提高数据传输的稳定性,省去总线tuning过程。

HOST和eMMC之间的通信都是以HOST发送一个Command给eMMC开始的,eMMC对于收到的不同Command会做出不同的response,当然了eMMC对于收到的部分Command可以不做response。

聊了这么久的eMMC,到底eMMC长什么样,大多数的eMMC芯片一般是黑色的外观,来欣赏下某厂商的eMMC芯片外观图:

3473bfc2-8f38-11ee-939d-92fbcf53809c.png

foresee emmc

大多数的eMMC芯片一般采用BGA封装,下图是某厂商的BGA封装的eMMC芯片引脚图:

34a24068-8f38-11ee-939d-92fbcf53809c.png

Snipaste_2023-10-11_20-16-29

eMMC接口各个引脚的输入输出类型以及相关描述可以参考下图进行理解:

34cebaf8-8f38-11ee-939d-92fbcf53809c.png

Snipaste_2023-10-11_20-28-18

eMMC存储阵列

eMMC的存储阵列是由非易失性的存储器组成,目前,绝大多数eMMC芯片内部的存储器都是由Nand Flash组成的。

智能手机或者其他嵌入式设备中,可以使用eMMC的存储阵列来存放操作系统,应用数据等信息

eMMC存储管理

eMMC芯片内部的设备控制器具有存储管理功能,主要用于对Nand Flash的管理,包括:擦写均衡,坏块管理,ECC校验等。相比于直接将NAND Flash连接到Host端,采用eMMC芯片屏蔽了NAND Flash的物理特性,可以减少Host端软件的复杂度,让Host端专注于上层业务,省去对NAND Flash进行特殊的处理。同时,eMMC通过使用Cache、Memory Array等技术,在读写性能上也比NAND Flash要好很多。

eMMC寻址

以前实现的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,所有eMMC在上电启动或者Reset后,都会先进入兼容速率模式(Backwards Compatibility with legacy MMC card)。在完成对eMMC的初始化后,Host可以通过特定的流程,让eMMC进入其他高速率模式,目前支持以下几种速率模式。

34f3e490-8f38-11ee-939d-92fbcf53809c.png

Snipaste_2023-10-11_21-09-03

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)模式。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 半导体
    +关注

    关注

    334

    文章

    26927

    浏览量

    214925
  • Linux
    +关注

    关注

    87

    文章

    11216

    浏览量

    208763
  • 子系统
    +关注

    关注

    0

    文章

    109

    浏览量

    12376
  • emmc
    +关注

    关注

    7

    文章

    200

    浏览量

    52562

原文标题:Linux MMC子系统 - 1.eMMC简介

文章出处:【微信号:嵌入式那些事,微信公众号:嵌入式那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux下输入子系统上报触摸屏坐标

      在 Linux 中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Ha
    的头像 发表于 09-25 08:56 2380次阅读
    <b class='flag-5'>Linux</b>下输入<b class='flag-5'>子系统</b>上报触摸屏坐标

    Linux LED子系统详解

    Linux LED子系统详解
    的头像 发表于 06-10 10:37 1500次阅读
    <b class='flag-5'>Linux</b> LED<b class='flag-5'>子系统</b>详解

    Windows10内置Linux子系统使用

    周围的同学都已经用win10内置的Linux子系统了,在坚持过几个Linux实验后,我也怀着好奇心试了一把。
    发表于 07-26 07:10

    如何使用Linux内核中的input子系统

    的 input 子系统下提供的 API 函数接口,完成设备的注册即可。在本章节中我们来学习一下如何使用 Linux内核中的 input 子系统
    发表于 12-29 07:20

    s3c2440 mmc和camera的linux驱动

    本站提供的s3c2440 mmc和camera的linux驱动资料,详细讲诉了s3c2440 mmc和camera的linux驱动的步骤,希望对你的学习有所帮助。
    发表于 05-25 15:53 54次下载
    s3c2440 <b class='flag-5'>mmc</b>和camera的<b class='flag-5'>linux</b>驱动

    基于Linux内核输入子系统的驱动研究

    Linux因其完全开放的特性和稳定优良的性能深受欢迎,当推出了内核输入子系统后,更方便了嵌入式领域的驱动开放。介绍了Linux的设备驱动基础,详细阐述了基于Linux内核输入
    发表于 09-12 16:38 23次下载

    Linux内核输入子系统的驱动研究

    Linux内核输入子系统的驱动研究
    发表于 10-31 14:41 14次下载
    <b class='flag-5'>Linux</b>内核输入<b class='flag-5'>子系统</b>的驱动研究

    详细了解Linux设备模型中的input子系统

    linux输入子系统linux input subsystem)从上到下由三层实现,分别为:输入子系统事件处理层(EventHandler)、输入
    发表于 05-12 09:04 1027次阅读
    详细了解<b class='flag-5'>Linux</b>设备模型中的input<b class='flag-5'>子系统</b>

    Embeded linux中的MMC驱动

    Embeded linux中的MMC驱动
    发表于 05-14 16:08 1138次阅读
    Embeded <b class='flag-5'>linux</b>中的<b class='flag-5'>MMC</b>驱动

    Windows 子系统助力 Linux 2.0

    Windows 子系统助力 Linux 2.0
    的头像 发表于 01-04 11:17 620次阅读

    Linux系统中NFC子系统架构分析

    目前在Linux系统中,每个厂家都使用不同的方式实现NFC驱动,然后自己在应用层上面做适配。但是Linux也已经推出NFC子系统,很多厂家也逐步在统一。
    发表于 01-04 14:01 1943次阅读

    linux-usb子系统的核心描述

    本文将描述linux-usb子系统的核心,主要分析其核心的初始化流程,文中源码基于内核版本:4.1.15。
    的头像 发表于 01-14 09:37 2607次阅读

    Linux MMC开发指南

    介绍 Linux 内核中 SD/MMC 子系统的接口及使用方法,为 SD/MMC 设备驱动的开发提供参考。
    的头像 发表于 03-06 10:21 3114次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>MMC</b>开发指南

    Linux内核之LED子系统(一)

    Linux内核的LED子系统是一种重要的框架,用于管理和控制设备上的LED指示灯。在嵌入式系统和物联网设备中,LED子系统发挥着关键作用,为开发者提供了一种统一的方式来控制和定制LED
    发表于 10-02 16:53 1171次阅读
    <b class='flag-5'>Linux</b>内核之LED<b class='flag-5'>子系统</b>(一)

    Linux clock子系统是什么

    clock子系统 Linux的时钟子系统由CCF(common clock framework)框架管理, CCF向上给用户提供了通用的时钟接口,向下给驱动开发者提供硬件操作的接口 。各结构体关系
    的头像 发表于 09-27 14:25 775次阅读
    <b class='flag-5'>Linux</b> clock<b class='flag-5'>子系统</b>是什么