何为SDHC卡
SDHC是“High Capacity SD Memory Card”的缩写,即“高容量SD存储卡”。2006年5月SD协会发布了最新版的SD 2.0的系统规范,在其中规定SDHC是符合新的规范、且容量大于2GB小于等于32GB的SD卡。
SDHC最大的特点就是高容量(2GB-32GB)。另外,SD协会规定SDHC必须采用FAT32 文件系统,这是因为之前在SD卡中使用的FAT16文件系统所支持的最大容量为2GB,并不能满足SDHC的要求。所有大于2G容量的SD卡必须符合SDHC规范,规范中指出SDHC至少需符合Class 2的速度等级,并且在卡片上必须有SDHC标志和速度等级标志。
1. 高密度卡和普通卡的地址区别
cmd命令中携带的地址,在高密卡中是以block为单位,在普通卡中是以byte为单位。因此高密卡中不支持Partial Access and Misalign Access模式。
2. 对高密度卡来说,初始化必须使用cmd8命令。如果直接对其发acmd41命令,卡将一直返回busy信号;因此不支持v2.0的host,其不能支持sdhc卡。
在支持v2.0的host中插入非高密度卡,如果卡不支持v2.0,host发cmd8后,卡不响应,host可以判断出其为非高度卡,即普通卡;如果卡支持v2.0,卡响应,接下来卡发acmd41命令,则host可以判断卡对acmd41的相应判断卡是否为高密度卡。
对卡来说,支持v1.1及之前版本的只有normal card,无高密度卡;支持v.2.0版本的有可能是normal卡,也可能是hc(高密度)卡。
3.
SD卡有一个CSD寄存器,里面有各种参数。CSD寄存器有1.0和2.0两个版本,这两个版本的格式不一样。
其中计算卡的容量的参数即在该寄存器中。
该寄存器前两位“CSD_structure”仅起一个标志性作用,不能依据此位判断CSD寄存器的版本。
判断CSD的格式要靠ACMD41的响应CCS位来判断。CCS=0,表示该卡为Standard Capacity Card,那么对该卡的寻址要以byte为单位来进行。当进行块读写(CMD17,18,24,25时,如果写第0块地址为0x00;写第1块地址则为0x200;(默认block_len为512byte)。因为2的32次方最大为4G,因此Standard Capacity Card最大容量不超过4G。实际上在SDV1.1以前规定的Standard Capacity Card卡的容量都不超过2G。在SDV2.0里对Standard Capacity Card卡的容量才放大到4G。
CCS=1,表示该卡为High Capacity Card,那么对该卡的寻址要以512 byte为单位来进行。当进行块读写(CMD17,18,24,25)时,如果写第0块地址为0x00;写第1块地址则为0x01;
如果判断出卡CCS=0,则读取CSD寄存器时要以CSD_V1.0版本格式来读。有些比较新的卡,其CCS=0,而其CSD_structure= “01”,此时仍要以CCS为标准,以CSD_V1.0的格式来读去其内容,从而正确判断卡的容量