Linux MMC子系统 - 1.eMMC简介

news2024/11/18 13:33:22

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 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的整体结构如下图所示:

在这里插入图片描述
eMMC主要由设备控制器和存储阵列组成。设备控制器主要提供主机接口和存储管理功能。

eMMC主机接口

HOST和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芯片外观图:

在这里插入图片描述
大多数的eMMC芯片一般采用BGA封装,下图是某厂商的BGA封装的eMMC芯片引脚图:

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

在这里插入图片描述

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进入其他高速率模式,目前支持以下几种速率模式。

在这里插入图片描述

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

注:转载请注明出处,谢谢!^_^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1117446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA基础-数据类型(2)

目录 1、基本数据类型2、引用数据类型3、类型默认值4、数据类型的转换4.1、自动类型转换4.2、强制类型转换4.3、隐含强制类型转换 1、基本数据类型 :::tips Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一…

C++多重、多层、分层继承

在本文中,您将学习C 编程中的不同继承模型:带有示例的多继承,多层和分层继承。 继承是面向对象编程语言的核心功能之一。它允许软件开发人员从现有的类派生一个新的类。派生类继承基类(现有类)的功能。C 编程中有多种…

逗号表达式

#include<stdio.h> int cmp() {return(2,1); } int main() {int z cmp();printf("%d",z);return 0; } 逗号表达式括号里的优先级是自左向右&#xff0c;最后一个值为最终的结果。

YOLOv5改进实战 | 更换主干网络Backbone(四)之轻量化模型MobileNetV3

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

东信智能:嵌入式内置式身份证阅读器微模块技术参数,和之前的大模块、小模块有什么区别研究

身份证读卡器模块总共分为4种&#xff1a; 1、0503大模块&#xff0c;尺寸大&#xff0c;可读完整信息。 2、0513小模块&#xff0c;尺寸中等&#xff0c;可读完整信息。 3、微模块&#xff0c;尺寸小&#xff0c;只用于比对。 4、SDT88-FR嵌入式模块&#xff0c;尺寸小&am…

“控制情绪,理性交流”刍议

今天&#xff0c;本“人民体验官”还是回避推广人民日报官方微博文化产品《走出低谷期的9个习惯》。 截图&#xff1a;来源“人民体验官”推广平台 ​之前&#xff0c;由于笔者读过《人民日报》曾经发表过的关于“学会管理情绪 ”的文章&#xff0c;对文章中这些观点深表认同&…

DJYOS物联屏:工业HMI里的显控异构计算的超稳定解决方案

1、超稳定性&#xff1a;DJYOS物联屏的超稳定依赖于都江堰泛计算操作系统天然支持多核、多机的异构计算能力&#xff0c;可以一核运行HMI、一核运行控制程序&#xff0c;多核之间可以通过djyos的异构计算去中心化运行&#xff08;确保各自程序不干扰运行&#xff09;&#xff0…

存储器~Zynq book第九章

还有小梅哥和正点原子的一些资料。 DRAM SRAM Cache SDRAM SDRAM学习与实现串口传图-CSDN博客 DDR3

【算法训练-动态规划 零】动态规划解题框架

动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法&#xff0c;只不过在计算机问题上应用比较多&#xff0c;比如说求最长递增子序列呀&#xff0c;最小编辑距离呀等等。 既然是要求最值&#xff0c;核心问题是什么呢&#xff1f;求解动态规划的核心问…

C++ 使用httplib库,发送HTTP请求

简介 C 使用httplib库&#xff0c;发送HTTP请求 接口信息 ip地址 192.168.16.166 端口 8899 接口地址/abc/tk 请求方式GET 响应内容&#xff1a; { “result”: true, “message”: “”, “tk”: “yueguangsaxialexiangshuitan0ihai”, “datetimeout”: “2023-10-22 21…

2023年中国预缩机产量、需求量及市场规模分析[图]

