emmc协议

news2024/11/13 14:50:25

一、简介

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。

在这里插入图片描述

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

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

相关文章

Qt22双缓冲机制

Qt22双缓冲机制 知识点drawwidgetdrawwidget.hdrawwidget.cpp mainwindowmainwindow.hmainwindow.cpp main.cpp运行图 知识点 双缓冲就是在内存区申请一块缓存;然后显卡直接从这块内存读取数据.。 这样就不用鼠标边画,经过IO来读取这个环节;…

2024杭电6

1001.造花(简单版) 题意: 菊花图:n-1个节点都连接同一节点的树。 给定一棵树,删掉一个节点和连向这个点的所有边,使剩下两个连通块都构成菊花图,问是否可以做到。 题解: 菊花图只有…

算法练习题07:无重复字符的最长子串

我们可以使用 滑动窗口 的方法来解决这个问题。这是一种高效的算法,能在 O(n) 的时间复杂度内完成任务。以下是具体的解题思路: 1. 滑动窗口的概念 滑动窗口的想法是使用两个指针(通常称为左指针 i 和右指针 j)来表示一个窗口。…

秋招/春招投递公司记录表格

最近在准备秋招,在各个平台投递秋招简历,什么官网,邮箱,boss,应届生各个平台上,投递的平台比较多,比较乱,因此自己想将这些平台投递记录都收集到一个表格上,所以在腾讯文…

基于Java+MySQL实现在线书店订购系统

一、引言 1.1 编写目的 编写详细设计说明书是软件开发过程必不可少的部分,其目的是为了使开发人员在完成概要设计说明书的基础上完成概要设计规定的各项模块的具体实现的设计工作。同时也是开发人员和最终客户进行需求交流的有效手段。 1.2 背景 开发软件系统名…

数据结构——排序上

1.排序的概念及其运用 1.1排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录&a…

多目标应用:基于自组织分群的多目标粒子群优化算法(SS-MOPSO)的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

美国海外仓可以用哪家海外仓系统好?

随着全球贸易的增长,美国已经成为了海外仓储业务的一个重要市场。美国海外仓的数量不断增加,竞争也愈加激烈。为应对这种竞争,并优化仓储和供应链管理,WMS(仓库管理系统)成为了海外仓的重要工具。 一、WMS…

Wx64ST:一款轻松可修改的C语言Shellcode模板

关于windows_x64_shellcode_template windows_x64_shellcode_template简称为Wx64ST,它是一款功能强大的Shellcode模板,该模板基于C语言编写,其简单、可扩展和易于修改等特性可以帮助广大安全研究人员轻松开发适用于Windows x64的Shellcode。…

kali (linux) 安装配置 共享文件夹 samba

一、samba 安装 sudo apt-get install samba 二、启动samba 服务 systemctl enable nmb systemctl enable smb systemctl start nmb systemctl start smb 三、查看 samba状态 systemctl status nmb systemctl status smb 四、创建共享文件夹 ,并修改权限 …

技术指南:5分钟零成本实现本地AI知识库搭建

你一定经历过各种通用大模型一本正经胡说八道的时候吧,AI一通丝滑输出让人真假难辨,防不胜防。这种情况被称为AI幻觉。 大模型产生幻觉不幸“翻车”的原因很大程度上是“先天不足”,例如训练时来自特定领域的训练数据就比较缺失或存在偏差等…

20-22 - 打造专业的编译环境

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 大型项目的编译(无第三方库)1.1 大型项目的目录结构(无第三方库)1.2 项目结构设计分析1.3 需要打造的编译环境1.4 解决方案设计 2. 第 1 阶段任务2.1 关键的实现要点2.2 模块 make…

MES管理系统如何提升产品质量与可追溯性

在智能制造的新纪元里,MES管理系统正逐步崭露头角,成为驱动制造业转型升级的幕后英雄。MES管理系统不仅重新定义了生产过程的管理与控制方式,还以数据为驱动,引领着制造业迈向更高效、更智能、更可持续的未来。 智能制造的赋能者&…

U-Mail垃圾邮件过滤网关‍是如何过滤垃圾邮件的?

随着互联网的普及,垃圾邮件已经成为计算机网络安全的又一个公害。因此,反垃圾邮件已经成为互联网应用研究中一个重要课题。为了防止垃圾邮件首先要学会保护自己的邮件地址,避免在网上随意登记和使用邮件地址,预防垃圾邮件骚扰。其…

ALV Tree Control树控件

ALV Tree Control CL_GUI_ALV_TREE 效果: 自定义函数调用,在函数里画屏幕定义树控件显示 FUNCTION ZFI_YSYWLX_HELP_NEW . *"---------------------------------------------------------------------- *"*"本地接口: *&qu…

zset使用lua实现取最高分数中的随机成员

zset使用lua实现取最高分数中的随机成员 这种场景适用队列中不想要先入先出、先入后出因为zset的命令都是带有排序功能的,所以取值时要不从大到小要不从小到大所以我使用lua实现随机取成员使用lua是因为可以保持原子性在执行过程中Lua脚本是不会被其他命令或请求打…

C语言典型例题59

《C程序设计教程(第四版)——谭浩强》 题目: 例题4.11 译密码。为使电文保密,往往按一定规律将其转换为密码,收报人再按约定的规律将其译回原文。 例如,可以按以下规律将电文变为密码: 将字母A…

我不是非酋之-天空概率

最近入坑了dnf手游,染上了合天空,大黑蛋子一个,突发奇想,模拟下合天空概率,看看是否真的有20%。 梳理代码逻辑如下: 不考虑礼包和其他东西 条件: 合成概率20%,每次需要2个装扮和一个…

格式化的磁盘数据能恢复吗?五个看完即可掌握的恢复方法

磁盘是大多数电子设备都必须具有的一个存储介质,在平时使用的过程中,很多用户为了途一时的方便,经常会需要一键将磁盘里面的数据执行格式化,以实现清空或者删除的情况。然而,在执行完具体的操作后,过了一段…