SD卡协议规范学习
首先,本博文遵照SD卡协议3.01版本,最旧协议版本为1.10,但是协议是向下兼容的。SD卡Physical Layer Simplified Specification Version 3.01英文协议规范可以去官方下载地址为:https://www.sdcard.org/downloads/pls/simplified_specs/。
关于SD卡做一个简单介绍如下:
SD卡按照内存容量大小分3类:
SDSC(标准容量SD内存卡) :最大支持为2GByte。
SDHC(大容量SD内存卡) :SD卡容量介于2Gyte~32GByte。
SDXC(扩展容量SD卡内存卡):SD卡容量介于32GByte~2TByte。
再来介绍一下关于SD卡的传输速度分为5个等级:
Class 0 :未定义它的传输速度!!
Class 2 :定义它的传输速度大于等于2MB/sec
Class 4 :定义它的传输速度大于等于4MB/sec
Class 6 :定义它的传输速度大于等于6MB/sec
Class 10 :定义它的传输速度大于等于10MB/sec
协议中还规定了SDHC和SDXC这两类卡的传输速度应当大于等于2MB/sec。
有SD卡的可以看看自己SD卡上边有这些标号:这些标号代表此SD卡的传输速度!!


再介绍下SD卡控制器是如何识别SD卡大小的,
SD卡内部有一些关于SD卡自身信息的寄存器,关于SD卡大小的就是CSD Register,此寄存器共128位,最高两位(即:127:126两位)的值分为2个版本,如下:

注释:0代表此卡容量为标准容量。
1代表此卡容量为大容量或扩展容量。
2、3保留
下面介绍CSD寄存器中与容量有关的位,它的大小与这三个参数有关C_SIZE, C_SIZE_MULT and READ_BL_LEN,下图是寄存器中的位置:



下图是关于READ_BL_LEN寄存器位的说明:

注释:4个二进制位来表示最大读取数据的长度,
1001b表示读取数据最大长度为29 Byte = 512Byte,
1010b表示读取数据最大长度为210 Byte= 1024Byte,
1011b表示读取数据最大长度为211 Byte=2048Byte,
其余为保留!!
注意:SD内存卡的WRITE_BL_LEN一直等于READ_BL_LEN的大小!!
下图是关于C_SIZE_MULT 寄存器为的说明:

注释:3个二进制位来表示计算设备总大小的一个乘数。
这个就不用我多解释了吧!!
C_SIZE占了12个bit位,所以C_SIZE最大值为210 = 2048。
注意:这是CSD version 1.0版本,
CSD version 2.0版本的C_SIZE占了22个bit位,它的最大值为2^22。
这也就预示了SDSC与SDHC、SDXC的区别。
接着看内存卡容量是如何计算的,上公式:
memory capacity = BLOCKNR * BLOCK_LEN
注释:BLOCKNR = (C_SIZE+1) * MULT
MULT = 2C_SIZE_MULT+2 (C_SIZE_MULT < 8)
BLOCK_LEN = 2READ_BL_LEN,(READ_BL_LEN < 12)
注意:上述数据算出的大小不包含保护区域的大小。
SD卡协议规范学习的更多相关文章
- SD卡驱动学习
https://blog.csdn.net/zqixiao_09/article/category/6163492 sd 协议解析: https://blog.csdn.net/g_salamande ...
- 【Linux驱动学习】SD卡规范学习
摘要: 学习SD卡的相关规范,包括定义,硬件特性,数据传输,命令系统等.不涉及代码. 文章针对Linux驱动开发而写,以助于理解SD卡驱动,不会涉及过多硬件内容. 纲要: 1. SD卡介绍 2. SD ...
- [置顶] Android学习系列-把文件保存到SD卡上面(6)
Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...
- 基于stm32f103zet6的FAT16文件系统学习0(读SD卡扇区)
SD卡已经看了两天了,主要是因为测试出来的卡容量不对,所以一直找原因,最终还是发现了,总比不过是单位上面出现了问题,或许是之前没有接触到SD的缘故吧,所以对其中的一些寄存器很不了解,一切都是重新开始, ...
- 用 S5PV210 学习 Linux (三) SD卡下载
学习地址:http://edu.51cto.com/lesson/id-63015.html http://blog.csdn.net/karven_/article/details/52015325 ...
- Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?
本文主要介绍如何写数据到sd卡,这里主要到的技术是Environment中的方法. 1. 2.实现代码: /datasave/src/com/amos/datasave/savePasswordSer ...
- android学习笔记47——读写SD卡上的文件
读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...
- 基础学习总结(三)--文本、SD卡数据读写
简单的文本数据写入文件不需要权限,读写SD卡在4.0版本前需要写权限.在4.0后需要读写权限 布局: <LinearLayout xmlns:android="http://schem ...
- Android(java)学习笔记183:判断SD卡状态和存储空间大小
当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String status = Environment.g ...
随机推荐
- Linux程序设计 读笔2 Shell脚本
第二章 Shell程序设计 四.管道和重定向 1 重定向输出 ls -l > lsoutput.txt ps >> lsoutput.txt >>表示附加到一个文件中 文 ...
- QF——iOS中数据持久化的几种方式
数据持久化的几种方式: 一.属性列表文件: .plist文件是种XML文件.数组,字典都可以和它互相转换.数组和字典可以写入本地变成plist文件.也可以读取本地plist文件,生成数组或字典. 读取 ...
- 常用Python第三方库 简介
如果说强大的标准库奠定了python发展的基石,丰富的第三方库则是python不断发展的保证,随着python的发展一些稳定的第三库被加入到了标准库里面,这里有6000多个第三方库的介绍:点这里或者访 ...
- struts2中#,$,%的用法以及el,ognl表达式的用法
OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例 取Session中的值 <c:out value="${sessionScope.user.userId}&quo ...
- iframe中调用父iframe中的方法
function getRootWin(){ var win = window; while (win != win.parent){ win = win ...
- hdu 2828 Lamp 重复覆盖
题目链接 给n个灯和m个开关, 每个灯可以由若干个开关控制, 每个开关也可以控制若干个灯, 问你能否找到一种开关的状态, 使得所有的灯都亮. 将灯作为列, 然后把每个开关拆成两行, 开是一行, 关是一 ...
- delphi 实现vip126发邮件
本例是 TSimpleThread , TSimpleList, IdhttpEx 网页模拟(POST)的综合运用. Demo只写了发送,但亦可收取,详见源码. (此源码写于2年前,那时还写得不好,请 ...
- 使用gSoap做一个简单的CS系统
首先介绍一下gSoap,这是一个非常厉害的网络库,封装程度非常高而且跨平台. 支持SSL链接,数据格式为XML. 介绍地址: http://sourceforge.net/projects/gsoap ...
- 十几个remote control software
5 alternatives to LogMeIn Free for remote PC access VNC VNC, or Virtual Network Computing, isn’t its ...
- Neo4j数据库简单
作为世界上先进的地图数据库,Neo4j如今,公司已成为许多互联网的首选.Neo4j它是基于java开源地图数据库开发,另外一个NoSQL数据库.Neo4j在保证对数据关系的良好刻画的同一时候.还支持传 ...