【MMC子系统】 二、EMMC协议
【MMC子系统】 二、EMMC协议
1、前言
在上一节,我们知道EMMC
、SD
、SDIO
三种规范都是在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(正常应答类型)
编码长度48bit
,bits 45:40
表示应答相对的命令索引,bit 8:39
表示欲发送设备的状态信息。
② R2(CID CSD寄存器)
编码长度136bit
,CID
寄存器的内容,作为对CMD2
和CMD10
的应答发送。CSD
寄存器内容作为对CMD9
应答发送。并且CID
和CSD
寄存器只有bit 127:1
被发送。
③ R3(OCR寄存器)
编码长度48bit
,OCR
寄存器作为对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
的任何状态,接收 非0XFFFFFFFA
或0XF0F0F0F0
的参数,都作为CMD0
。
4.1.2 验证工作电压及访问模式
EMMC控制器通过发送CMD1
,参数为OCR寄存器
,该寄存器种包含了2bit
的存储器访问模式。
如上,bit[30:29]
表示访问模式,通过CMD1
发送该数据目的是向存储器同步寻址类型。
EMMC设备同时也应以固定模式0x00FF8080
或 0x40FF8080
(如果设备忙)、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
状态时,CMD
和DAT
线路,均变为推拉模式。
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协议的更多相关文章
- Linux内核之mmc子系统-sdio
现在的Linux内核中,mmc不仅是一个驱动,而是一个子系统.这里通过分析Linux3.2.0内核,结合TI的arm335x平台及omap_hsmmcd host分析下mmc子系统,重点关注sdio及 ...
- WebSocket原理与实践(二)---WebSocket协议
WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...
- HslCommunication库的二次协议扩展,适配第三方通讯协议开发,基础框架支持长短连接模式
本文将使用一个gitHub开源的项目来扩展实现二次协议的开发,该项目已经搭建好了基础层架构,并实现了三菱,西门子,欧姆龙,MODBUS-TCP的通讯示例,也可以参照这些示例开发其他的通讯协议,并Pul ...
- Linux 网络子系统之网络协议接口层(二)
这一篇主要围绕网络协议接口层的发送函数的解析 int dev_queue_xmit(struct sk_buff *skb) 函数解析 声明: /* include/linux/netdevice.h ...
- 流媒体学习二-------SIP协议学习(基本场景分析 )
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol) ...
- zigbee学习之路(十二):zigbee协议原理介绍
一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...
- 每周分享之 二 http协议(1)
本次分享http协议,共分为三部分,这是第一部分,主要讲解http的发展历程,各个版本,以及各个版本的特点. 一:http/0.9 最早版本是1991年发布的0.9版.该版本极其简单,只有一个命令GE ...
- [从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议[Paxos算法]
Overview 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议. 为解决分布式一致性问题,在长期的探索过程中 ...
- 【TCP/IP】二、协议的概念
一.概念 1.tcp/ip是通信协议的统称. 2.协议就是计算机与计算机之间通过网络实现通信时,事先达成的一种约定.这种约定,使那些不同厂商的设备,不同的CPU以及不同的操作系统组成的计算机之间,只要 ...
- Linux时间子系统(二) 软件架构
一.前言 本文的主要内容是描述内核时间子系统的软件框架.首先介绍了从旧的时间子系统迁移到新的时间子系统的源由,介绍新的时间子系统的优势.第三章汇整了时间子系统的相关文件以及内核配置.最后描述各种内核配 ...
随机推荐
- 华企盾DSC苹果电脑右键菜单不显示问题
1.检查认证的用户是否给了对应的权限(如:手动加密.手动解密.申请解密) 2.系统偏好设置--键盘--快捷键中开通的权限是否有勾选 3.系统服务中允许的菜单数超出了最大值
- 我的大数据之路 - 基于HANA构建实时方案的历程
产品内部前期有一个共识,依据业务要求的时效性来选择技术平台,即: 实时类业务,时效性小于2小时,则使用HANA构建. 离线类业务,时效性大于2小时,则使用大数据平台构建. 经过五月.六月两月的努力,离 ...
- 文心一言 VS 讯飞星火 VS chatgpt (171)-- 算法导论13.2 4题
四.用go语言,证明:任何一棵含n个结点的二叉搜索树可以通过 O(n)次旋转,转变为其他任何一棵含n个结点的二叉搜索树.(提示:先证明至多n-1次右旋足以将树转变为一条右侧伸展的链.) 文心一言: 这 ...
- Gh0st木马
https://www.secrss.com/articles/50209 Gh0st是一种远程控制软件,它可以在被攻击的计算机上运行并允许攻击者远程控制该计算机.为了查找Gh0st的进程.文件.注册 ...
- Luogu P1298 最接近的分数 做题记录
算是水紫,不过也学到一些有用的东西. 题意 给定正小数 \(N\).求分子不大于 \(n\),分母不大于 \(m\) 的分数 \(\dfrac{n}{m}\),使得 \(\dfrac{n}{m}\) ...
- 【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍
前言: 在之前的项目中,我们已经使用 OpenVINOTM CSharp API 部署 PaddleOCR 全系列模型,但随着PaddleOCRv4版本发布以及OpenVINO CSharp AP ...
- 微短剧市场暴涨267.65%,用微短剧场景AUI Kit精巧入局
微短剧,不仅上头,更要上心. 微短剧,深度"拿捏"了这个碎片化时代,也是刚过去的2023年绕不开的热词. 与传统影视剧制作精益求精.耗时长相反,门槛与耗时"双低" ...
- 从大数据到AI,华为云存储加速企业大模型快速应用
摘要:AI与大数据算法不断发展,在生产中的应用也越来越广,而应用的场景除了对算法,软件架构要求越来越高外,也对底层IaaS(基础设施即服务)提出了新的挑战. AI与大数据算法不断发展,在生产中的应用也 ...
- 从应用看火山引擎 AB 测试 (DataTester) 的最佳实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 本文将从外部用户的角度介绍 A/B 测试平台的最佳实践.分享分为四部分,首先整体介绍 A/B 测试的应用场景,接下 ...
- Axure 母版与元件
需要重复使用的元件,建议创建成母版: 如果修改了母版,所有页面中的母版元件将会被同步修改 元件:添加后,所有的 Axure 都可以使用 母版:只适用当前的 Axure 原型 拖放行为: 任意位置:可以 ...