4:eMMC command
1.前言
本文主要对eMMC的command进行详细介绍,主要包含如下内容:
(1)command类型
(2)command格式
2.command类型
command类型 | 说明 |
bc | 不带response的广播命令 |
bcr | 带有response的广播命令 |
ac | 点对点无数据传输 |
adtc | 点对点数据传输 |
表 command类型
3. command格式
如上图所示,eMMC Command 由 48 Bits 组成,各个 Bits 的解析如下所示:
表 command格式
- 总长度48bits;
- 固定以0开始,以1结束;
- transmiter bit表示数据的传输方向,1代表从host to device;
- command index 用6个bits指示了command的索引,取值范围0~63;
- argument:有些command需要发送参数,是否需要发送参数依赖于具体的命令;
- CRC7是包含 Start Bit、Transmission Bit、 Command Index 和 Argument 内容的 CRC 校验值。通过CRC7保护,device 端在接收到CMD时同样会计算一个CRC值,如果与host发送的CRC不一致,则被认为是传输错误;
注1:eMMC可能不会支持0~63的所有命令,有些命令可能会不支持
注2:CRC 校验简单来说,是发送方将需要传输的数据“除于”(模2除)一个约定的数,并将得到的余数附在数据上一并发送出去。接收方收到数据后,再做同样的“除法”,然后校验得到余数是否与接收的余数相同。
如果不相同,那么意味着数据在传输过程中发生了改变。更多的细节不在本文展开描述,感兴趣的读者可以参考 CRC wiki 中的介绍。
4. command分类
eMMC将command index(0~56)分成12个class,每个class代表一类功能,包含所有commands的一个子集。
具体某一个设备支持哪些class的命令,可以通过CSD寄存器的CCC[95:84] feilds来查询,如bit84为1则表示支持class0
device command class | class description | note |
class 0 | basic | 基本命令 |
class 1 | obsolete | 废弃 |
class 2 | block read | 块数据读相关命令,包括设置块长度、读取单块、读取多块 |
class 3 | obsolete | 废弃 |
class 4 | block write | 块数据写相关命令,包括设置块个数、写入单块、写入多块、修改设备id寄存器、修改CSD、设置RTC |
class 5 | erase | 设置擦除组开始地址、设置擦除组结束地址、擦除操作 |
class 6 | write protection | 设置写保护、清除写保护、获取device的写保护状态、获取写保护类型 |
class 7 | lock device | lock/unlock device |
class 8 | application-specific | 指示下一个命令是一个特定应用命令而非标准命令 |
class 9 | I/O mode | 写寄存器、设置系统进入中断模式 |
class 10 | security protocols | 连续传输数据块从device to host或从host to device |
class 11 | command queuing | 执行队列里的任务 |
class 12 | reserved | \ |
表 command分类
5.参考文档
[1] http://www.jedec.org/sites/default/files/docs/JESD84-B51.pdf
4:eMMC command相关推荐
- 【Qt】新安装的虚拟机,使用QtCreator第一次编译时报错:g++: Command not found
1.问题描述 新安装的虚拟机,使用QtCreator第一次编译时报错:g++: Command not found (或着报,make执行失败之类的错误) 2.原因分析 新安装的虚拟机中,没有g++. ...
- [UWP]了解模板化控件(7):支持Command
原文:[UWP]了解模板化控件(7):支持Command 以我的经验来说,要让TemplatedControl支持Command的需求不会很多,大部分情况用附加属性解决这个需求会更便利些,譬如UWPC ...
- GDCM:gdcm::Command的测试程序
GDCM:gdcm::Command的测试程序 GDCM:gdcm::Command的测试程序 GDCM:gdcm::Command的测试程序 #include "gdcmCommand.h ...
- linux安装报错之:ifconfig command not found解决
问题描述: 用虚拟机VMware安装linux系统(镜像文件是从官网下载的CentOS-7.0-1406-x86_64-DVD.iso), 在安装完成之后,输入ifconfig命令报错:ifconfi ...
- windows安装pycocotools错误:cl : Command line error D8021 : invalid numeric argument '/Wno-cpp'
在安装基于keras.tensorflow实现的Mark RCNN(https://github.com/matterport/Mask_RCNN),要运行其中的demo.ipynb时,需安装pyco ...
- linux bash命令找不到,Linux下提示命令找不到:bash:command not found
Linux下输入某些命令时会提示:bash:command not found. 首先,查看$PATH中是否包含了这些命令. $PATH:决定了shell到哪些目录中去寻找命令或程序,PATH值是一系 ...
- ./configure会报错:pr command not found
1.2 安装coreutils 请检查${MinGWDir}/msys/1.0/bin(默认为C:/MinGW/msys/1.0/bin)下有没有pr.exe,如果没有,那么在编译libav过程 ...
- NVIDIA/Apex安装时遇到 C++编译:unrecognized command line option ‘-std=c++14’ 错误解决
0.问题 编译安装apex的时候,报错C++编译:unrecognized command line option '-std=c++14',后面紧跟着ninja也没有编译成功.发现是编译器版本太老( ...
- 问题:anaconda: command not found 解决方案
使用命令:vim ~/.bashrc 修改环境变量 在文本最后添加命令:export PATH=~/anaconda3/bin:$PATH 重启环境变量:source ~/.bashrc 输入:ana ...
最新文章
- Reactor模式与Proactor模式
- 数据库历险记(二) | Redis 和 Mecached 到底哪个好?
- using namspace std的使用
- java 整数加减_JAVA超大整数的加法如何改成减法
- Intent对象详解(二)
- python求列表的平均值的用法_python如何求列表平均值?_后端开发
- olcd12864的u8g2库_U8G2 软件包单色1.3寸OLED屏驱动在 RT-Thread 移植问题
- Python之文章生成器(升级版,也就是更傻瓜式运行)
- 理解HTTP 代理,负载均衡,缓冲(Buffering)和缓存(Caching)
- 管理感悟:出了事故,关键是想想自己哪里能改进
- c语言实现http下载器
- 嵌入式单片机该如何选型?
- 用Python推送书籍到Kindle
- JDK8新特性之Stream流【小白快速上手,没有技巧全是实操-LOL英雄类讲解不失趣味】
- 2022-2028年全球与中国汽车自动变速箱控制单元产业市场前瞻与投资战略规划分析
- The Fed's Market Footprint
- 用户空间与内核空间数据交换-2-generic netlink
- 低代码开发,是程序员的“福”还是“祸”?
- RStudio安装xlsx包
- 手写springIOC、AOP