每个sector为512B,与IDE磁盘一样。通过读写命令读取一个多个sector。主控程序不需要关注SD具体是怎么实现读写与擦写的。
每个sector可以耐受100,000次写操作,无限次读操作。
每当sector被用命令erase命令擦除了,那么写操作将会更快。
1 功能概述
1.1 SD模式
1.1.1 Card ID
CID是用于存放SD卡识别码的寄存器。在SD出厂之前,CID都被写入了唯一的值。
通过READ_CID命令读取,只能读取,不能修改。
1.1.2 状态
Card_Status存放在一个32位的状态寄存器中,作为卡中的一个数据域,返给主机。
用SEND_STATUS命令读取。
SD_Status存放在512位的数据块中,当收到主机的SD_STATUS(ACMD13)命令时发出。SD_STATUS包括扩展的与BUS_WIDTH相关的状态位。
1.1.3 存储分区
SD卡存储的基本单元是BYTE,所有的数据操作都是通过BLOCK为单元进行。
<1> BLOCK, 块。读写操作的最基本单元。块大小可以设置或固定。关于一块大小的数据存放在CSD寄存器中。
<2> SECTOR,扇区。擦除操作的基本单元。扇区的大小是固定的。CSD中有相应说明。
<3> WP Group,写保护组。它指可以用一位保护的组。大小在每都设备中都是固定的。CSD中有说明。
1.1.4 读写操作
两种模式:单块,多块。
1.1.5 传送速率
单线(DATA0):25Mbit/s
四线(DATA0~3):100Mbit/s(12MB)
1.1.6 数据除错
ECC,Error Correction Code。在数据写入时就会为每个扇区计算一个ECC。在读该扇区数据时,如果出现错误SD会在传给主机前纠正数据。
1.1.7 擦除
sector是擦除的最小单元,一次性擦除多个扇所需的时间相同。第一个命令是擦除的start address,紧跟着是擦除的end address,那么这个区间的所有扇区都将会被擦除。
1.1.8 写保护
1.1.9 Copy bit
在CSD寄存器的copy bit用于标志SD卡中,哪些内容是原始的,哪些是复制的。
一旦某位被置1,那么不能清0了。
1.1.10 CSD寄存器
SD卡中的所有配置信息都存储在CSD卡中。
主机可以通过SEND_CSD命令读取CSD寄存器的值,也可以通过PROGRAM_CSD命令修改。
1.2 SPI 模式
1.2.1 工作条件
OCR是operating condition寄存器。指定了SD卡在哪些状态下可以正常工作,哪些状态下进入非激活状态。
READ_OCR(CMD58)命令。可以发送GO_INACTIVE命令进入非激活状态。