首先,本博文遵照SD卡协议3.01版本,最旧协议版本为1.10,但是协议是向下兼容的。SD卡Physical Layer Simplified Specification Version 3.01英文协议规范可以去官方下载地址为:https://www./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卡大小的就是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) |
|
来自: WUCANADA > 《sdio-mmc》