emmc协议

2024-09-02 20:52
文章标签 协议 emmc

本文主要是介绍emmc协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

1.1 简介

嵌入式多媒体卡(Embedded Multimedia Card, eMMC)是由 JEDEC 协会所订立,将 MMC controller 和 NAND Flash 封装到一个芯片中,简化存储器的使用和电路板的设计。
在这里插入图片描述 在这里插入图片描述

1.2 信号

singledescription
clkclock
data strobe选通信号,olny for hs400
cmdcmd 和response
dat0-dat7数据线

1.3 速度模式

modedata ratebus widthfrequencymax throughout
Backwards Compatibility with legacy MMC cardSDR1,4,80-26MHz26MB/s
High Speed SDRSDR1,4,80-52MHz52MB/s
High Speed DDRDDR4,80-52MHz104MB/s
HS200SDR4,80-200MHz200MB/s
HS400DDR80-200MHz400MB/s

1.4 基本传输

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、工作模式

2.1 简介

在这里插入图片描述在这里插入图片描述

2.2 数据传输模式

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

3 command and response

在这里插入图片描述

在这里插入图片描述

CQE

1.1简介
Command Queuing是指可以将一些读写任务排成一个队列, 等它们准备好后再进行数据传输。这是一项用于优化命令排队和执行的功能,
使eMMC 能够在后台同时处理多个任务,提高了性能和效率。
eMMC Device内部会有一个存储任务的队列,Host可以将任务放入其中进行排队。Host将任务送到队列中后,任务的初始状态为“pending”,
然后Deivce会自动开始处理任务,当一个任务准备好执行时,状态会变为“ready for execution”。Host需要追踪每个排队任务的状态,
某个任务准备好之后就发送相应的命令开始数据传输。
启用CQ功能时,只支持部分命令,而且不能使用CMD17/CMD18和CMD24/CMD25 进行数据传输。
在这里插入图片描述

1.2主要的CMD
CQ中包括 向Device发送任务、对已发出的任务进行排序和提供额外任务管理功能 的新命令
CMD44 定义排队任务的数据传输方向、优先级、任务ID和block数量
CMD45 定义排队任务的start block addr
CMD46 指定Device执行队列中相应ID的读任务
CMD47 指定Device执行队列中相应ID的写任务
CMD48 指示Device 丢弃队列中某个任务或者所有的任务
在这里插入图片描述

1.3 任务排队
Host通过发送CMD44和CMD45对数据传输任务进行排队,进行排队操作时必须先发送CMD44,再发送CMD45。
如果CMD44有错误,例如所请求的任务ID已经在使用中,Device将其视为非法命令并不予以响应。
如果在发送CMD44后没有发送CMD45,则这个排队操作会被取消。成功发送CMD45并得到R1响应,就说明任务已经在Device中排队。
在这里插入图片描述

1.4 执行队列中的任务
Host应发送包含相应 任务ID 的CMD46或CMD47执行先前排队的任务,CMD46用于执行读取命令,CMD47用于写入命令。
Host通过读取QSR寄存器判断任务是否准备好执行,如果任务已准备好执行,则Device返回响应并开始数据传输。如果出现错误,
Device将不会进行响应,也不会进行数据传输。
在这里插入图片描述

1.5 QSR寄存器
QSR寄存器可以指示当前任务的状态,Host通过发送CMD13读取QSR寄存器。
在这里插入图片描述

  1. Command Queuing Engine(CQE)
    2.1 简介
    Host中具体执行CQ功能的硬件模块被称为“Command Queuing Engine”(CQE)。CQE负责管理 Host软件端 与eMMC Device 之间的接口以及数据传输。
    CQE可以独立于 eMMC Host controller,作为一个单独的模块实现。
    其中,Command Queuing Host Controller Interface(CQHCI)是一个执行CQ功能模块的软硬件接口。包括处理软件提供的任务信息,与Device通信以
    发出任务和对任务进行排序,以及从内存中读写数据和生成中断等。 CQHCI的目标是提供一种统一的用于访问CQ硬件功能的接口方法,从而为这些
    功能提供通用的软件驱动程序。
    CQE通过存储在系统内存中的Task Descriptor List (TDL)和一个doorbell 寄存器从软件端接收任务信息,然后发送 CMD44 和 CMD45 给 eMMC Device,
    CQE 还需要读取 Device的 QSR寄存器,从而决定要执行哪个任务并发出CMD46或CMD47。

