1 SD卡Secure Digital Card基于FLASH存储单元的卡它是专为安全性高、容量大、高性能目的设计的。SD框图如图1-1所示图1-1 SD卡不但有大容量存储单元还集成有智能控制器来实现接口协议管理、安全性能、版权保护盒ECC校验等。特点高达2GB容量、SD卡协议兼容、SPI模式控制、版权保护、密码保护SD卡通讯方式SD 6线通讯clk、cmd、D0—3 数据出错保护传送单块、多块数据传送SPI 3线串行总线clk、DI、DO 可选的非数据保护传送单块、多块数据传送读写次数性能SD卡数据读次数不受限无限次每扇区写100000次SD Mode: SD模式下多卡的识别SD卡模式是单主机多从机模式clk和power线共用识别过程如下主机分别使能各个卡自己的cmd线各个卡的CID寄存器是事先编程好的它是一个用在卡识别过程中唯一数字主机能使用READ_CID命令读取CID寄存器的值主机只能读而不能写。内部上拉的DAT3脚可以用来进行卡插入的侦测在数据传输过程中可以将上拉电阻断开使用ACMD42。Card Status存储在一个32bit的寄存器中它被当做命令应答的数据区来发送它包含卡当前的状态及上一个命令的完成代码可以通过SEND_STATUS命令读取。SD_Status存储在512bit的寄存器中当发送命令SD_STATUSACMD13时它被当做一块数据块来发送。存储空间阵列分区如图1-2所示数据传输的基本单元式byte 面向块的命令
2 Block块大小就是发送块传输命令时传输的数据字节数大小可变也可以固定块的大小及编程存储在CSD寄存器中。图1-2 一次擦除单元的粒度一般与面向块命令不同Sector这是和擦除命令有关的单元每个设备扇区的大小事固定
的扇区的大小信息存储在CSD寄存器中。具有写保护的卡WP Group拥有独立写保护的最小单元Its size is
the number of groups which will be write protected by one bit每张卡WP Group的大小也是固定的大小信息存在CSD中。数据传输速率SD卡可以单数据线DAT0或4数据线DAT0-3进行数据传输单线最大速率为25Mbps4线最大为100Mbps。擦除最小擦除单元是卡的一个扇区为了提高效率也可以多块扇区一起擦除首先发送 3 一条带有起始扇区地址的命令接着发送一条带有结束扇区地址的命令它们之间的扇区将全部被擦除。写保护有两个保护级别可供选择永久的和暂时的可以通过PROGRAM_CSD命令设置永久写保护位一旦设置就无法清除这项特性应用在SD卡控制器固件。SPI Mode: 卡识别过程主机必须知道连接在总线上的卡的个数主机通过选定CSCD/DAT3线来选定卡内部带上拉电阻的DAT3线可以用来做卡插入侦测。Card Status在SPI模式下只有16bit可以从32bit的SD Card status寄存器中读出与SD模式下一样可以用ACMD13读出SD_STATUS。存储空间阵列分区与SD 模式下一致。读写操作在SPI模式下可以支持多块和单块数据传输。数据传输率SPI模式下只有单根数据线25Mbps。擦除、写保护与SD模式一致。图2-1 SD卡外形尺寸 4 图2-2 SD引脚尺寸图2-3 SD模式下管脚分配图5 NOTE1 S电源IinputOoutput 使用上拉驱动2上电后DAT1-3为input发送SET_BUS_WIDTH命令后DAT1-3才作为数据线应连接外部上拉电阻尽管有可能只用DAT0. 3上电后内部有50Kohm的电阻上拉可以用作卡插入侦测上拉可通过
SET_CLR_CARD_DETECTACMD42命令断开。图2-4 SPI模式下管脚分配
input命令NOTE1S电源IinputOoutput 2RSV为浮动输入需外接上拉电阻。图2-5 SD卡的寄存器SD卡有自己的上电检测电路以此来使上电后卡进入idle状态也可以用
GO_IDLECMD0命令来复位SD卡。6 图2-6 SD卡结构图SD模式CMD 双向信号线DAT0-3双向信号线CLK 主机到卡的线VDD 卡的电源线VSS1:2:地线SPI模
式CS: 主机到卡的线CLK 主机到卡时钟线DI 主机到卡数据线DO 卡到主机数据线SPI模式和SD模式一样是字节传输数据传输都是8bit的整数倍并且和CS对齐SPI传输过程中CS必须有效除卡编程card programming的时候SPI模式中使用的是SD 模式协议和命令的子集。上电SD模式上电7 图2-7 SD模式下上电过程上电后SD 卡进入idle状态该状态下SD卡不管任何传输直到接收到ACMD41命令ACMD41命令判断操作电压范围以及查询SD卡直到SD卡退出上电流程。除此之外ACMD41的应答还包括了忙标志位表明SD卡是否就绪单卡上电流程时间不能大于1s。上电完成后主机发送时钟并且通过CMD线发送初始化系列操作这个系列就是连续的‘1’电平系列的长度为最大值1ms74个时钟周期或者电源上升时间。所有的主机都必须能完成ACMD41和CMD1CMD1是用于查询MMC卡的操作状态的在任何状态下
ACMD41或者CMD1必须通过CMD线分别发送到每一张卡上。8 总线电路图2-8 总线电路信号线负载要求如表2-1所示表2-1 信号线负载要求其中CLChostCbusNCcard Chost主机电容Cbus总线电容Ccard卡电容输入输出0/1电平范围表2-2 输入输出0/1电压范围9 SD模式下SD卡寄存器OCROperating Conditions Register 32bit存储SD卡的操作电压等级在2.0-3.6V的电压范围内SD卡能够进行电压识别过程。然而访问在存储区的数据却需要在2.7-3.6v的电压范围内OCR 寄存器给出了能进行数据访问操作的电压范围表2-3给出了寄存器的内容表2-3 OCR寄存器内容10 图2-9 OCR寄存器结构如果busy位置位表
明SD已经完成了上电流程。CIDCard Identification Register CID为16byte的寄存器包含了唯一的卡号卡号是在制造时写入的并且不可被更改SD与MMC有不同的CID寄存器。CSDCard Specific Data寄存器CSD包含卡的配置信息11 SCRSD CARD ConfigurationRegister 结存器它和CSD寄存器一样是SD卡的配置寄存器它提供了SD卡的特性64bit该寄存器在制造时就被设置好了。12 RCA寄存器16bit的与卡地址相关的寄存器它是卡识别完成后主机和卡的通讯地址。SPI模式下所有的寄存器都是可访问的它们的格式也和SD模式下的格式相同但一些区域SPI模式下不允许访问。3、SD卡协议SD 总线协议SD总线的通讯是基于命令和数据流的使用一个起始位开始一个停止位结束。命令命令是一个操作的起始令牌一个命令或者发送给一个卡addressed command或者发送给全部卡broadcast command命令通过CMD线串行传输。应答应答是一张卡或全部连接的卡的数据起始令牌它作为先前命令的应答它同样是通过CMD线串行传输的。数据数据则是双向的数据传输通过数据线。SD模式命令、应答和数据传送没有应答和没有数据传输卡地址是在初始化阶段分配的SD卡总线就是基于命令应答的传输。13 命令编码格式应答编码格式应答根据内容不同一共有4种格式长度为48bit或者136bit。在CMD线上MSB先发然后才是LSB。当使用4个数据线时数据一次传送4bit起始位、停止位和CRC校验位分别发送各个数据线的CRC计算和校验分别独自进行。状态应答寄忙标志只在上传送在这期间上的数据不必关心。14 线和线传送格式协议的功能说明主机发送以下两种命令Broadcast Command针对所有卡的命令有写命令需要应答。AddressedPoint-to-PointCommand 发送到特定一张卡的命令需要应答。两种操作模式卡识别模式复位后主机会进入该模式下在该模式中主机会在总线上查卡SD卡将一直在这个模式下直到接收到SEND_R
CACMD3命令。当卡处于该模式下主机复位所有的卡检测操作电压、识别SD卡和发布它们的RCA这些操作时各个卡在自己的CMD线上分别进行的在该模式
下所有的数据都是通过CMD传送的。数据传送模式SD卡一旦发布RCA就会进入数据传送模式所有的卡都被识别了后主机将进入数据传送模式。15 状态转换图复位软件复位命令为GO_IDLE_STATECMD0除了Inactive状态外的其他状态收到该命令后都将进入IDLE状态上电后所有的卡都将进入IDLE状态包括处于Inactive状态的卡在开始总线使用之前必须发发送至少74个时钟。上电后或收到CMD0后SD卡的CMD 线处于输入模式等待下一个命令的起始位SD卡的RCA将被初始化为一个默认值RCA0x0000并且配置为一个默认驱动级配置低速、高驱动电流能力。Page59 16 Page87 SPI协议定义SPI模式下所有的命令和数据都是基于8bit和字节与CS对齐的基础上。SPI信息也是由命令、应答和数据块令牌建立起来的所有的通讯都有主机控制发生通过使CS有效低电平来开始总线传输。SPI模式的应答与SD模式的应答在以下三个方面不同被选中的卡总是应答命令使用8bit或者16bit的应答格式当遇到传输出错时主机将接受到错误应答而不是SD模式下的超时应答。模式选择将处于SD模式下的SD卡唤醒如果接受复位命令CMD0的时候CS被选中则SD卡进入SPI模式。SD卡切换到SPI模式并发送SPI模式下的R1应答。唯一回到SD模式的方法就是重新上电默认的SPI命令结构式没有CRC校验的因为上电后进入SD模式所以CMD0命令要跟着一个有效的CRC字节尽管命令式使用SPI模式下的命令结构发送的。CMD0是静态命令其CRC校验码为7bit的0x4a加上一位停止位‘1’即CRC0x95CMD0命令系列为40_00_00_00_00_95SPI模式提供的是
没有数据保护的传输没有CRC保护但是还需要CRC位只是不必关系它的值。主机可以通过CRC_ON_OFFCMD59命令来开关CRC校验功能。读取数据SPI支持单块和多块的数据读CMD17和CMD18SD 卡接收到有效的读命令后将发送一个应答信号应答信号后紧接着要读取的数据读取数据的长度由SET_BLOCK_LENGTHCMD16命令设定数据块后会接着一个16bit的CRC检验码多项式为x16x12x51读取的最大长度为512这是由READ_BL_LENCSD参数决定的读取数据块的长度可以从1到READ_BL_LEN变化。起始地址为可以为任意有效的字节地址但读取内容必须在同一个物理扇区内待验证。多块读使用16bit的CRC校验通过CMD12来停止多块数据的读操作。17 数据写单块写SPI模式支持单块和多块数据的写入操作接收到有效的写入命令CMD24和CMD25后SD卡发送应答并等待写入数据CRC校验和地址的规定和读操作时一样的但唯一有效长度为512字节所有的数据块都有一个起始令牌一个字节当数据块接收到后SD卡将发送数据应答令牌如果接收无误则将进行编程写入只要SD卡编程忙SD卡将发送一个持续的忙数据流给主机一直将DO拉低一旦编程完成主机需使用SEND_STATUSCMD13命令检查编程结果唯一有效的检查操作就是CRC检验和写错误标志。多块写多块写操作由Stop Tran令牌在下一个块处终止主机通过SEND_NUM_WR_BLOCKS来获得写入块的数量。当SD卡编程时复位CS信号并不会终止编程但DO会变成高阻如果在未完成编程时拉低CSDO将继续拉低并且拒绝所有命令。复位SD卡CMD0将终止所有即将或这在编程的操作这将损坏数据格式。擦除和写保护可以同时擦除多个块来增强数据传输能力这是通过ERASE_WR_BLK_STARTCMD32、
ERASE_WR_BLK_ENDCMD33来完成的主机必须按以下顺序发送命令
ERASE_WR_BLK_STARTCMD32、ERASE_WR_BLK_ENDCMD33、ERASECMD38。如果CMD32CMD33CMD38不是按以上次序发送则SD卡应置位状态寄存器中的ERASE_SEQ_ERROR位并复位整个流程接收到任何一个不在上述次
序中的命令除SEND_STATUSSD卡都将置位状态寄存器中的ERASE_RESET位复位整个擦除的流程如果擦除范围包含保护扇区则保护扇区不变而只有非保护扇区被擦除并且状态寄存器中的WP_ERASE_SKIP位将被置位。地址设置命令中的地址区域是以字节为单位的SD卡忽略小于WRITE_BLK_LEN大小的LSB位。擦除区域中的擦除完后的数据可能为1也可能为0这取决于SD卡的供应商SCR寄存器中的
DATA_STAT_AFTER_ERASEbit 55定义了到底是1还是0。写保护写保护包括3种机械写保护内部写保护和密码保护。机械保护SD卡侧边有一个机械的滑动开关用于对卡进行保护与否的控制。内部写保护该保护能使数据不被重写和擦除通过设置CSD的永久/暂时位可以使整张卡都处于永久保护的状态18 读CID/CSD寄存器和SD模式不同读取CSD/CID寄存器的内容就是一次块传输的过程SD卡会发送一个
标准的应答并跟着一个带有CRC-16的数据块。复位序列电源上电复位或CMD0复位后Sd卡进入IDLE状态在此状态下合法的命令为CMD1、ACMD41、CMD59和CMD58。主机必须一直查询卡通过重复发送CMD1直到应答中的in_idle_state为为0表明SD卡完成了初始化过程并准备好接收下一条命令。CMD1命令没有参数operands操作数主机使用CMD58去读取OCR寄存器当SD卡电压不合适的时候主机
应该避免对它的访问。但CMD58并不仅限于初始化阶段使用。时钟控制SPI总线时钟可以被主机设置以使SD卡节省能耗和调整总线的传输速率主机允许改变时钟
频率甚至关掉时钟。SPI模式下的限制1、总线频率可以再任何时候改变但要小于最大传输速率。2、SPI最后一个总线传输后当主机要关掉时钟时需要再发送8个时钟后才能关闭时钟。在这期间CS可以选中也可以不选中。命令/应答序列SD卡应答停止位过后发送8个时钟。读数据传输最后一个数据块的停止位过后发送8个时钟。写数据传输CRC状态令牌后发送8个时钟。3、对于状态忙的卡主机可以关闭其时钟没有时钟信号SD卡依旧可以完成编程操作但主机必须提供一个时钟边沿以消除
忙标志没有时钟边沿SD卡将永远拉低DO脚。错误条件CRC和非法命令以下任意一条将可能使SD卡拒绝命令在读操作的时候发送的命令除CMD12以外在SD卡忙的时候发送的命令SD卡锁定并且命令不是Class0或者Class7 不支持的命令CRC
检验失败命令包含一个非法的操作擦除次序中不在次序内的命令SD卡发送读操作的数据块时发送的命令的应答将有可能打乱数据的传输。读、写和擦除超时条件读操作的超时时间是100次或者100ms写/擦除操作的超时时间是100次或者250msSD 卡必须在上面规定的时间内完成操作或者发送错误应答如果SD卡在规定的时间内
没有应答则主机认为SD卡不准备进行应答并且恢复复位卡、重新上电。读读允许时间是CSD寄存器中
的TAAC和NSAC两者的和这些参数定义了典型的从读命令的
停止位到数据块的起始位的延时。写CSD寄存器中的R2W_FACTOR域是用于计算典型的块编程时间通过读取时间乘以该因子得到。它可以应用于所有的写/擦除命令。擦除擦除命令持续的时间为写入块数乘以块写入延时。存储矩阵分区与SD模式相同。SD卡锁定和解锁功能是SanDisk的SD卡。SPI命令19 SPI模式下命令和SD模式下一致除了APP_CMD位外。SPI命令集SPI命令为6 byte长度并且MSB先发送。CRC-7x7 x3 1 SPI模式下的命令分为若干类每一类都支持了一序列的卡的功能操作在两种模式下SD卡支持同一套可选命令类。SPI模式和SD模式所支持的和可选的命令类是不一样的。20 命令的详细描述Note如果命令没有参数则参数值设为0保留命令与SD模式一致二进制编码的命令被定义为一个助记符如CMD0的命令
区域为二进制000000命令CMD39的命令区域为100111。 1 写操作唯一有效的长度是512byte读有效长度为1-512byte设置块长度小于512byte将引起写错误如果默认值被接受则CMD16设置的值并不是强制性的。2 起始地址和块长度必须设置以使数据传输时不会超越一个物理块的边界。3 数据后面跟着应答和busy。 4 起始地址和一个山区的边界对齐块长度一般是512字节。21 Note 1 SanDisk SD卡目前不支持该区域。 2 32位写保护位通过数据线以payload格式传输其后跟着CRC-16。 3
RD/WR_1主机从SD卡接收一个数据块0主机发送一个数据块到SD卡。22 应用程序特殊命令以下命令为
应用程序特殊命令所有的特殊命令前面都要先发送CMD55。应答SPI模式下MSB先发送。R1 除SEND_STATUS命令另外所有命令的应答格式长度为1个字节MSB总是设置为0其他位为错误标志1表示错误发生。23 In idle stateSD卡处于idle状态并且正在进行初始化操作。Erase reset接收到的擦除命令次序错导致的擦除序列清除。Illegal command接收到非法命令。Communication CRC error最后一个命令CRC校验错。Erase sequence error擦除命令序列中发生错误。Address error地址未对齐。Parameter error命令的参数不在给定的范围之内。R1b 除busy信号外R1b的应答格式与R1完全一致busy信号可以使任意个字节0表示SD卡处于忙状态而不为0的状态即表示SD卡转备好接收下一条命令。R2 该应答为2个字节是SEND_STATUS命令的应答。Erase param擦除选择的扇区无效。Write protect violation命令尝试写一个保护块。R3 该应答是发送命令READ_OCR后SD卡发送给主机的应答应答长度为5个字节该结构的第一个字节为R1应答的格式其余4个字节包含OCR寄存器。数据应答所有写到SD卡的数据块都将通过数据应答告知数据应答为1字节并且具有如下格式24 Status位的定义如下010数据被接受101CRC错误数据被拒绝110写错误数据被拒绝当写多块的时候发生任何错误CRC或者写错误主机应该使用CMD12停止数据传输当发生写错误时主机可以发送
CMD13SEND_STATUS来获得发生错误的原因ACMD22命令可以获得成功写入的数据块的数量。数据令牌读数据和写数据都使用数据令牌数据通过数据令牌进行发送和接收所有的数据字节都为MSB先发送。数据令牌长度为4-515个字节格式如下单块读、单块写和多块读第一个字节起始字节字节2-513长度
由数据块长度决定用户数据最后2个字节CRC-16 多块写每一个数据块的第一个字节如果传送数据—start block 如果停止传输—stop tran 数据错误令牌如果读取操作失败并且SD卡无法提供需要的数据则SD卡将发送一个数据错误令牌该令牌为1 byte格式如下SD 卡寄存器SPI模式下只有OCR、CSD、CID寄存器可用格式和SD模式下一致但有一些字段在SPI模式25 下是无效的。SPI总线时序图SD卡准备好状态下主机命令到SD卡应答接收到SD卡应答后主机必须保持时钟运行至少NCR时钟周期SD卡忙状态下主机命令到SD卡应答数据读数据块读操作除SEND_CSD时序多块传输中的停止传输操作26 读CSD寄存器SEND_CSD命令的总线传输应答和数据的超时时间为NCR。写数据在SD卡忙时主机可以再任何时候释放CSCS变高的第一个时钟SD卡释放DO线检查SD卡是否还是忙主机需要重新拉低CS线选中SD卡SD卡在CS 下降沿后的第一个时钟恢复忙状态。时序参数值SPI卡电气接口SPI模式下的电气接口与SD模式一致。SPI总线操作条件和SD模式下相同。主机设计注意事项时序如果需要支持MMC卡则时钟的速度应能被主机控制因为MMC卡是开漏模式的MMC卡在开漏模式下的上电操作时钟不能大于400kHz一旦完成初始化MMC将切
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论