【MMC驱动开发】——EMMC协议速览
时间:2023-11-07 04:07:02
EMMC协议速览
文章目录
- EMMC协议速览
-
- 1. EMMC基本了解
-
- 1.1 物理线路:
- 1.2 EMMC了解相关寄存器
- 1.3 了解其他特征
- 2、总线协议
-
- 2.1 基础了解
- 2.2 命令格式
-
- ① 广播命令没有响应(bc)
- ② 响应广播命令(bcr)
- ③ 点对点寻址命令(ac),无DAT数据
- ④ 搜索数据传输命令(adtc),有DAT数据
- 2.3 应答格式
-
- ① R(正常应答类型)
- ② R2(CID CSD寄存器)
- ③ R3(OCR寄存器)
- ④ R4(快速I/O)
- ⑤ R5(中断请求)
- 3、工作模式
-
- 3.1 设备识别模式
-
- 3.1.1 复位
- 3.1.2 验证工作电压和访问模式
- 3.1.3 识别设备分配RCA
- 3.2 数据传输过程
-
- 3.2.1 获取CSD寄存器信息
- 3.2.2 获取CID寄存器信息
- 3.2.3 切换为Transfer状态
- 3.2.4 查看EXT_CSD扩展寄存器
- 3.2.5 修改EXT_CSD扩展寄存器的值
- 3.2.6 读数据
- 3.2.7 写数据
EMMCV4.5 亦或V5.1.协议可以说是很多,刚接触的人很容易抓不住重点,或者分析不到位。这里主要总结一些重要的和常用的EMMC协议。
1. EMMC基本了解
1.1 物理线路:
物理接口 | 接口含义 |
---|---|
CLK | 该信号的每个周期控制时钟线命令线上的 1 bit 传输,一切数据线上 1 bit(1x) 或 2 bit(2x)传输。 |
CMD | 该信号是设备初始化和命令传输的双向命令通道。CMD信号有两种工作 模式:初始模式开漏模式以及快速命令传输推拉模式。 |
DAT0-7 | 这些都是双向数据通道。DAT 信号以推拉模式工作。缺乏状态,只有DAT0在推拉模式下,DAT1-7处于上拉(含上拉),进入4bit后,DAT0-3处于推拉 |
1.2 EMMC了解相关寄存器
1.3 了解其他特征
-
读写模式:单读写,多读写
-
寻址方式:字节搜索和扇区搜索,字节搜索允许最大2GB,容量超过2GB使用扇区(512B)寻址
-
电压模式:支持高压和双压模式
-
支持分区模式的增强
2、总线协议
2.1 基础了解
- 命令:启动一个操作Token,命令从主机到设备,在CMD线路串行传输。
- 应答:从设备到主机作为上一个命令的答案Token,在CMD线路串行传输。
- 数据:主从机之间双向传输,总线宽度可为1-bit(缺省)、4-bit 和 8-bit
2.2 命令格式
每一个Token,都是由一个起始位(‘0’)前导,以停止位(‘1’)终止。总长度是 48 比特。每一个 Token 都用CRC因此,可以检测到传输错误,可以重复操作。
命令格式可分为四种模式:
① 广播命令没有响应(bc)
② 响应广播命令(bcr)
③ 点对点寻址命令(ac),无DAT数据
④ 搜索数据传输命令(adtc),有DAT数据
命令索引
:也就是前面CMDX0、1、2、3等命令号。
命令参数
:有些命令需要参数,如地址信息。
2.3 应答格式
所有响应均通过命令线CMD编码的长度取决于应答类型和应答类型Token
类型有有 5 种编码方案,分别是R1、R2、R3、R4、R5。Token
长度是 48 或 136 比特。
① R(正常应答类型)
编码长度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
作为正确的寄存器CD1
的应答发送。
④ R4(快速I/O)
编码长度48bit
,参数域包含了被寻址设备的RCA
、要读写的寄存器地址和内容。
⑤ R5(中断请求)
编码长度48bit
,如果应答是主机生成的,参数的RCA应为0。
3、工作模式
主机和设备之间的通信,都由主机控制发起,主机发送命令,引起设备的应答。
EMMC工作模式也定义了5种:
- 引导模式:使设备处于引导状态
- 设备识别模式:引导模式结束,设备再次模式下,接受
SET_RCA
命令,进行识别设备。 - 数据传输模式:分配
RCA
后,设备进入数据传输模式,准备数据通信 - 中断模式:主机与设备同时进入,无数据传输,只允许消息来自主机或从机的中断请求
- 非活动模式:如果设备工作电压范围和访问模式无效,则进入非活动模式。
每一种模式,都有其各自的特点,我们主要来了解一下设备识别过程和数据传输过程。
3.1 设备识别模式
乍一看图,肯定大家都一脸懵逼,不仔细分析协议,单看图还是有一定理解难度的。
总体来说,设备识别模式下,主机要想识别到卡,主要步骤有如下几步:
-
复位设备
-
验证工作电压及访问模式
-
识别设备并分配相对设备地址
RCA
-
使设备进入数据传输模式
3.1.1 复位
EMMC控制器通过发送CMD0
,参数为0x00000000
,使设备进入Idle
状态。
同时,为了向后兼容,在除Inactive
的任何状态,接收 非0XFFFFFFFA
或0XF0F0F0F0
的参数,都作为CMD0
。
3.1.2 验证工作电压及访问模式
EMMC控制器通过发送CMD1
,参数为OCR寄存器
,该寄存器种包含了2bit
的存储器访问模式。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbYjxBXD-1648993456244)(https://cdn.jsdelivr.net/gh/UNIONDONG/Get_Pic_Url/Media202202221115665.png)]
如上,bit[30:29]
表示访问模式,通过CMD1
发送该数据目的是向存储器同步寻址类型。
EMMC设备同时也应以固定模式0x00FF8080
或 0x40FF8080
(如果设备忙)、0x80FF8080
(容量小于等于 2GB)或 0xC0FF8080
(容量大于 2GB)应答。
同时,bit31
用来判忙,如果为1,说明EMMC设备仍然处于复位过程中,主机也同时重复发送CMD1
来确保该忙位清除。
3.1.3 识别设备分配RCA
通过CMD1
进行检查后,不符合的设备就进入了Inactive
状态。而符合的设备就进入了Ready
状态。
进而,EMMC控制器发送CMD2
,请求符合要求的设备发送唯一设备标识CID
号。CID
号对于每一张卡,都是唯一的。
发送CID
成功的设备,就进入到了Identification
状态。
进而,EMMC控制器发送CMD3
,赋予设备一个相对设备地址RCA
,从设备一旦接收到RCA
,设备就变为Stand-by
状态,即数据传输状态。
3.2 数据传输过程
分配完RCA
后,从设备接收到RCA
,立即处于stand-by
状态时,CMD
和DAT
线路,均变为推拉模式。
3.2.1 获取CSD寄存器信息
CMD9
:主机发送该命令,以获取设备专用寄存器CSD
的数据,如块长度,存储容量,最大时钟速率等。
3.2.2 获取CID寄存器信息
CMD10
:主机发送该命令,以获取设备专用寄存器CID
的数据,获取设备识别号。
3.2.3 切换为Transfer状态
CMD7
:主机发送该命令,选定该设备,使其切换到发送数据状态。
3.2.4 查看EXT_CSD扩展寄存器
CMD8
:主机发送该命令,设备作为数据块发送其 EXT_CSD
寄存器的数据,设备将数据作为一个512字节的数据块发送。
3.2.5 修改EXT_CSD扩展寄存器的值
CMD6
:主机发送该命令,用于切换工作模式,或者修改EXT_CSD
寄存器。
CMD6
,这个命令,参数的设置有很大讲究呢!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HJ8XNgMT-1648993456245)(https://cdn.jsdelivr.net/gh/UNIONDONG/Get_Pic_Url/Media202202241333121.png)]
[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
:写字节访问模式下,该位无效。
3.2.6 读数据
- 单块读
CMD17
:直接发送读命令,参数为要写入的数据地址信息,只读一个块。
- 多块读
CMD18
:直接发送读命令,参数为要写入的数据地址信息,并且一直读下去。
CMD12
:停止命令,停止传输。
3.2.7 写数据
确保设备处于发送状态,即主机发送
CMD7
命令
- 单块写
CMD24
:直接发送写命令,参数为要写入的数据地址信息,只写一个块。
- 多块写
多块写的模式有两种:
① 一种是:设置要传输的数据块的个数,达到个数后,自动停止
CMD16
:设置要传输的块长度
CMD25
:开始发送CMD16
指定长度的数据块,直到达到设置的数据块写入完成。
②另一种是:一直传输数据,直到接收停止数据的命令
CMD25
:开始发送数据块,一直等待数据发送完全
CMD12
:停止命令,停止传输。