在这里插入图片描述

2.2 基于Task Descriptor List 和 Doorbell Register 下发任务
为了在 Device 中实现任务的排队,软件端使用存储在 Host 内存中的 Task Descriptor List (TDL)下发任务。TDL由最多32个固定大小的 slot 组成,
每个 slot 包括一个Task Descriptor 和一个Transfer Descriptor 。软件需要下发任务时,会选择一个可用的TDL slot,并在其中构建这两个 Descriptor。
两个 Descriptor 被写入 slot i后,软件端通过向 CQTDBR 寄存器的第 i 位写1来通知CQE处理相应的任务,CQE就会读取 Descriptor 并根据
Task Descriptor 中编码的信息生成 CMD44和CMD45 。

Task Descriptor:编码一个任务的所有信息,例如 Address, Block Count和Priority等。Task Descriptor 还可以编码直接发送到 Device 的任意命令(DCMD Descriptor)。
Transfer Descriptor:指向一个要从中读写数据的data buffer (TRAN Descriptor) 或者一组任意长度的TRAN Descriptor(LINK Descriptor)
下图为 TDL的基本结构,其中,slot0 存储了一个 TRAN Descriptor 的任务,指向一个 data buffer,slot1 存储 LINK Descriptor的任务,指向一组TRAN Descriptor,slot31 存储 DCMD Descriptor。
在这里插入图片描述

2.2.1 Task Descriptor 结构
Task Descriptor 的结构如 表B.229 和B.330 所示。Task Descriptor的位宽可以使用 CQCFG 寄存器中相应的字段进行配置。
当此位字段为0时,Task Descriptor 位宽为 64bit;此字段为1时,Task Descriptor 位宽为 128bit。

在这里插入图片描述
在这里插入图片描述

当Task Descriptor为 DCMD Descriptor 时,其中某些字段的含义会发生变化。
在这里插入图片描述
在这里插入图片描述

2.2.2 Transfer Descriptor 结构
Transfer Descriptor 分为 64位寻址模式 和 32位寻址模式
在这里插入图片描述

在这里插入图片描述

2.3 任务选择和执行
CQE 还负责读取 Device 的 QSR寄存器,以确定哪些任务已准备好执行,选择要执行的任务并安排它们的执行顺序。
读取QSR:当任务已经Device中排队时,CQE通过CMD13读取QSR,确定哪些任务已准备好执行。
如果数据传输正在进行,CQE会在数据传输结束之前按照 CQSSC1寄存器 CBC 字段的配置发送CMD13。如果总线处于空闲状态,CQE会按照 CQSSC1寄存器 CIT 字段的配置定期发送CMD13。
选择任务:当一个或多个任务已经准备好并且总线空闲(或者先前的数据传输即将结束)时,CQE就会选择一个任务执行。
任务执行排序:当总线处于空闲状态时,CQE发送 CMD46 或 CMD47 让Device执行某个任务。同时CQE还会将这个任务的 Transfer Descriptor 作为指向 Host 内存中 data buffer 的指针提供给 DMA。

2.4 发送 Direct Command(DCMD)
DCMD功能是为了当启用CQ模式时,软件端仍然可以通过 index 和 argument来发出 eMMC 命令。
需要启用DCMD功能时,要将CQCFG寄存器的bit 12置1。软件段将 DCMD Task Descriptor 写入TDL的 slot 31,并配置 Doorbell 寄存器(CQTDBR)。
命令的 index 和 argument 会直接编码在DCMD 的Task Descriptor中。
CQE会识别在TDL slot 31中的DCMD Task Descriptor,并根据其中的index 和 argument 构建CMD后将其发送到Device,最后将response存储在专用寄存器中。
DCMD Task只能通过 slot 31发出,并且一次只能发送一个。CQE会忽略DCMD Descriptor后面的Transfer Descriptor

