【MMC子系统】 二、EMMC协议

1、前言

在上一节,我们知道EMMCSDSDIO三种规范都是在MMC规范之上发展而来,协议相差不大,所以Linux Kernel才能使用MMC子系统来统一管理!

下面,我们以MMC协议为例,来了解一下相关协议!

2、EMMC基本了解

2.1 物理线路

物理接口 接口含义
CLK 时钟线,此信号的每一周期控制命令线上的 1 bit 传输,以及所有数据线上 1 bit(1x) 或 2 bit(2x)传输。
CMD 命令线,此信号是双向命令通道,用于设备初始化和命令传输。CMD信号有两种工 作模式:用于初始化模式开漏模式和快速命令传输推拉模式
DAT0-7 这些是双向的数据通道。DAT 信号以推拉模式工作。缺省状态,只有DAT0处于推拉模式,DAT1-7处于上拉(内含上拉),进入4bit后,DAT0-3处于推拉

2.2 EMMC相关寄存器了解

2.3 其他特性了解

  • 读写模式:单块读写,多块读写

  • 寻址方式:字节寻址和扇区寻址,字节寻址允许最大2GB,容量超过2GB的,使用扇区(512B)寻址

  • 电压模式:支持高电压和双电压模式

  • 支持增强分区模式等

3、总线协议

3.1 基础了解

  • 命令:启动一种操作的Token,命令从主机发往设备,在CMD线路上串行传输。

  • 应答:从设备发往主机作为对上一命令的回答的Token,在CMD线路上串行传输。

  • 数据:在主从机之间双向传输,总线宽度可以是1-bit(缺省)、4-bit 和 8-bit

3.2 命令格式

每一个Token,都是由一个起始位(’0’)前导,以一个停止位(’1’)终止。总长度是 48 比特。每一个 Token 都用CRC保护,因此可以检测到传输错误,可重复操作。

命令索引:也就是前面CMDX的0,1,2,3等命令编号。

命令参数:有些命令需要参数,例如地址信息等。

3.3 命令格式

① 无应答广播命令(bc)

② 有应答广播命令(bcr)

③ 点对点寻址命令(ac),无DAT数据

④ 寻址数据传输命令(adtc),有DAT数据

3.4 应答格式

所有的应答均通过命令线CMD发送,编码的长度取决于应答类型,应答Token类型有有 5 种编码方案,分别为R1、R2、R3、R4、R5。Token 长度是 48 或 136 比特。

① R1(正常应答类型)

编码长度48bitbits 45:40 表示应答相对的命令索引,bit 8:39表示欲发送设备的状态信息。

② R2(CID CSD寄存器)

编码长度136bitCID寄存器的内容,作为对CMD2CMD10的应答发送。CSD寄存器内容作为对CMD9应答发送。并且CIDCSD寄存器只有bit 127:1被发送。

③ R3(OCR寄存器)

编码长度48bitOCR寄存器作为对CMD1的应答发送。

④ R4(快速I/O)

编码长度48bit,参数域包含了被寻址设备的RCA、要读写的寄存器地址和内容。

⑤ R5(中断请求)

编码长度48bit,如果应答是主机生成的,参数的RCA应为0。

4、工作模式

主机和设备之间的通信,都由主机控制发起,主机发送命令,引起设备的应答。

EMMC工作模式也定义了5种

  • 引导模式:使设备处于引导状态

  • 设备识别模式:引导模式结束,设备再次模式下,接受SET_RCA命令,进行识别设备。

  • 数据传输模式:分配RCA后,设备进入数据传输模式,准备数据通信

  • 中断模式:主机与设备同时进入,无数据传输,只允许消息来自主机或从机的中断请求

  • 非活动模式:如果设备工作电压范围和访问模式无效,则进入非活动模式。

每一种模式,都有其各自的特点,我们主要来了解一下设备识别过程和数据传输过程。

更多干货可见:高级工程师聚集地,助力大家更上一层楼!

4.1 设备识别模式

乍一看图,肯定大家都一脸懵逼,不仔细分析协议,单看图还是有一定理解难度的。

总体来说,设备识别模式下,主机要想识别到卡,主要步骤有如下几步:

  • 复位设备

  • 验证工作电压及访问模式

  • 识别设备并分配相对设备地址RCA

  • 使设备进入数据传输模式

4.1.1 复位

EMMC控制器通过发送CMD0,参数为0x00000000,使设备进入Idle状态。

同时,为了向后兼容,在除Inactive的任何状态,接收 非0XFFFFFFFA0XF0F0F0F0的参数,都作为CMD0

4.1.2 验证工作电压及访问模式

