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。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Boot-IDEA创建spring boot项目方法】

1. 使用Spring Initializr 的 Web页面创建项目 2. 使用 IDEA 直接创建项目,其中有两种不同的搭建路径 3. 使用 IDEA 创建Maven项目并改造为springBoot 最常使用的两种方法其实就是一种,这里介绍在ieda中如何搭建 SpringBoot项目。 1.new Project--> 2…

恒电流间歇滴定法 (GITT) 测试教程

文章目录 恒电流间歇滴定法 (GITT) 测试教程1. GITT 测试原理2. 实验准备2.1 设备与材料2.2 配置实验装置 3. GITT 测试步骤3.1 设定测试参数3.2 执行 GITT 测试 4. 数据分析4.1 电压变化分析4.2 扩散系数计算4.3 电荷传输阻抗分析 5. 总结与应用 恒电流间歇滴定法 (GITT) 测试…

Java18 设计模式

第十八节:设计模式 1.设计模式概述 1.1软件设计模式的产生背景 ​ "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(…

安卓开发环境搭建1

1、参考地址:Android开发环境搭建_kiba518的博客-CSDN博客 安装jdk 安装Android.Studio 2、就这样,next,搞定安卓开发环境,耗时20分钟 3、参考视频: 三:Android Studio安装_哔哩哔哩_bilibili 1.手机设…

XSS漏洞

本质 变量在接收数据时,数据被写成js脚本,然后进行回显操作,就被浏览器执行;js可以干什么,这个漏洞就可以干什么 产生层面 前端 函数类 echo… 漏洞操作对应层 危害影响 js代码决定 浏览器内核版本 版本是否支持执…

Ubuntu Linux Server安装Kubernetes

本文主要描述在Ubuntu Linux Server操作系统中安装Kubernetes云原生对应的microk8s组件。 sudo snap install microk8s --classic 如上所示,在Ubuntu服务器中安装microk8s组件完成,对应的版本是microk8s v1.30版本 microk8s enable dashboard 如上所…

ISIS路由渗透

/ 实验介绍: / 原理概述 在IS-IS网络中,所有的Level-2和Level-1-2路由器构成了一个连续的骨干区域。Level-1区域必须且只能与骨干区域相连,不同的Level-1区域之间不能直接相连。Level-1区域内的路由信息会通过Level-1-2路由器通报给Level-2区域&#x…

语音测试(二)音频标注

一、标注工具(praat) Praat的主要功能是对自然语言的语音信号进行采集、分析和标注,并执行包括变换和滤波等在内的多种处理任务。 二、标注教程 音频标注工具(praat) a.打开praat软件在Praat Objects界面上选择Open选…

【全志H616】【开源】 ARM-Linux 智能分拣项目:阿里云、网络编程、图像识别

【全志H616】【开源】 ARM-Linux 智能分拣项目:阿里云、网络编程、图像识 文章目录 【全志H616】【开源】 ARM-Linux 智能分拣项目:阿里云、网络编程、图像识1、实现功能2、软件及所需环境3、逻辑流程图及简述3.1 完整逻辑流程图3.2 硬件接线3.3 功能简述…

我的sql我做主!Mysql 的集群架构详解之组从复制、半同步模式、MGR、Mysql路由和MHA管理集群组

目录 Mysql 集群技术一、Mysql 在服务器中的部署方法1.1 在Linux下部署mysql1.1.1 安装依赖性:1.1.2 下载并解压源码包1.1.3 源码编译安装mysql1.1.4 部署mysql 二、Mysql的组从复制2.1 配置mastesr2.2 配置salve2.3 当有数据时添加slave22.4 延迟复制2.5 慢查询日志…

wlanapi.dll丢失怎么办?有没有什么靠谱的修复wlanapi.dll方法

在遇到各种系统文件错误当中,其中之一就是“wlanapi.dll文件丢失”的问题。这种问题通常发生在Windows操作系统上,特别是当系统试图执行与无线网络相关的任务时。wlanapi.dll是一个重要的系统文件,它负责处理Windows无线网络服务的许多功能。…

【ESP32 】VScode -window环境配置(adruino开发)(点亮LED)

创建工程 新建工程 、 进行vs code的下载&#xff0c;等待一段时间 工程代码 #include <Arduino.h>// put function declarations here: int myFunction(int, int);void setup() {// put your setup code here, to run once:int result myFunction(2, 3);pinMode(2…

一分钟创建自己的分班查询系统,家长扫码即可进群

开学后&#xff0c;老师们的忙碌也达到了顶峰。整理教材、准备课程计划、布置教室&#xff0c;这些工作已经让人应接不暇&#xff0c;更别提还要处理分班事宜。以往&#xff0c;老师们需要一个个通知家长分班结果&#xff0c;这不仅耗时耗力&#xff0c;还容易出错。家长们也常…

【Qt】tcp服务器、tcp多线程服务器、心跳保持、服务端组包

文章目录 背景&#xff1a;代码实现&#xff08;服务端&#xff09;&#xff1a;总结改进方案&#xff1a;多线程tcp服务器代码实现&#xff08;服务端&#xff09;心跳保持&#xff1a;大文件收发 背景&#xff1a; 局域网内&#xff0c;客户端会进行udp广播&#xff0c;服务…

书法图片自动扣字的批处理

本程序会根据原文字图片&#xff0c;自动扣字并生成黑字、红字2个透明的png图片&#xff0c;原图片黑字或白字均可。运行的话需要先安装好 ImageMagick-7.1.1-37 用法与生成效果举例&#xff1a; a.jpg 白字 转 黑、红扣字png: b.jpg 黑字 转 黑、红扣字png: 分享脚本如下: …

Spring MVC 八股文

目录 重点 SpringMVC的工作原理 Spring MVC 拦截器 Spring MVC 的拦截器和 Filter 过滤器有什么差别&#xff1f; 基础 什么是SpringMVC SpringMVC的优点 Spring MVC的核心组件 Spring MVC的常用注解由有哪些 Controller 注解有什么用 重点 SpringMVC的工作原理 1、客…

OLED显示屏详解(IIC协议0.96寸 STM32)

目录 一、介绍 二、模块原理 1.原理图 2.工作原理&#xff1a;SSD1306显存与命令 三、程序设计 main.c文件 oled.h文件 oled.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 OLED是有机发光二极管&#xff0c;又称为有机电激光显示&#xff08;Organic Electrol…

U-Mail垃圾邮件网关:一站式邮件安全防护方案

在当今的数字化时代&#xff0c;电子邮件已成为企业日常运营中不可或缺的通讯工具。然而&#xff0c;随着电子邮件的广泛应用&#xff0c;垃圾邮件也日益成为困扰企业的一大难题。如何有效防止垃圾邮件入侵&#xff0c;确保企业邮件系统的安全稳定运行&#xff0c;已成为众多企…

Python进阶08-爬虫

零、文章目录 Python进阶08-爬虫 1、爬虫介绍 &#xff08;1&#xff09;爬虫是什么 **网络爬虫:**又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本&#xff0c;另外一些不常使用的名字还有蚂蚁、自…

挂载磁盘时有多个文件系统

mount: /opt/storage/data1/: more filesystems detected on /dev/md5; use -t or wipefs(8). 1、解决方法一 mount -t ext4 /dev/md5 /opt/data2、解决方法二 #返回磁盘有那些文件系统和格式 wipefs /dev/md5 #清除文件系统和元数据 wipefs -a -f /dev/md5 #再次查看将没有任…