2.5 Queue-Barrier (QBR)任务
为了使 Host 对任务之间的顺序具有控制权,可以通过设置Task Descriptor 中的 QBR位将一个任务标记为 Queue-Barrier (QBR)任务。Host需要实现以下两点:
a. 仅在执行完QBR 任务之前的所有任务后才会将QBR 任务发送到Device。
b. 新的任务只会在QBR任务执行完成后发送到Device。
发送QBR 任务的规则为:
a. 如果 QBR 任务是数据传输任务,只有在接收到 Device 队列中最后一个数据传输任务的 CMD46/ CMD47 的响应后,CQE才会向Device 发送 QBR 任务的CMD44和CMD45。
b. 如果QBR 任务是 DCMD任务,CQE只会在所有先前发出的任务完成后(包括数据传输完成)再发送相关的命令。
c. 在QBR 任务之后的命令只能在 QBR 任务执行完成后发送。

2.6 CQE register
在这里插入图片描述

3 操作流程
3.1 CQ初始化流程

  1. 初始化Device和启用Device的CQ功能;
  2. 配置CQCFG寄存器设置Task Descriptor的大小;
  3. 配置CQTDLBA和CQTDLBAU寄存器,指示TDL的存储位置;
  4. 配置CQSSC1寄存器控制CQE向Device发送SEND_QUEUE_STATUS命令的时间;
  5. 配置CQIC寄存器控制启用或者禁用interrupt coalescing功能以及设置中断计数和定时器保护;
  6. 配置CQCFG寄存器启动CQE。

3.2 发送任务流程

  1. 读取CQTDBR寄存器寻找一个空闲的slot;
  2. 在slot中创建Task Descriptor;
  3. 在slot中创建Transfer Descriptor;
  4. 如果有多个任务,需要重复进行1-3步;
  5. 配置CQTDBR寄存器,将相应slot的bit置1。
    在这里插入图片描述

3.3 丢弃任务流程

  1. 配置CQCTL寄存器暂停CQE;
  2. 轮询CQCTL寄存器或者等待中断直到暂停CQE的操作完成;
  3. 读取CQTDBR寄存器,如果bit i为0,说明任务已经完成;
    如果为1,则需要再读取CQDPT寄存器,如果bit i 为1,说明任务已经在排队,则需要发送CMD48 丢弃这个任务,
  4. 向CQTCLR寄存器的bit i 写1清除CQE中的任务;
  5. 轮询CQTCLR寄存器直到清除操作完成;
  6. 配置CQCTL寄存器bit 0为0恢复CQE。

在这里插入图片描述

这篇关于emmc协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131042

相关文章

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

HTTP协议 HTTPS协议 MQTT协议介绍

目录 一.HTTP协议 1. HTTP 协议介绍 基本介绍: 协议:  注意: 2. HTTP 协议的工作过程 基础术语: 客户端: 主动发起网络请求的一端 服务器: 被动接收网络请求的一端 请求: 客户端给服务器发送的数据 响应: 服务器给客户端返回的数据 HTTP 协议的重要特点: 一发一收,一问一答 注意: 网络编程中,除了一发一收之外,还有其它的模式 二.HTT

CAMediaTiming协议

今天看下下CALayer这个类,里面的属性是实现CAMediaTiming这个协议的,这里简单介绍一下CAMediaTiming协议里面的属性。官网链接 如下 beginTime:开始时间(和父类相关) timeOffset:动态的本地时间t,tp是父类事件。t = (tp - begin) * speed + offset.用于暂停一个layer。  fillMode:layer完成后的

浏览器工作原理(3)-TCP协议文件如何从服务器到浏览器

浏览器工作原理-TCP协议,文件如何从服务器到浏览器 本周继续学习浏览器工作原理及实践,本次内容来看一下TCP协议确保文件完整的送到至浏览器 First Page 是指页面加载到首次开始绘制的时长,而影响这个性能指标的一个重要原因是网络加载速度,网络传输协议无论使用http还是websocket,都是基于TCP/IP的,所以有必要了解一下TCP/IP,对于web的性能调优和问题定位都有很