EMMC控制器通过发送CMD1,参数为OCR寄存器,该寄存器种包含了2bit的存储器访问模式。

如上,bit[30:29]表示访问模式,通过CMD1发送该数据目的是向存储器同步寻址类型。

EMMC设备同时也应以固定模式0x00FF80800x40FF8080(如果设备忙)、0x80FF8080(容量小于等于 2GB)或 0xC0FF8080(容量大于 2GB)应答。

同时,bit31用来判忙,如果为1,说明EMMC设备仍然处于复位过程中,主机也同时重复发送CMD1来确保该忙位清除。

4.1.3 识别设备分配RCA

通过CMD1进行检查后,不符合的设备就进入了Inactive状态。而符合的设备就进入了Ready状态。

进而,EMMC控制器发送CMD2,请求符合要求的设备发送唯一设备标识CID号。CID号对于每一张卡,都是唯一的。

发送CID成功的设备,就进入到了Identification状态。

进而,EMMC控制器发送CMD3,赋予设备一个相对设备地址RCA,从设备一旦接收到RCA,设备就变为Stand-by状态,即空闲态

4.2 数据传输过程

分配完RCA后,从设备接收到RCA,立即处于stand-by状态时,CMDDAT线路,均变为推拉模式。

4.2.1 获取CSD寄存器信息

CMD9:主机发送该命令,以获取设备专用寄存器CSD的数据,如块长度,存储容量,最大时钟速率等。

4.2.2 获取CID寄存器信息

CMD10:主机发送该命令,以获取设备专用寄存器CID的数据,获取设备识别号。

4.2.3 切换为Transfer状态

CMD7:主机发送该命令,选定该设备,使其切换到发送数据状态。

4.2.4 查看EXT_CSD扩展寄存器

CMD8:主机发送该命令,设备作为数据块发送其 EXT_CSD寄存器的数据,设备将数据作为一个512字节的数据块发送。

4.2.5 修改EXT_CSD扩展寄存器的值

CMD6:主机发送该命令,用于切换工作模式,或者修改EXT_CSD寄存器。

CMD6,这个命令,参数的设置有很大讲究呢!

[31:26]:正如手册所写,直接设置为0

[25:24]:访问模式选择,那么访问模式有哪几种呢?

如果 SWITCH 命令用于更换命令集([25:24]为00),Index 和 Value 域被忽略([23:16]、[15:8]忽略),且 EXT_CSD 不会被写。

如果 SWITCH命令用于写 EXT_CSD寄存器,Cmd Set 域被忽略[2:0] 忽略,命令集保持不变。

[23:16]:索引,指的是EXT_CSD寄存器中,所要修改字节的索引。

[15:8]:要写入的值

[2:0]:命令集选择,命令集有如下几种类别,相关手册可以查阅。

举个栗子

如果我们想要操作总线长度,我们该怎么修改呢?

CMD6命令,发送args=03B70200,即可修改。

03:代表访问模式为写字节

B7:转换为十进制183,对应EXT_CSD总线宽度模式的字节。

02:设置该字节的值为02,即8位数据总线

00:写字节访问模式下,该位无效。

4.2.6 读数据

  • 单块读

CMD17:直接发送读命令,参数为要写入的数据地址信息,只读一个块。

  • 多块读

CMD18:直接发送读命令,参数为要写入的数据地址信息,并且一直读下去。

CMD12:停止命令,停止传输。

4.2.7 写数据

确保设备处于发送状态,即主机发送CMD7命令

  • 单块写

CMD24:直接发送写命令,参数为要写入的数据地址信息,只写一个块。

  • 多块写

多块写的模式有两种:

① 一种是:设置要传输的数据块的个数,达到个数后,自动停止

CMD16:设置要传输的块长度

CMD25:开始发送CMD16指定长度的数据块,直到达到设置的数据块写入完成。

②另一种是:一直传输数据,直到接收停止数据的命令

CMD25:开始发送数据块,一直等待数据发送完全

CMD12:停止命令,停止传输。

好啦,到这里我们基本了解了MMC的协议,这也有助于我们去分析EMMC的框架。

