首先,本博文遵照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卡协议规范学习的更多相关文章

  1. SD卡驱动学习

    https://blog.csdn.net/zqixiao_09/article/category/6163492 sd 协议解析: https://blog.csdn.net/g_salamande ...

  2. 【Linux驱动学习】SD卡规范学习

    摘要: 学习SD卡的相关规范,包括定义,硬件特性,数据传输,命令系统等.不涉及代码. 文章针对Linux驱动开发而写,以助于理解SD卡驱动,不会涉及过多硬件内容. 纲要: 1. SD卡介绍 2. SD ...

  3. [置顶] Android学习系列-把文件保存到SD卡上面(6)

    Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...

  4. 基于stm32f103zet6的FAT16文件系统学习0(读SD卡扇区)

    SD卡已经看了两天了,主要是因为测试出来的卡容量不对,所以一直找原因,最终还是发现了,总比不过是单位上面出现了问题,或许是之前没有接触到SD的缘故吧,所以对其中的一些寄存器很不了解,一切都是重新开始, ...

  5. 用 S5PV210 学习 Linux (三) SD卡下载

    学习地址:http://edu.51cto.com/lesson/id-63015.html http://blog.csdn.net/karven_/article/details/52015325 ...

  6. Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?

    本文主要介绍如何写数据到sd卡,这里主要到的技术是Environment中的方法. 1. 2.实现代码: /datasave/src/com/amos/datasave/savePasswordSer ...

  7. android学习笔记47——读写SD卡上的文件

    读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...

  8. 基础学习总结(三)--文本、SD卡数据读写

    简单的文本数据写入文件不需要权限,读写SD卡在4.0版本前需要写权限.在4.0后需要读写权限 布局: <LinearLayout xmlns:android="http://schem ...

  9. Android(java)学习笔记183:判断SD卡状态和存储空间大小

    当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String status = Environment.g ...

随机推荐

  1. 不要伤害指针(1)--运算符&和*

    原文转载地址:http://blog.csdn.net/sunchaoenter/article/details/6646001 增加自己的想法,作为笔记. 这里&是取地址运算符,*是间接运算 ...

  2. curl多线程类。

    <?php /* * Curl 多线程类 * 使用方法: * ======================== $urls = array("http://baidu.com" ...

  3. Android 拨号器的简单实现

    功能实现:一个EditView 一个拨打按钮,输入号码跳转到拨号界面 界面布局:activity_call.xml //线性垂直布局:一个EditView文本.一个Button按钮 1 <Lin ...

  4. JavaScript装逼指南

    如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScrip ...

  5. java泛型问题 关于警告:XX is a raw type

    (本文例子适用于JDK 5.0, 学习请先安装并配置!!!)         我们从一个简单的例子开始:假设我们现在需要一个专用来存储字符串的List,该如何实现?呵呵,这还不简单,且看如下代码:   ...

  6. Thinkphp的页面判断

    目前在做的系统中,涉及到了前端页面的判断,比如性别在数据库中存储为0或1,而页面显示应该为“男”或“女”,这里就需要用到页面判断. 比如, <volist name="st" ...

  7. Delphi中运行时改变panel的位置及大小(WM_SysCommand消息配合参数使用,很奇妙) good

    procedure TForm1.pnl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Inte ...

  8. android权限列表

    原文:[转]android权限列表 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略 ...

  9. (15)Visual Studio中使用PCL项目加入WCF WebService参考

    原文 Visual Studio中使用PCL项目加入WCF WebService参考 Visual Studio中使用PCL项目加入WCF WebService参考 作者:Steven Chang 2 ...

  10. poj2017简单题

    #include <stdio.h> #include <stdlib.h> int main() { int n,i; while(scanf("%d", ...