预缩机是一种用于压缩气体的机械设备&#xff0c;通过减小气体的体积&#xff0c;增加气体的压力。预缩机通常由压缩机、电机、冷却系统和控制系统等组成&#xff0c;广泛应用于空调、制冷、工业生产等领域。 预缩机行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研…

LightDM Greeter的启动流程与分析

重要的概念 LightDM Greeter是什么&#xff1f;它是一个登录管理器&#xff0c;用于在Ubuntu或其他基于Linux的操作系统中管理用户登录。它提供了一个图形化用户界面&#xff0c;用户可以在其中输入他们的用户名和密码以及选择登录的桌面环境。LightDM Greeter还提供了可定制的…

设计模式_中介者模式

中介者模式 介绍 设计模式定义案例问题堆积在哪里解决办法中介者代替了多个对象之间的互动 使对象1 2 3 之间的互动 变为&#xff1a; 对象1->中介 对象2->中介 对象3->中介好友之间 约饭好友1 通知 好友2 -3 -4 等等加一个群 谁想吃饭就 通知一下 类图 代码 角色 …

Spring Security认证架构介绍

在之前的Spring Security&#xff1a;总体架构中&#xff0c;我们讲到Spring Security整个架构是通过Bean容器和Servlet容器对过滤器的支持来实现的。我们将从过滤器出发介绍Spring Security的Servlet类型的认证架构。 1.AbstractAuthenticationProcessingFilter AbstractAut…

操作系统——进程互斥的软件实现算法(王道视频p27、课本ch6)

1.总结概览&#xff1a; 2.单标志[turn]法——算法代码&#xff1a; 可能违反“空闲让进” 3.双标志[flag[2]]先检查法——算法代码&#xff1a; 如果不能利用硬件的原语的话&#xff0c;就可能出现违反“忙则等待”的问题: 4.双标志[flag[2]]后检查法——算法代码&#xff1…

RT-Smart 应用开发笔记:fopen 造成文件被清空问题的分析记录

前言 RT-Smart 应用&#xff08;apps&#xff09;开发环境&#xff0c;ubuntu 20.04 win10 VS Code 最近在调试一个问题&#xff0c;需要使用 FILE 的 fopen、fread 等去读取处理一个大文件&#xff0c;为了尽快复现验证问题&#xff0c;随手搜了一下 fopen 等几个 API的用法…

Pytorch搭建DTLN降噪算法

前面介绍了几种轻量级网路结构的降噪做法&#xff0c;本文介绍DTLN—一种时频双核心网络降噪做法。 AI-GruNet降噪算法 AI-CGNet降噪算法 AI-FGNet降噪算法 Pytorch搭建实虚部重建AI-GruNet降噪算法 一、模型结构 DTLN来自[2005.07551] Dual-Signal Transformation LSTM N…

无代码的未来

随着无代码技术越来越成熟&#xff0c;很多web应用已经可以基于无代码平台进行开发。本文分析了4个最流行的无代码平台&#xff0c;并梳理了无代码行业今后可能的发展方向。原文: The future of NoCode 所有无代码编辑器都需要回答的问题 当需要选择无代码解决方案时&#xff0…

小白也能成功搭建网站

随着互联网的快速发展&#xff0c;拥有一个个人网站已经成为了越来越多人的追求。然而&#xff0c;对于编程知识不太了解的小白来说&#xff0c;搭建个人网站似乎是一件很困难的事情。但是&#xff0c;现在有了一个不需要编程的方法&#xff0c;小白也能够轻松建立自己的个人网…

高速DSP系统设计参考指南(六)锁相环(PLL)

&#xff08;六&#xff09;锁相环&#xff08;PLL&#xff09; 1.模拟锁相环2.数字锁相环3.PLL隔离技术 系统设计人员需要隔离PLL&#xff0c;使其免受内部和外部噪声的影响。PLL通常用作频率合成器&#xff0c;将输入时钟乘以一个整数。该整数是反馈计数器M除以输入计数器N的…