【MMC子系统】 二、EMMC协议的更多相关文章

  1. Linux内核之mmc子系统-sdio

    现在的Linux内核中,mmc不仅是一个驱动,而是一个子系统.这里通过分析Linux3.2.0内核,结合TI的arm335x平台及omap_hsmmcd host分析下mmc子系统,重点关注sdio及 ...

  2. WebSocket原理与实践(二)---WebSocket协议

    WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...

  3. HslCommunication库的二次协议扩展,适配第三方通讯协议开发,基础框架支持长短连接模式

    本文将使用一个gitHub开源的项目来扩展实现二次协议的开发,该项目已经搭建好了基础层架构,并实现了三菱,西门子,欧姆龙,MODBUS-TCP的通讯示例,也可以参照这些示例开发其他的通讯协议,并Pul ...

  4. Linux 网络子系统之网络协议接口层(二)

    这一篇主要围绕网络协议接口层的发送函数的解析 int dev_queue_xmit(struct sk_buff *skb) 函数解析 声明: /* include/linux/netdevice.h ...

  5. 流媒体学习二-------SIP协议学习(基本场景分析 )

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol) ...

  6. zigbee学习之路(十二):zigbee协议原理介绍

    一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...

  7. 每周分享之 二 http协议(1)

    本次分享http协议,共分为三部分,这是第一部分,主要讲解http的发展历程,各个版本,以及各个版本的特点. 一:http/0.9 最早版本是1991年发布的0.9版.该版本极其简单,只有一个命令GE ...

  8. [从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议[Paxos算法]

    Overview 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议. 为解决分布式一致性问题,在长期的探索过程中 ...

  9. 【TCP/IP】二、协议的概念

    一.概念 1.tcp/ip是通信协议的统称. 2.协议就是计算机与计算机之间通过网络实现通信时,事先达成的一种约定.这种约定,使那些不同厂商的设备,不同的CPU以及不同的操作系统组成的计算机之间,只要 ...

  10. Linux时间子系统(二) 软件架构

    一.前言 本文的主要内容是描述内核时间子系统的软件框架.首先介绍了从旧的时间子系统迁移到新的时间子系统的源由,介绍新的时间子系统的优势.第三章汇整了时间子系统的相关文件以及内核配置.最后描述各种内核配 ...

随机推荐

  1. 中企网安信息科技:基于数据化大屏的BI数据分析管理系统概述

    由华企网安总公司北京中企网安信息科技有限责任公司开发的<基于数据化大屏的BI数据分析管理系统>,获得国家版权局颁发的计算机软件著作权登记证书. 基于数据化大屏的BI数据分析管理系统利用大数 ...

  2. 独立于 Github,更方便地管理自己的静态网站?来试试这套自托管 Git 仓库方案!

    原文章来自:独立于 Github,更方便地管理自己的静态网站?来试试这套自托管 Git 仓库方案! - Sxrhhh 的个人小站 就在前几天,我成功地将我自己的网站由 wordpress 迁移为了静态 ...

  3. libGDX游戏开发之文理打包(八)

    libGDX游戏开发之文理打包(八) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和googl ...

  4. 完蛋,我被挖矿木马包围了|使用 TLS 连接 Docker

    事故还原 近日,白泽在使用 docker 的时候,开放了防火墙的端口,以 SSH 方式访问远程服务器的 docker 守护进程(无需使用密钥即可建立连接),随后竟遭到了挖矿木马的攻击,好一顿折腾之后, ...

  5. 【技术控请进】华为云DevCloud深色模式开发解读

    引言 近期,华为云DevCloud推出了开发者友好的深色模式,深受开发者们的喜爱和关注.大家都知道,深色模式(Dark Mode)在iOS13 引入该特性后各大应用和网站都开始支持了深色模式.在这之前 ...

  6. 【华为云技术分享】解密如何使用昇腾AI计算解决方案构建业务引擎

    摘要:昇腾AI计算解决方案以极致算力,端边云融合.全栈创新,开放生态的硬核实力.用户可以使用标准的Matrix接口实现业务引擎,对外释放昇腾AI加速能力. 从卷积神经网络中的矩阵乘法(GEMM)说起 ...

  7. LiteOS内核源码分析:位操作模块

    摘要:本文带领大家一起剖析了LiteOS位操作模块的源代码,代码非常简单,参考官方示例程序代码,实际编译运行一下,加深理解. 在进一步分析之前,本文我们先来熟悉下LiteOS提供的辅助功能模块–位操作 ...

  8. 渗透测试 vs 漏洞扫描:差异与不同

    渗透测试和漏洞扫描常常被混淆,这两者都通过探索系统来寻找 IT 基础架构中的弱点及易受攻击的地方.阅读本文,带你了解两者之间的差异与不同. 手动 vs 自动 渗透测试是一种手动安全评估方式,网络安全人 ...

  9. PPT 动画-文字渐入

    插入文字,居中对齐 选中文字,将不透明度调成100%,让文字消失不见

  10. Java 模拟数据库连接池的实现

    前面学习过等待 - 通知机制,现在我们在其基础上添加一个超时机制,模拟从连接池中获取.使用和释放连接的过程.客户端获取连接的过程被设定为等待超时模式,即如果在 1000 毫秒内无法获取到可用连接,将会 ...