SD详细命令描述
- 格式:doc
- 大小:81.00 KB
- 文档页数:6
NOTE:1) class1,class3,class9:SPI模式不支持!2) 继SD1.1之后又推出了SD2.0,主要特性是支持更大容量。
SD1.1中卡容量存放于CSD 寄存器中,而由于其规范中相关域的值较小,固最大只能表示2G地址。
随着Nand容量的大大提高,SD1.1已经不适合潮流,因而推出了SD2.0。
初始化流程大同小义,只需要CMD0之后再加上CMD8命令的识别。
SD1.1不支持CMD8,而SD2.0的CMD8能读到卡的接口信息。
如果卡响应CMD8为无效命令,则走SD1.1的流程,可能是SD1.1或MMC。
如CMD8响应正确,则很可能是SD2.0了。
3) SD卡具有安全加密功能,内置128bit加密位,在加密状态下,用户需提供密码才可以访问卡内的数据。
在卡上电时,若卡包含密码,卡自动进入锁定状态,读写命令均返回错误,以保护卡内容不被读出及修改。
密码设置功能由CMD42实现,其数据包中包括该命令中所有的信息。
Byte Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit00 Erase Card Lock/UnLock ClrPwd SetPwd1 Psw_Length2 Pwd Data...PwdLen+1擦除:此位置1时,卡的密码和内容会被强制擦除,在遗忘密码时可使用此功能。
锁定/解锁:此位置1时,表示命令结束后状态为锁定,为0,表示卡解锁。
清除密码:此位置1,表示清除卡的旧密码,此时数据中必须包含旧密码的正确内容。
加密:此位置1,表示设置卡的新密码,数据中必须包含新密码内容;更改密码时,新密码紧跟随旧密码内容。
在任意刻,主机可以通过CMD13命令读取卡的内部状态,判断其锁定状态。
bit0置1表示卡处于锁定状态。
1、设置密码使用CMD16设置Block长度为密码长度为PWD_LEN+2;发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;发送命令数据:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;使用CMD16恢复原Block长度。
4 SD卡功能描述4.1 概述主机与卡之间的所有通讯都由主机控制。
主机发送两类命令:广播命令和定址命令(点对点)。
●广播命令:广播命令适用于所有卡,部分命令需要响应回复。
●定址命令(点对点)定址命令发给已确定地址的卡,引发卡响应回复。
表格4-1显示卡片辨识模式命令流程总览,表格4-3针对数据传输模式。
表格4-19和表格4-28罗列了所有命令。
表4-29罗列了当前状态、命令接收和随后模式之间的依赖关系。
在接下去的章节中,会首先描述各类卡片操作模式。
然后,定义始终信号控制条件。
SD卡所有关于命令、响应、状态转换、错误条件和定时都会在随后的章节中描述。
SD卡系统(主机和卡片)定义两种操作模式:●卡片辨识模式主机复位后或者在总线上搜索新卡时,会进入卡片辨识模式。
卡片复位后也进入这个模式,直到收到SEND_SCR命令(CMD3)。
●数据传输模式当卡片的RCA首次确定后立即进入数据传输模式。
主机要识别完总线上所有卡片后进入数据传输模式。
下面的表格展示了操作模式和卡片状态之间的关系。
SD卡状态表中的每个状态都与一种操作模式相关。
表4-1 卡片状态和操作模式总览4.2 卡片辨识模式在卡片辨识期间,主机复位所有在卡片辨识模式中的SD卡,确认操作电压范围,辨识卡片以及要求确定相对卡片地址(RCA)。
这个操作通过SD卡CMD口线各自独立完成。
卡片辨识模式中所有的数据传输只能使用CMD口线通道(CMD)。
在卡片辨识过程中,SD卡使用辨识时钟速率f OD(见6.7章)作为SD卡时钟频率。
4.2.1 卡片复位命令GO_IDLE_STATE(CMD0)是一个软复位命令,要求卡片立即忽略当前模式进入空闲模式。
卡片在非活动模式时该命令无效。
主机上电后,所有卡片进入空闲模式,包括之前在非活动模式下的卡片。
在上电或CMD0命令后,所有卡片CMD口线进入输入模式,等待下个命令的起始位。
卡片初始化时使用默认相对地址(RCA=0x0000),以及默认驱动寄存器设置(最低速度,最大驱动电流能力)。
一概述1. SD总线模式下CLK:时钟信号CMD:双向命令和响应信号DAT0-3:双向数据信号VDD,VSS:电源和地信号SD模式下允许有一个主机, 多个从机(即多个卡), 主机可以给从机分别地址. 主机发命令有些命令是发送给指定的从机,有些命令可以以广播形式发送.SD模式下可以选择总线宽度, 即选用几根DAT信号线, 可以在主机初始化后设置.2. SD总线协议SD模式下的命令和数据流都有一个开始位和结束位.>命令: 是在CMD上传输的用于启动一个操作的比特流. 由主机发往从机, 可以是点对点也可以是广播的.>响应: 是在CMD上传输的用于之前命令回答的比特流. 由从机发往主机.>数据: 是在DAT上传输的比特流, 双向传输.无响应模式无数据模式多块读操作模式多块写操作模式命令格式响应格式数据格式SD卡上电后会自动初始化,通过给卡发送CMD0也可以复位卡.二.SD卡命令描述.1.广播命令:给所有卡都发送, 某些命令需要响应.2.点对点命令给指定地址的卡发送, 需要响应.SD卡系统有两种工作模式:1.卡识别模式.主机上电复位后即处于此模式,它会在总线上等待卡. 卡复位后也处于此模式, 直到SEND_RCA(CMD3)命令到来.2.数据传输模式.卡收到SEND_RCA(CMD3)命令后即进入此模式. 主机识别到卡后也进入此模式.卡状态和工作模式对照表1.卡识别模式.此模式下主机复位总线所有的卡, 验证工作电压, 询问卡的地址. 这个模式下所有数据的传输都是只通过CMD线来完成.1)卡的复位.当卡上电或收到GO_IDLE_STATE (CMD0)命令后, 卡即进入Idle State状态. 此时卡将其RCA设为0, 相关寄存器设为传输稳定的最优模式.2)工作电压验证每个卡的最高和最低工作电压存储在OCR. 只有当电压比配时, CID和CSD的数据才能正常传输给主机.SD_SEND_OP_COND (ACMD41)命令用来判断卡的工作电压是否符合, 如果不符合的话, 卡应该放弃总线操作, 进入Inactive State(关闭状态)状态. 在发送SD_SEND_OP_COND (ACMD41)命令前记得要首先发送APP_CMD (CMD55).卡的状态变换图.ACMD41命令响应中的BUSY位也用于卡表示其还没准备好, 主机此时应重发ACMD41命令,直到卡准备好.主机在这个阶段的ACMD41中不允许改变工作电压, 如果确实想改变的话, 应该先发送CMD0, 然后再发送改变后的ACMD41.GO_INACTIVE_STATE (CMD15)命令用于使指定地址的卡进入Inactive State(关闭状态)模式.3)卡识别过程.ALL_SEND_CID (CMD2)命令用于获取卡的CID信息, 如果卡处于Ready State, 它就会在CMD线上传送它的CID信息, 然后进入Identification State(状态识别)模式. 紧接着发送CMD3 (SEND_RELATIVE_ADDR)命令, 用于设置卡新的地址. 卡收到新的地址后进入Stand-by State模式.2.数据传输模式.数据传输模式下卡的状态转变图进入数据传输模式后, 主机先不停的发送SEND_CSD (CMD9)命令获取卡的CSD信息. SET_DSR (CMD4)用于设置卡的DSR寄存器, 包括数据总线宽度, 总线上卡的数目, 总线频率, 当设置成功后, 卡的工作频率也随之改变. 此步操作是可选的.CMD7命令用于使指定地址的卡进入传输模式, 任何指定时刻只能有一个卡处于传输模式.传输模式下所有的数据传输都是点对点的, 并且所有有地址的命令都需要有响应..所有读命令都可以由CMD12命令停止,之后卡进入Transfer State. 读命令包括单块读(CMD17), 多块读(CMD18), 发送写保护(CMD30), 发送scr(ACMD51)和读模式一般命令(CMD56)..所有写命令都可以由CMD12命令停止. 写命令包括单块读(CMD24), 多块读(CMD25), 写CID(CMD26), 写CSD(CMD27),锁和解锁命令(CMD42)和写模式一般命令(CMD56)..当写命令传输完成后, 卡进入Programming State(传输成功)或Transfer State(传输失败).如果一个卡写操作被停止,但其前面数据的CRC和块长度正确, 数据还是会被写入..卡要提供写缓冲, 如果写缓冲已满并且卡处于Programming State, DAT0保持低BUSY. .写CID,CSD, 写保护, 擦除命令没有缓冲, 当这些命令没完时, 不应发送其他的数据传输命令..参数设置命令在卡被编程时是不允许发送的, 这些命令包括设置块长度(CMD16), 擦除块起始(CMD32)和擦除块结束(CMD33)..当卡正编程时读命令是禁止的..用CMD7使另一个卡进入Transfer State不会终止当前卡的编程和擦除, 当前卡会进入Disconnect State并且释放DAT线.. Disconnect State模式的卡可通过CMD7重新被选中,此时卡进入Programming State 并且使能busy信号.. CMD0或CMD15会终止卡的编程操作, 造成数据混乱, 此操作应禁止.1)总线宽度选择命令ACMD6命令用于选择总线宽度, 此命令只有在Transfer State有效. 应在CMD7命令后使用.2)块读命令块是数据传输的最小单位, 在CSD (READ_BL_LEN)中定义, SD卡为固定的512B.每个块传输的后面都跟着一个CRC校验. CMD17(READ_SINGLE_BLOCK)用于传输单个块,传输完之后,卡进入Transfer State. CMD18 (READ_MULTIPLE_BLOCK)用于多个块的传输,直到收到一个CMD12命令.3)块写命令与块读命令类似, 每个块传输的后面都跟着一个CRC校验.卡写数据时会进行CRC校验.多块写比重复的单块写更能提高效率.如果CSD中的WRITE_BLK_MISALIGN没设置, 并且发送的数据不是块对齐的, 卡会设置状态寄存器中的ADDRESS_ERROR位,并且进入Receive-data-State状态等待停止命令.此时写操作也会停止, 并且卡会设置其的WP_VIOLATION位.如果写缓冲满的话, 卡会停止接受WRITE_BLOCK命令. 此时主机应发送SEND_STATUS (CMD13)命令, 卡返回数据的READY_FOR_DATA位标志卡是否准备好接受新的数据.在多块写操作中通过事先发送ACMD23命令可提高写速度. ACMD23用于定义接下来要写数据的块的数目. 每次多块写操作后, 这个值又被设为默认的1.ACMD22会使卡返回写成功的块数目.4)擦除命令擦除命令的顺序是: ERASE_WR_BLK_START(CMD32),ERASE_WR_BLK_END(CMD33)and ERASE (CMD38).如果(CMD38或(CMD32, 33)接收到出错信息, 卡会设置状态寄存器中的ERASE_SEQ_ERROR 位并且重新等待新的命令时序.如果接收到时序错误命令, 卡会设置其ERASE_RESET位并且重新等待新的命令时序.5)写保护管理三种机制:-.写保护物理开关-.卡内部写保护通过设置CSD中的WP_GRP_ENABLE位和WP_GRP_SIZE位, SET_WRITE_PROT和CLR_WRITE_PROT命令用来设置和清除保护机制.-. 密码保护.三. 时钟控制如果主机要发送1K的数据, 但是主机缓冲区只有512B, 那么主机可以在发送完前512B 后, 可以先停止时钟, 然后把后512B填充入缓冲区, 再启动时钟, 这样卡并不会检测要两次发送之间的间隔, 认为其是一次完整的数据发送过程.四 CRC校验1.CRC7CRC7用于所有的命令, 除R3以外的响应, 以及CID和CSD寄存器.2.CRC16CRC16用于数据块的校验五. 错误类型.1. CRC错误和命令非法错误命令的CRC校验出错, 卡设置其状态寄存器的COM_CRC_ERROR位.非法命令错误, 卡设置其状态寄存器的ILLEGAL_COMMAND位.非法命令包括:不支持的命令,未定义的命令以及当前状态不支持的命令.2. 读,写和擦除超时.卡应该在指定的时间内完成一个命令或返回移动的错误信息. 如果在指定的超时时间内主机收不到响应, 应认为卡停止工作, 应重新复位卡.六命令1. 命令类型:- bc不需要响应的广播命令.- bcr需要响应的广播命令. 每个卡都会独立的接收命令和发送响应.- ac点对点命令, DAT线上没数据- adtc点对点命令, DAT线上有数据所有命令均遵守上图中的格式, 总共48位. 首先是1个起始位0, 接着是1个方向位(主机发送位1), 6个命令位( 0-63 ), 32位参数(有些命令需要), CRC7位校验, 1个停止位.2.卡命令根据不同的类型分成了不同的Class, 见下表,其中Class0,2,4,5,8是每个卡都必须支持的命令, 不同的卡所支持的命令保存在CSD中.3.命令详细描述1)基本命令Class02)读命令Class23)写命令Class43)擦除命令Class54)应用特定命令Class8下表中的所有命令使用前都应先跟一个APP_CMD(CMD55)命令七. 卡状态转换表八. 应答.所有的应答都是通过CMD发送,不同的应答长度可能不同.总共有四种类型的应答.1. R1: 长度位48位.注意每个块传输完成后有一个BUSY位.2.R1b:与R1类似, 只是将BUSY位加入响应中.3.R2(CID CSD寄存器) : 长度为136位, CID为CMD2和CMD10的应答, CSD为CMD9的应答.4.R3(OCR寄存器):长度位48位. 作为ACMD41的应答.5.R6(RCA地址应答):长度为48位九. 卡的状态SD卡支持两种状态:-卡状态:与MMC卡兼容.-SD卡状态:扩充到了512位.1.卡状态:R1应答包含一个32位的卡状态.见下表.其中Type中的含义为:E:错误位. S:状态位. R:根据命令在响应中设置.X:根据在命令执行期间设置, 必须再次读此位才能获得命令执行后的情况.Clear Condition:A: 与卡的当前状态有关B: 总是与命令有关,无效的命令会清除此位.C: 通过读此位来清除下表指明了哪些命令可能使哪些位产生变化2.SD卡状态:这些位通过DAT线传输, 并伴有CRC16校验. 其是作为ACMD13的应答.十. 卡存储器形式.-块:块是基本读写命令的单位,它可以是固定的或可变的. 关于块的大小以及其是否可变性存储在CSD中.-扇区:扇区是擦除命令的单位, 它是固定的值,保存在CSD中.十一. 时序图时序图中字母含义:1.命令和应答1)卡识别和卡工作电压确认模式:CMD2,ACMD412)地址分配模式:CMD33)数据传输模式:4)命令结束->下一个命令:5)两个命令直接1)单块读:CMD172)多块读:读过程时序.停止命令时序3.数据写1)单块写:注意Busy信号.2)多块写:多块写命令时序停止命令时序卡主动停止时的时序十二.寄存器.SD卡有六个寄存器OCR, CID, CSD, RCA, DSR and SCR. 其中前四个保存卡的特定信息, 后两个用来对卡进行配置.1.OCR寄存器:保存有卡支持的工作电压, 支持的话相应的位置1,否则为0.2.CID:保存有卡的身份信息.3.CSD保存有如何访问卡的信息.TAAC定义了数据访问的异步时间部分. NSAC为数据访问最坏需要的异步时间.TRAN_SPEED定义了单条DAT线上的最快速度:CCC:SD卡支持的命令集READ_BL_LEN:最大读块长度. WRITE_BL_LEN等于READ_BL_LENDSR_IMP: DSR寄存器是否允许配置, 1为允许,0为不允许.FILE_FORMAT: SD卡上的文件格式.4.RCA保存有卡的地址信息.5.DSR用于配置卡, 默认值为0x4046.SCR寄存器也保存有卡的特定信息.SD_BUS_WIDTHS指明卡支持的传输类型.第二部分 S3C2410 SD卡控制器一 SDI操作1.CPU寄存器设置过程.1)正确设置SDICON寄存器.2)正确设置SDIPRE寄存器.3)等待74个时钟信号初始卡.2.CMD命令发送过程.1)向SDICARG寄存器中写入发送的参数.2)确定命令类型并且通过设置SDICCON[8]来启动命令.3)确定命令是否发送完成. 没应答的话看SDICSTA[11], 有应答的话看SDICSTA[9].4)清除SDICSTA中的相应位.3.数据传输过程.1)向SDITIMER中写入超时值.2)向SDIBSIZE中写入块大小的值.3)设置块模式,总线宽度等, 通过SDIDCON启动传输.4)通过SDIFSTA检查TxFIFO是否可用, 再通过SDIDAT写入发送数据.5)通过SDIFSTA检查RxFIFO是否可用, 再通过SDIDAT读入接收数据.6)通过检查SDIDSTA[4]确定传输过程已完成.7)清除SDIDSTA中的相应位.4. SDIO有两种工作模式,中断和读等待模式.二. SDI寄存器.1.SDICON:SDI控制寄存器字节序类型:Type A: D[7:0] D[15:8] D[23:16] D[31:24]Type B: D[31:24] D[23:16] D[15:8] D[7:0]2.SDIPRE:波特率预分频寄存器.4. SDICCON:SDI命令控制寄存器.5. SDICSTA:SDI命令状态寄存器.6.SDIRSP0-SDIRSP3:命令响应寄存器8. SDIBSIZE:SDI块大小寄存器.9. SDIDCON:SDI数据控制寄存器10. SDIDCNT:SDI数据维持寄存器.12. SDIFSTA:SDI FIFO状态寄存器13. SDIDAT:SDI数据寄存器。
一概述1. SD总线模式下CLK:时钟信号CMD:双向命令和响应信号DAT0-3:双向数据信号VDD,VSS:电源和地信号SD模式下允许有一个主机, 多个从机(即多个卡), 主机可以给从机分别地址. 主机发命令有些命令是发送给指定的从机,有些命令可以以广播形式发送.SD模式下可以选择总线宽度, 即选用几根DAT信号线, 可以在主机初始化后设置.2. SD总线协议SD模式下的命令和数据流都有一个开始位和结束位.>命令: 是在CMD上传输的用于启动一个操作的比特流. 由主机发往从机, 可以是点对点也可以是广播的.>响应: 是在CMD上传输的用于之前命令回答的比特流. 由从机发往主机.>数据: 是在DAT上传输的比特流, 双向传输.无响应模式无数据模式多块读操作模式多块写操作模式命令格式响应格式数据格式SD卡上电后会自动初始化,通过给卡发送CMD0也可以复位卡.二.SD卡命令描述.1.广播命令:给所有卡都发送, 某些命令需要响应.2.点对点命令给指定地址的卡发送, 需要响应.SD卡系统有两种工作模式:1.卡识别模式.主机上电复位后即处于此模式,它会在总线上等待卡. 卡复位后也处于此模式, 直到SEND_RCA(CMD3)命令到来.2.数据传输模式.卡收到SEND_RCA(CMD3)命令后即进入此模式. 主机识别到卡后也进入此模式.卡状态和工作模式对照表1.卡识别模式.此模式下主机复位总线所有的卡, 验证工作电压, 询问卡的地址. 这个模式下所有数据的传输都是只通过CMD线来完成.1)卡的复位.当卡上电或收到GO_IDLE_STATE (CMD0)命令后, 卡即进入Idle State状态. 此时卡将其RCA设为0, 相关寄存器设为传输稳定的最优模式.2)工作电压验证每个卡的最高和最低工作电压存储在OCR. 只有当电压比配时, CID和CSD的数据才能正常传输给主机.SD_SEND_OP_COND (ACMD41)命令用来判断卡的工作电压是否符合, 如果不符合的话, 卡应该放弃总线操作, 进入Inactive State状态. 在发送SD_SEND_OP_COND (ACMD41)命令前记得要首先发送APP_CMD (CMD55).卡的状态变换图.ACMD41命令响应中的BUSY位也用于卡表示其还没准备好, 主机此时应重发ACMD41命令,直到卡准备好.主机在这个阶段的ACMD41中不允许改变工作电压, 如果确实想改变的话, 应该先发送CMD0, 然后再发送改变后的ACMD41.GO_INACTIVE_STATE (CMD15)命令用于使指定地址的卡进入Inactive State模式.3)卡识别过程.ALL_SEND_CID (CMD2)命令用于获取卡的CID信息, 如果卡处于Ready State, 它就会在CMD线上传送它的CID信息, 然后进入Identification State模式. 紧接着发送CMD3 (SEND_RELATIVE_ADDR)命令, 用于设置卡新的地址. 卡收到新的地址后进入Stand-by State 模式.2.数据传输模式.数据传输模式下卡的状态转变图进入数据传输模式后, 主机先不停的发送SEND_CSD (CMD9)命令获取卡的CSD信息. SET_DSR (CMD4)用于设置卡的DSR寄存器, 包括数据总线宽度, 总线上卡的数目, 总线频率, 当设置成功后, 卡的工作频率也随之改变. 此步操作是可选的.CMD7命令用于使指定地址的卡进入传输模式, 任何指定时刻只能有一个卡处于传输模式.传输模式下所有的数据传输都是点对点的, 并且所有有地址的命令都需要有响应..所有读命令都可以由CMD12命令停止,之后卡进入Transfer State. 读命令包括单块读(CMD17), 多块读(CMD18), 发送写保护(CMD30), 发送scr(ACMD51)和读模式一般命令(CMD56)..所有写命令都可以由CMD12命令停止. 写命令包括单块读(CMD24), 多块读(CMD25), 写CID(CMD26), 写CSD(CMD27),锁和解锁命令(CMD42)和写模式一般命令(CMD56)..当写命令传输完成后, 卡进入Programming State(传输成功)或Transfer State(传输失败).如果一个卡写操作被停止,但其前面数据的CRC和块长度正确, 数据还是会被写入..卡要提供写缓冲, 如果写缓冲已满并且卡处于Programming State, DAT0保持低BUSY. .写CID,CSD, 写保护, 擦除命令没有缓冲, 当这些命令没完时, 不应发送其他的数据传输命令..参数设置命令在卡被编程时是不允许发送的, 这些命令包括设置块长度(CMD16), 擦除块起始(CMD32)和擦除块结束(CMD33)..当卡正编程时读命令是禁止的..用CMD7使另一个卡进入Transfer State不会终止当前卡的编程和擦除, 当前卡会进入Disconnect State并且释放DAT线.. Disconnect State模式的卡可通过CMD7重新被选中,此时卡进入Programming State 并且使能busy信号.. CMD0或CMD15会终止卡的编程操作, 造成数据混乱, 此操作应禁止.1)总线宽度选择命令ACMD6命令用于选择总线宽度, 此命令只有在Transfer State有效. 应在CMD7命令后使用.2)块读命令块是数据传输的最小单位, 在CSD (READ_BL_LEN)中定义, SD卡为固定的512B.每个块传输的后面都跟着一个CRC校验. CMD17(READ_SINGLE_BLOCK)用于传输单个块,传输完之后,卡进入Transfer State. CMD18 (READ_MULTIPLE_BLOCK)用于多个块的传输,直到收到一个CMD12命令.3)块写命令与块读命令类似, 每个块传输的后面都跟着一个CRC校验.卡写数据时会进行CRC校验.多块写比重复的单块写更能提高效率.如果CSD中的WRITE_BLK_MISALIGN没设置, 并且发送的数据不是块对齐的, 卡会设置状态寄存器中的ADDRESS_ERROR位,并且进入Receive-data-State状态等待停止命令.此时写操作也会停止, 并且卡会设置其的WP_VIOLATION位.如果写缓冲满的话, 卡会停止接受WRITE_BLOCK命令. 此时主机应发送SEND_STATUS (CMD13)命令, 卡返回数据的READY_FOR_DATA位标志卡是否准备好接受新的数据.在多块写操作中通过事先发送ACMD23命令可提高写速度. ACMD23用于定义接下来要写数据的块的数目. 每次多块写操作后, 这个值又被设为默认的1.ACMD22会使卡返回写成功的块数目.4)擦除命令擦除命令的顺序是: ERASE_WR_BLK_START(CMD32),ERASE_WR_BLK_END(CMD33)and ERASE (CMD38).如果(CMD38或(CMD32, 33)接收到出错信息, 卡会设置状态寄存器中的ERASE_SEQ_ERROR 位并且重新等待新的命令时序.如果接收到时序错误命令, 卡会设置其ERASE_RESET位并且重新等待新的命令时序.5)写保护管理三种机制:-.写保护物理开关-.卡内部写保护通过设置CSD中的WP_GRP_ENABLE位和WP_GRP_SIZE位, SET_WRITE_PROT和CLR_WRITE_PROT命令用来设置和清除保护机制.-. 密码保护.三. 时钟控制如果主机要发送1K的数据, 但是主机缓冲区只有512B, 那么主机可以在发送完前512B 后, 可以先停止时钟, 然后把后512B填充入缓冲区, 再启动时钟, 这样卡并不会检测要两次发送之间的间隔, 认为其是一次完整的数据发送过程.四 CRC校验1.CRC7CRC7用于所有的命令, 除R3以外的响应, 以及CID和CSD寄存器.2.CRC16CRC16用于数据块的校验五. 错误类型.1. CRC错误和命令非法错误命令的CRC校验出错, 卡设置其状态寄存器的COM_CRC_ERROR位.非法命令错误, 卡设置其状态寄存器的ILLEGAL_COMMAND位.非法命令包括:不支持的命令,未定义的命令以及当前状态不支持的命令.2. 读,写和擦除超时.卡应该在指定的时间内完成一个命令或返回移动的错误信息. 如果在指定的超时时间内主机收不到响应, 应认为卡停止工作, 应重新复位卡.六命令1. 命令类型:- bc不需要响应的广播命令.- bcr需要响应的广播命令. 每个卡都会独立的接收命令和发送响应.- ac点对点命令, DAT线上没数据- adtc点对点命令, DAT线上有数据所有命令均遵守上图中的格式, 总共48位. 首先是1个起始位0, 接着是1个方向位(主机发送位1), 6个命令位( 0-63 ), 32位参数(有些命令需要), CRC7位校验, 1个停止位.2.卡命令根据不同的类型分成了不同的Class, 见下表,其中Class0,2,4,5,8是每个卡都必须支持的命令, 不同的卡所支持的命令保存在CSD中.3.命令详细描述1)基本命令Class02)读命令Class23)写命令Class43)擦除命令Class54)应用特定命令Class8下表中的所有命令使用前都应先跟一个APP_CMD(CMD55)命令七. 卡状态转换表八. 应答.所有的应答都是通过CMD发送,不同的应答长度可能不同.总共有四种类型的应答.1. R1: 长度位48位.注意每个块传输完成后有一个BUSY位.2.R1b:与R1类似, 只是将BUSY位加入响应中.3.R2(CID CSD寄存器) : 长度为136位, CID为CMD2和CMD10的应答, CSD为CMD9的应答.4.R3(OCR寄存器):长度位48位. 作为ACMD41的应答.5.R6(RCA地址应答):长度为48位九. 卡的状态SD卡支持两种状态:-卡状态:与MMC卡兼容.-SD卡状态:扩充到了512位.1.卡状态:R1应答包含一个32位的卡状态.见下表.其中Type中的含义为:E:错误位. S:状态位. R:根据命令在响应中设置.X:根据在命令执行期间设置, 必须再次读此位才能获得命令执行后的情况.Clear Condition:A: 与卡的当前状态有关B: 总是与命令有关,无效的命令会清除此位.C: 通过读此位来清除下表指明了哪些命令可能使哪些位产生变化2.SD卡状态:这些位通过DAT线传输, 并伴有CRC16校验. 其是作为ACMD13的应答.十. 卡存储器形式.-块:块是基本读写命令的单位,它可以是固定的或可变的. 关于块的大小以及其是否可变性存储在CSD中.-扇区:扇区是擦除命令的单位, 它是固定的值,保存在CSD中.十一. 时序图时序图中字母含义:1.命令和应答1)卡识别和卡工作电压确认模式:CMD2,ACMD412)地址分配模式:CMD33)数据传输模式:4)命令结束->下一个命令:5)两个命令直接1)单块读:CMD172)多块读:读过程时序.停止命令时序3.数据写1)单块写:注意Busy信号.2)多块写:多块写命令时序停止命令时序卡主动停止时的时序十二.寄存器.SD卡有六个寄存器OCR, CID, CSD, RCA, DSR and SCR. 其中前四个保存卡的特定信息, 后两个用来对卡进行配置.1.OCR寄存器:保存有卡支持的工作电压, 支持的话相应的位置1,否则为0.2.CID:保存有卡的身份信息.3.CSD保存有如何访问卡的信息.TAAC定义了数据访问的异步时间部分. NSAC为数据访问最坏需要的异步时间.TRAN_SPEED定义了单条DAT线上的最快速度:CCC:SD卡支持的命令集READ_BL_LEN:最大读块长度. WRITE_BL_LEN等于READ_BL_LENDSR_IMP: DSR寄存器是否允许配置, 1为允许,0为不允许.FILE_FORMAT: SD卡上的文件格式.4.RCA保存有卡的地址信息.5.DSR用于配置卡, 默认值为0x4046.SCR寄存器也保存有卡的特定信息.SD_BUS_WIDTHS指明卡支持的传输类型.第二部分 S3C2410 SD卡控制器一 SDI操作1.CPU寄存器设置过程.1)正确设置SDICON寄存器.2)正确设置SDIPRE寄存器.3)等待74个时钟信号初始卡.2.CMD命令发送过程.1)向SDICARG寄存器中写入发送的参数.2)确定命令类型并且通过设置SDICCON[8]来启动命令.3)确定命令是否发送完成. 没应答的话看SDICSTA[11], 有应答的话看SDICSTA[9].4)清除SDICSTA中的相应位.3.数据传输过程.1)向SDITIMER中写入超时值.2)向SDIBSIZE中写入块大小的值.3)设置块模式,总线宽度等, 通过SDIDCON启动传输.4)通过SDIFSTA检查TxFIFO是否可用, 再通过SDIDAT写入发送数据.5)通过SDIFSTA检查RxFIFO是否可用, 再通过SDIDAT读入接收数据.6)通过检查SDIDSTA[4]确定传输过程已完成.7)清除SDIDSTA中的相应位.4. SDIO有两种工作模式,中断和读等待模式.二. SDI寄存器.1.SDICON:SDI控制寄存器字节序类型:Type A: D[7:0] D[15:8] D[23:16] D[31:24]Type B: D[31:24] D[23:16] D[15:8] D[7:0]2.SDIPRE:波特率预分频寄存器.4. SDICCON:SDI命令控制寄存器.5. SDICSTA:SDI命令状态寄存器.6.SDIRSP0-SDIRSP3:命令响应寄存器8. SDIBSIZE:SDI块大小寄存器.9. SDIDCON:SDI数据控制寄存器10. SDIDCNT:SDI数据维持寄存器.12. SDIFSTA:SDI FIFO状态寄存器13. SDIDAT:SDI数据寄存器。
有关SDCCH扩容的知识SDCCH与BCCH异同点:●广播控制信道(BCCH):传输通用信息,用于移动台测量信号强度和识别小区标志等。
●独立专用控制信道(SDCCH):用在分配TCH之前呼叫建立过程中传送系统信令。
例如登记和鉴权在此信道上进行。
上行和下行信道,点对点方式传播。
一般进行的信令交互主要利用SDCCH信道承载,用于位置更新、短信业务、通话前的信令交换等,SDCCH信道的分配也称立即指配过程。
BCCH是针对全小区的用户;SDCCH是针对特定用户的MS占用SDCCH的情况◆位置更新◆机卡分离、附着◆短消息◆手机起呼时◆其他一些增值类业务。
常见的SD拥塞为位置更新或者SD信道较少造成的。
位置更新造成的SD拥塞可以增大CRH,增加SD信道数。
当SD个数大于频点个数时,需要修改TN,比如由TN=2 ----->TN=2&3 CRH:小区重选迟滞。
SD拥塞的三种情况:✧SDCCH拥塞且TCH拥塞,增加载频;SDCCH拥塞而TCH每线话务量高,提高SDCCH动态转换门限;SDCCH拥塞而TCH每线话务量低,增加SDCCH时隙。
SD扩容的指令如下:Raepp:id=all; 查询MAXNOSDCCHTAX—M:载频SDCCH最大倍数;RLCFP:CELL=SHRD893;RLBDP:CELL=SHRD893;RLBDC:CELL=SHRD893,NUMREQEGPRSBPC=40,CHGR=0;参数NUMREQEGPRSBPC用来定义在当前的Channel Group中,支持EGPRS的时隙的数量RLBDP:CELL=SHRD893;RLSLP:cell=SHRD893; 是查看监控告警的RLSLE:cell=SHRD893; 关闭监控告警。
RLCCC:cell=SHRD893,chgr=0,sdcch=4;RLSLP:cell=SHRD893;RLSLP:cell=SHRD893;RLSLC:CELL=SHRD893,CHTYPE=TCH,CHRATE=FR,SPV=1,LVA=48; RLSLC:CELL=SHRD893,CHTYPE=TCH,CHRATE=FR,SPV=2,LVA=48; RLSLP:cell=SHRD893;RLSLI:cell=SHRD893; 开启监控告警。
SD卡的命令大全SD卡的命令格式:SD卡的指令由6字节(Byte)组成,如下:Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)Byte2-5:Command Arguments,命令参数,有些命令没有参数Byte6:前7位为CRC(Cyclic Redundacy Check,循环冗余校验)校验位,最后一位为停止位02.SD卡的命令SD卡命令共分为12类,分别为class0到class11,不同的SDd卡,主控根据其功能,支持不同的命令集如下:Class0 :(卡的识别、初始化等基本命令集)CMD0:复位SD 卡.CMD1:读OCR寄存器.CMD9:读CSD寄存器.CMD10:读CID寄存器.CMD12:停止读多块时的数据传输CMD13:读Card_Status 寄存器Class2 (读卡命令集):CMD16:设置块的长度CMD17:读单块.CMD18:读多块,直至主机发送CMD12为止 .Class4(写卡命令集) :CMD24:写单块.CMD25:写多块.CMD27:写CSD寄存器 .Class5 (擦除卡命令集):CMD32:设置擦除块的起始地址.CMD33:设置擦除块的终止地址.CMD38: 擦除所选择的块.Class6(写保护命令集):CMD28:设置写保护块的地址.CMD29:擦除写保护块的地址.CMD30: Ask the card for the status of the write protection bitsclass7:卡的锁定,解锁功能命令集class8:申请特定命令集。
class10 -11 :保留有关sd卡驱动和fat fs的实现用了3个文件来实现。
sdboot.c为sd的驱动(可理解为pdd)层,主要实现一些对sd控制器的配置以及一些基本sd命令的实现和对sd卡的操作。
sd卡cmd16指令用法-回复SD卡CMD16指令用法详解SD卡CMD16指令是与SD卡进行通信的一种指令,用于设置或查询SD 卡的块长度。
在本文中,我们将详细介绍CMD16指令的用法,并提供一步一步的回答。
第一步:初步了解SD卡和CMD16指令在深入探讨CMD16指令的具体用法之前,让我们先了解一下SD卡和CMD16指令的基本知识。
SD(Secure Digital)卡是一种用于存储数据的可移动存储设备。
CMD16指令是SD卡中的一种控制指令,用于设置或查询SD卡所支持的块长度。
第二步:理解块长度的概念和作用在SD卡中,数据是以扇区(或块)的形式存储的。
一个块的大小通常是512字节,但SD卡也支持其它大小的块。
块长度决定了每次读取或写入数据的大小,因此CMD16指令的功能是设置或查询SD卡的块长度。
第三步:确定CMD16指令的格式和参数CMD16指令是一种发送给SD卡的命令,其格式为:Command(6 bits)+ Argument(32 bits)+ CRC(7 bits)其中,Command字段标识了这是一条CMD16指令。
Argument字段用于设置或查询块长度的具体数值。
CRC字段是为了保证命令的准确性而添加的校验位。
第四步:发送CMD16指令要发送CMD16指令,我们需要通过主机设备(如计算机)与SD卡进行通信。
在发送CMD16指令之前,我们需要先选定SD卡,然后发送CMD16指令的参数。
第五步:接收CMD16指令的响应和处理结果当主机设备发送CMD16指令后,SD卡会返回一个响应。
响应的格式为:Response(8 bits)+ Data(Variable)+ CRC(7 bits)其中,Response字段用于表示SD卡对CMD16指令的响应结果。
如果响应的低位(R1的BIT 0-7)为0,则表示CMD16指令执行成功。
第六步:解析CMD16指令的响应根据CMD16指令的响应结果,我们可以判断CMD16指令是否成功执行。
51单片机实现对SD卡的读写SD卡SPI模式下与单片机的连接图:22.23.//获得16位的回应24. Read_Byte_SD(); //read the first byte,ignore it.25.do26. { //读取后8位27. tmp = Read_Byte_SD();28. retry++;29. }30.while((tmp==0xff)&&(retry<100));31.return(tmp);32.}2)初始化SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行后面的各项操作。
在初始化过程中,SPI的时钟不能太快,否则会造初始化失败。
在初始化成功后,应尽量提高SPI的速率。
在刚开始要先发送至少74个时钟信号,这是必须的。
在很多读者的实验中,很多是因为疏忽了这一点,而使初始化不成功。
随后就是写入两个命令CMD0与CMD1,使SD卡进入SPI模式初始化时序图:初始化例程:1.//--------------------------------------------------------------------------2.初始化SD卡到SPI模式3.//--------------------------------------------------------------------------4.unsigned char SD_Init()5.{6.unsigned char retry,temp;7.unsigned char i;8.unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};9. SD_Port_Init(); //初始化驱动端口10.11. Init_Flag=1; //将初始化标志置112.13.for (i=0;i<0x0f;i++)14. {15. Write_Byte_SD(0xff); //发送至少74个时钟信号16. }17.18.//向SD卡发送CMD019. retry=0;20.do21. { //为了能够成功写入CMD0,在这里写200次22. temp=Write_Command_SD(CMD);23. retry++;24.if(retry==200)25. { //超过200次26.return(INIT_CMD0_ERROR);//CMD0 Error!27. }28. }29.while(temp!=1); //回应01h,停止写入30.31.//发送CMD1到SD卡32. CMD[0] = 0x41; //CMD133. CMD[5] = 0xFF;34. retry=0;35.do36. { //为了能成功写入CMD1,写100次37. temp=Write_Command_SD(CMD);38. retry++;39.if(retry==100)40. { //超过100次41.return(INIT_CMD1_ERROR);//CMD1 Error!4.unsigned char Read_CSD_SD(unsigned char *Buffer)5.{6.//读取CSD寄存器的命令7.unsigned char CMD[] = {0x49,0x00,0x00,0x00,0x00,0xFF};8.unsigned char temp;9. temp=SD_Read_Block(CMD,Buffer,16); //read 16 bytes10.return(temp);11.}4)读取SD卡信息综合上面对CID与CSD寄存器的读取,可以知道很多关于SD卡的信息,以下程序可以获取这些信息。
一概述1. SD总线模式下CLK:时钟信号CMD:双向命令和响应信号DAT0-3:双向数据信号VDD,VSS:电源和地信号SD模式下允许有一个主机, 多个从机(即多个卡), 主机可以给从机分别地址. 主机发命令有些命令是发送给指定的从机,有些命令可以以广播形式发送.SD模式下可以选择总线宽度, 即选用几根DAT信号线, 可以在主机初始化后设置.2. SD总线协议SD模式下的命令和数据流都有一个开始位和结束位.>命令: 是在CMD上传输的用于启动一个操作的比特流. 由主机发往从机, 可以是点对点也可以是广播的.>响应: 是在CMD上传输的用于之前命令回答的比特流. 由从机发往主机.>数据: 是在DAT上传输的比特流, 双向传输.无响应模式无数据模式多块读操作模式多块写操作模式命令格式响应格式数据格式SD卡上电后会自动初始化,通过给卡发送CMD0也可以复位卡.二.SD卡命令描述.1.广播命令:给所有卡都发送, 某些命令需要响应.2.点对点命令给指定地址的卡发送, 需要响应.SD卡系统有两种工作模式:1.卡识别模式.主机上电复位后即处于此模式,它会在总线上等待卡. 卡复位后也处于此模式, 直到SEND_RCA(CMD3)命令到来.2.数据传输模式.卡收到SEND_RCA(CMD3)命令后即进入此模式. 主机识别到卡后也进入此模式.卡状态和工作模式对照表1.卡识别模式.此模式下主机复位总线所有的卡, 验证工作电压, 询问卡的地址. 这个模式下所有数据的传输都是只通过CMD线来完成.1)卡的复位.当卡上电或收到GO_IDLE_STATE (CMD0)命令后, 卡即进入Idle State状态. 此时卡将其RCA设为0, 相关寄存器设为传输稳定的最优模式.2)工作电压验证每个卡的最高和最低工作电压存储在OCR. 只有当电压比配时, CID和CSD的数据才能正常传输给主机.SD_SEND_OP_COND (ACMD41)命令用来判断卡的工作电压是否符合, 如果不符合的话, 卡应该放弃总线操作, 进入Inactive State状态. 在发送SD_SEND_OP_COND (ACMD41)命令前记得要首先发送APP_CMD (CMD55).卡的状态变换图.ACMD41命令响应中的BUSY位也用于卡表示其还没准备好, 主机此时应重发ACMD41命令,直到卡准备好.主机在这个阶段的ACMD41中不允许改变工作电压, 如果确实想改变的话, 应该先发送CMD0, 然后再发送改变后的ACMD41.GO_INACTIVE_STATE (CMD15)命令用于使指定地址的卡进入Inactive State模式.3)卡识别过程.ALL_SEND_CID (CMD2)命令用于获取卡的CID信息, 如果卡处于Ready State, 它就会在CMD线上传送它的CID信息, 然后进入Identification State模式. 紧接着发送CMD3 (SEND_RELATIVE_ADDR)命令, 用于设置卡新的地址. 卡收到新的地址后进入Stand-by State 模式.2.数据传输模式.数据传输模式下卡的状态转变图进入数据传输模式后, 主机先不停的发送SEND_CSD (CMD9)命令获取卡的CSD信息. SET_DSR (CMD4)用于设置卡的DSR寄存器, 包括数据总线宽度, 总线上卡的数目, 总线频率, 当设置成功后, 卡的工作频率也随之改变. 此步操作是可选的.CMD7命令用于使指定地址的卡进入传输模式, 任何指定时刻只能有一个卡处于传输模式.传输模式下所有的数据传输都是点对点的, 并且所有有地址的命令都需要有响应..所有读命令都可以由CMD12命令停止,之后卡进入Transfer State. 读命令包括单块读(CMD17), 多块读(CMD18), 发送写保护(CMD30), 发送scr(ACMD51)和读模式一般命令(CMD56)..所有写命令都可以由CMD12命令停止. 写命令包括单块读(CMD24), 多块读(CMD25), 写CID(CMD26), 写CSD(CMD27),锁和解锁命令(CMD42)和写模式一般命令(CMD56)..当写命令传输完成后, 卡进入Programming State(传输成功)或Transfer State(传输失败).如果一个卡写操作被停止,但其前面数据的CRC和块长度正确, 数据还是会被写入..卡要提供写缓冲, 如果写缓冲已满并且卡处于Programming State, DAT0保持低BUSY. .写CID,CSD, 写保护, 擦除命令没有缓冲, 当这些命令没完时, 不应发送其他的数据传输命令..参数设置命令在卡被编程时是不允许发送的, 这些命令包括设置块长度(CMD16), 擦除块起始(CMD32)和擦除块结束(CMD33)..当卡正编程时读命令是禁止的..用CMD7使另一个卡进入Transfer State不会终止当前卡的编程和擦除, 当前卡会进入Disconnect State并且释放DAT线.. Disconnect State模式的卡可通过CMD7重新被选中,此时卡进入Programming State 并且使能busy信号.. CMD0或CMD15会终止卡的编程操作, 造成数据混乱, 此操作应禁止.1)总线宽度选择命令ACMD6命令用于选择总线宽度, 此命令只有在Transfer State有效. 应在CMD7命令后使用.2)块读命令块是数据传输的最小单位, 在CSD (READ_BL_LEN)中定义, SD卡为固定的512B.每个块传输的后面都跟着一个CRC校验. CMD17(READ_SINGLE_BLOCK)用于传输单个块,传输完之后,卡进入Transfer State. CMD18 (READ_MULTIPLE_BLOCK)用于多个块的传输,直到收到一个CMD12命令.3)块写命令与块读命令类似, 每个块传输的后面都跟着一个CRC校验.卡写数据时会进行CRC校验.多块写比重复的单块写更能提高效率.如果CSD中的WRITE_BLK_MISALIGN没设置, 并且发送的数据不是块对齐的, 卡会设置状态寄存器中的ADDRESS_ERROR位,并且进入Receive-data-State状态等待停止命令.此时写操作也会停止, 并且卡会设置其的WP_VIOLATION位.如果写缓冲满的话, 卡会停止接受WRITE_BLOCK命令. 此时主机应发送SEND_STATUS (CMD13)命令, 卡返回数据的READY_FOR_DATA位标志卡是否准备好接受新的数据.在多块写操作中通过事先发送ACMD23命令可提高写速度. ACMD23用于定义接下来要写数据的块的数目. 每次多块写操作后, 这个值又被设为默认的1.ACMD22会使卡返回写成功的块数目.4)擦除命令擦除命令的顺序是: ERASE_WR_BLK_START(CMD32),ERASE_WR_BLK_END(CMD33)and ERASE (CMD38).如果(CMD38或(CMD32, 33)接收到出错信息, 卡会设置状态寄存器中的ERASE_SEQ_ERROR 位并且重新等待新的命令时序.如果接收到时序错误命令, 卡会设置其ERASE_RESET位并且重新等待新的命令时序.5)写保护管理三种机制:-.写保护物理开关-.卡内部写保护通过设置CSD中的WP_GRP_ENABLE位和WP_GRP_SIZE位, SET_WRITE_PROT和CLR_WRITE_PROT命令用来设置和清除保护机制.-. 密码保护.三. 时钟控制如果主机要发送1K的数据, 但是主机缓冲区只有512B, 那么主机可以在发送完前512B 后, 可以先停止时钟, 然后把后512B填充入缓冲区, 再启动时钟, 这样卡并不会检测要两次发送之间的间隔, 认为其是一次完整的数据发送过程.四 CRC校验1.CRC7CRC7用于所有的命令, 除R3以外的响应, 以及CID和CSD寄存器.2.CRC16CRC16用于数据块的校验五. 错误类型.1. CRC错误和命令非法错误命令的CRC校验出错, 卡设置其状态寄存器的COM_CRC_ERROR位.非法命令错误, 卡设置其状态寄存器的ILLEGAL_COMMAND位.非法命令包括:不支持的命令,未定义的命令以及当前状态不支持的命令.2. 读,写和擦除超时.卡应该在指定的时间内完成一个命令或返回移动的错误信息. 如果在指定的超时时间内主机收不到响应, 应认为卡停止工作, 应重新复位卡.六命令1. 命令类型:- bc不需要响应的广播命令.- bcr需要响应的广播命令. 每个卡都会独立的接收命令和发送响应.- ac点对点命令, DAT线上没数据- adtc点对点命令, DAT线上有数据所有命令均遵守上图中的格式, 总共48位. 首先是1个起始位0, 接着是1个方向位(主机发送位1), 6个命令位( 0-63 ), 32位参数(有些命令需要), CRC7位校验, 1个停止位.2.卡命令根据不同的类型分成了不同的Class, 见下表,其中Class0,2,4,5,8是每个卡都必须支持的命令, 不同的卡所支持的命令保存在CSD中.3.命令详细描述1)基本命令Class02)读命令Class23)写命令Class43)擦除命令Class54)应用特定命令Class8下表中的所有命令使用前都应先跟一个APP_CMD(CMD55)命令七. 卡状态转换表八. 应答.所有的应答都是通过CMD发送,不同的应答长度可能不同.总共有四种类型的应答.1. R1: 长度位48位.注意每个块传输完成后有一个BUSY位.2.R1b:与R1类似, 只是将BUSY位加入响应中.3.R2(CID CSD寄存器) : 长度为136位, CID为CMD2和CMD10的应答, CSD为CMD9的应答.4.R3(OCR寄存器):长度位48位. 作为ACMD41的应答.5.R6(RCA地址应答):长度为48位九. 卡的状态SD卡支持两种状态:-卡状态:与MMC卡兼容.-SD卡状态:扩充到了512位.1.卡状态:R1应答包含一个32位的卡状态.见下表.其中Type中的含义为:E:错误位. S:状态位. R:根据命令在响应中设置.X:根据在命令执行期间设置, 必须再次读此位才能获得命令执行后的情况.Clear Condition:A: 与卡的当前状态有关B: 总是与命令有关,无效的命令会清除此位.C: 通过读此位来清除下表指明了哪些命令可能使哪些位产生变化2.SD卡状态:这些位通过DAT线传输, 并伴有CRC16校验. 其是作为ACMD13的应答.十. 卡存储器形式.-块:块是基本读写命令的单位,它可以是固定的或可变的. 关于块的大小以及其是否可变性存储在CSD中.-扇区:扇区是擦除命令的单位, 它是固定的值,保存在CSD中.十一. 时序图时序图中字母含义:1.命令和应答1)卡识别和卡工作电压确认模式:CMD2,ACMD412)地址分配模式:CMD33)数据传输模式:4)命令结束->下一个命令:5)两个命令直接1)单块读:CMD172)多块读:读过程时序.停止命令时序3.数据写1)单块写:注意Busy信号.2)多块写:多块写命令时序停止命令时序卡主动停止时的时序十二.寄存器.SD卡有六个寄存器OCR, CID, CSD, RCA, DSR and SCR. 其中前四个保存卡的特定信息, 后两个用来对卡进行配置.1.OCR寄存器:保存有卡支持的工作电压, 支持的话相应的位置1,否则为0.2.CID:保存有卡的身份信息.3.CSD保存有如何访问卡的信息.TAAC定义了数据访问的异步时间部分. NSAC为数据访问最坏需要的异步时间.TRAN_SPEED定义了单条DAT线上的最快速度:CCC:SD卡支持的命令集READ_BL_LEN:最大读块长度. WRITE_BL_LEN等于READ_BL_LENDSR_IMP: DSR寄存器是否允许配置, 1为允许,0为不允许.FILE_FORMAT: SD卡上的文件格式.4.RCA保存有卡的地址信息.5.DSR用于配置卡, 默认值为0x4046.SCR寄存器也保存有卡的特定信息.SD_BUS_WIDTHS指明卡支持的传输类型.第二部分 S3C2410 SD卡控制器一 SDI操作1.CPU寄存器设置过程.1)正确设置SDICON寄存器.2)正确设置SDIPRE寄存器.3)等待74个时钟信号初始卡.2.CMD命令发送过程.1)向SDICARG寄存器中写入发送的参数.2)确定命令类型并且通过设置SDICCON[8]来启动命令.3)确定命令是否发送完成. 没应答的话看SDICSTA[11], 有应答的话看SDICSTA[9].4)清除SDICSTA中的相应位.3.数据传输过程.1)向SDITIMER中写入超时值.2)向SDIBSIZE中写入块大小的值.3)设置块模式,总线宽度等, 通过SDIDCON启动传输.4)通过SDIFSTA检查TxFIFO是否可用, 再通过SDIDAT写入发送数据.5)通过SDIFSTA检查RxFIFO是否可用, 再通过SDIDAT读入接收数据.6)通过检查SDIDSTA[4]确定传输过程已完成.7)清除SDIDSTA中的相应位.4. SDIO有两种工作模式,中断和读等待模式.二. SDI寄存器.1.SDICON:SDI控制寄存器字节序类型:Type A: D[7:0] D[15:8] D[23:16] D[31:24]Type B: D[31:24] D[23:16] D[15:8] D[7:0]2.SDIPRE:波特率预分频寄存器.4. SDICCON:SDI命令控制寄存器.5. SDICSTA:SDI命令状态寄存器.6.SDIRSP0-SDIRSP3:命令响应寄存器8. SDIBSIZE:SDI块大小寄存器.9. SDIDCON:SDI数据控制寄存器10. SDIDCNT:SDI数据维持寄存器.12. SDIFSTA:SDI FIFO状态寄存器13. SDIDAT:SDI数据寄存器。
SD卡CMD16指令用法:一、定义:CMD16是SD卡的一项指令,用于设置SD卡的块大小。
块是SD卡进行数据读写的基本单位。
二、用法:发送CMD16指令,以及一个参数,表示要设置的块大小,以字节为单位。
例如,如果要将块大小设置为2048字节,可以使用以下命令:CMD16,1234(其中1234是块大小2048的十六进制表示)。
三、重点:1.块大小必须为2的整数次幂,通常是256、512、1024、2048等。
2.设置块大小后,所有后续的读/写操作都应按照新的块大小进行。
3.CMD16指令应在建立通信后立即发送,以便在后续操作中使用新的块大小。
四、难点:在实践中,选择适当的块大小是很重要的。
块大小太小可能会导致读写效率下降,而块大小太大可能会浪费内存空间。
例如,如果应用程序需要频繁地读写小块数据,那么使用较小的块大小可能会有较好的性能。
相反,如果应用程序需要读写大块数据,那么使用较大的块大小可能会更有效。
五、注意事项:1.在发送CMD16指令之前,必须先建立与SD卡的通信。
2.设置块大小后,所有后续的读/写操作都应按照新的块大小进行。
这包括单块读/写操作和多块读/写操作。
3.如果在数据传输过程中更改了块大小,那么可能会影响已经正在进行的读/写操作。
因此,更改块大小时需要谨慎。
4.CMD16指令仅用于设置SD卡的块大小,不能用于读取或写入数据。
应用案例:例1:在某个应用程序中,需要将SD卡的块大小设置为2048字节。
可以使用以下代码实现:例2:在另一个应用程序中,需要读取SD卡上的一个文件,并将每个数据块的大小设置为1024字节。
可以使用以下代码实现:例3:在一个高级的SD卡应用中,程序需要能够同时读写大容量数据,这时候就可以使用CMD16指令来设定块的大小,比如设定为4096字节,然后使用CMD17和CMD18来读取和写入数据。
以下是Java样例代码:以上就是对SD卡CMD16指令用法的全面阐述,包括定义、用法、重点、难点和注意事项,以及应用案例的展示。
SD卡有很多种类型的命令,有初始化的,特殊功能开启关闭的,寄存器查看的,读和写的,官方给出的分类更清楚一些,不过在一般使用中,我们并不需要了解的多么复杂,只要掌握了最基本的初始化命令,和读写命令,SD卡的操作就能够实现了。
每一个命令的长度都是固定的6个字节,前1个字节的值=命令号+0x40;中间4个字节为参数,不同的命令参数格式都不相同,但参数最多为4个字节;最后1个字节是CRC校验码和1位固定结束位‘1’。
这里需要说明一下0x40的意思,任何命令都有一个固定的起始格式,即先0后1,这是固定的命令起始标志,前两个字节的二进制码就是:01xx xxxx需要特殊说明的是CRC的问题,这是一种检验错误的方法,具体问题度娘说的还算明白,在SPI 模式中,CRC校验默认是关闭的,也就是说这7位必须要发,但是SD卡会在读到CRC以后自动忽略它,所以全部发1就可以。
例外的是,CMD0,CMD8这两个命令发送的时候SD卡还没有进入SPI模式,也就是说CRC校验在这个时候还是启用状态,因此这两个命令的CRC效验码必须要写正确,SD卡才会执行命令,否在在返回值R1中就会有相应的错误标志位提示开发人员CRC校验码错误。
CMD0:0x40,0x00,0x00,0x00,0x00,0x954个字节的参数都为stuff bits 填充位,那就全0即可,最后一个字节CRC是固定的CMD8:0x48,0x00,0x00,0x01,0xaa,0x870x40的固定值+8=0x48;Reserved bits也是可以填充为0的位,VHS支持电压的说明可参考datasheet,需要说明的是参数的最后1byte检查位,这个字节的内容会在R7中原原本本的返回给用户,但是这个字节的不同决定了7位CRC的不同,网上的例子一般都发0xaa,那对应的CRC码+结束位就是0x87。
A CMD41属于附加命令,发送起来要麻烦一些,必须提前通知SD卡下一条要发送的命令为ACMD,这个通知就是CMD55,它的4字节参数都为0即可,CMD55 :0x77,0x00,0x00,0x00,0x00,0xff.0x77 = 0x40 + 0x37(55的16进制表示);CRC可以忽略不要都发1即可 0xff.ACMD41:0x69,0x40,0x00,0x00,0x00,0xff.第一个字节算法同理,第一个参数从DATASHEET可以看出HCS位被置1了,目的是为了告诉SD卡我的MCU支持SDHC卡,如果SD卡不回应CMD8也就是说当前SD卡为1.0版本,那么发送ACMD41时SD卡会自动忽略这个位。
SD卡读写操作详细说明
一、SD卡的读取
1、安装SD卡:在使用SD卡之前,首先要将SD卡放入SD卡插槽,然后把开关拉到ON位置,表明SD卡装载完成。
2、打开IO口:在使用SD卡之前,需要在正确的地址上打开该SD卡的IO口,这样才能进行SD卡的读写操作。
3、初始化SD卡:在SD卡装载完成并打开IO口后,就可以进行SD 卡的初始化操作了。
SD卡的初始化是必须的,只有在SD卡的初始化操作成功后,才能进行下一步的读写操作。
4、发送CMD命令:发送CMD命令是SD卡的read操作的前提,必须发送CMD命令,才能获得SD卡中指定的数据,进而实现SD卡的读取。
5、读取数据:在发送CMD命令之后,就可以对SD卡中指定的数据进行读取,可以读取文本文件,二进制文件,BMP图片等等。
二、SD卡的写入
1、打开IO口:在使用SD卡之前,需要在正确的地址上打开该SD卡的IO口,这样才能进行SD卡的读写操作。
2、初始化SD卡:在SD卡装载完成并打开IO口后,就可以进行SD 卡的初始化操作了。
SD卡的初始化是必须的,只有在SD卡的初始化操作成功后,才能进行下一步的读写操作。
3、格式化SD卡:在连接SD卡后,需要进行格式化操作,必须格式化SD卡,才能进行SD卡的写入操作。
4、发送CMD命令:写入操作也需要发送CMD命令,发送CMD命令的目的是为了定位写入数据的位置。
5、写入数据:在发送CMD命令之后。
SD卡初始化以及命令详解SD卡是嵌⼊式设备中很常⽤的⼀种存储设备,体积⼩,容量⼤,通讯简单,电路简单所以受到很多设备⼚商的欢迎,主要⽤来记录设备运⾏过程中的各种信息,以及程序的各种配置信息,很是⽅便,有这样⼏点是需要知道的SD 卡是基于 flash 的存储卡。
SD 卡和 MMC 卡的区别在于初始化过程不同。
SD卡并不是我们通常意义上的⼿机扩展卡,那种卡叫做TF卡,但是通讯以及驱动模式是类似的. SD 卡的通信协议包括 SD 和 SPI 两类,SD卡上电之后默认处于SD状态。
SD 卡使⽤卡内智能控制模块进⾏ FLASH 操作控制,包括协议、安全算法、数据存取、ECC 算法、缺陷处理和分析、电源管理、时钟管理。
这些都不需要⽤户关系,这是SD卡⼚商做的事情驱动SD卡主要要实现读扇区,写扇区,初始化,获取SD卡相关配置信息这⼏个就可以了,另外.SD卡本⾝只是⼀种数据介质,它不含有⽂件系统,⽂件系统是⼀种⽂件的组织格式,是独⽴于存储介质的⼀种规范标准SD卡引脚序列SD卡引脚功能表TF卡引脚排序TF卡引脚功能表由此可见,TF卡⽐SD卡少了⼀个VSS引脚,也就是少了⼀个供电引脚另外电路设计时若SD卡使⽤SPI模式,那么不⽤的⼏根数据线应加上上拉电阻,否者会因为这⼏根数据线的电流震荡引起电流损耗,造成电路上的不稳定SD卡电路SPI驱动模式SD卡内部有五个我们可以读取的寄存器,分别如下要读取这些信息就需要与卡通讯,SD通讯是⽤命令+数据的形式进⾏的,命令格式如下也就是说,⼀次SD卡命令发送⼀共要发送6个字节,对于SPI通讯⽽⾔,就是SPI总线上传送六个字节字节 1 的最⾼ 2 位固定为 01,低 6 位为命令号(⽐如 CMD16,为 10000 即 16 进制的 0X10,完整的 CMD16,第⼀个字节为 01010000,即 0X10+0X40)。
字节 2~5 为命令参数,有些命令是没有参数的。
对于没有参数的命令默认发送0即可字节 6 的⾼七位为 CRC 值,最低位恒定为 1,crc计算遵循以下规律GX为⽣成多项式,具体计算⽅法请查看CRC计算相关,不过有⼀点好处就是,在SPI驱动模式下,不需要CRC校验(默认SD卡在SPI模式下不开启CRC校验,在SD模式下默认开始CRC校验),所以我们只需要对CMD0进⾏CRC就可以了,后⾯的CRC都可以不管(因为在CMD0之前是SD模式,所以第⼀个命令需要,切换之后就不⽤了),⽽CMD0的CRC为0x95(加上了之后的⼀位1)注:SPI模式下打开crc校验需要⽤到CMD59的保留命令,请查阅相关资料SD卡的命令表如下所⽰(以下仅写出SPI模式的CMD)CMD0 复位SD卡, 重置所有卡到 Idle状态,参数为0CMD1 设置SD卡到ACTIVATE模式,也就是推出IDLE模式CMD8 发送接⼝状态命令CMD9 读取CSD寄存器CMD10 读取CID寄存器CMD12 在多块读取的时候请求停⽌读取CMD13读取SD卡状态寄存器CMD16 设置单个扇区的⼤⼩⼀般都设置为512字节⼀个扇区CMD17 读取扇区命令CMD18 读取多个扇区知道发送停⽌命令CMD24 写扇区命令CMD25 写多个扇区命令CMD27 编辑CSD位CMD28设置地址组保护位。
SD卡(Secure Digital Card):基于FLASH存储单元的卡,它是专为安全性高、容量大、高性能目的设计的。
SD框图如图1-1所示:图1-1SD卡不但有大容量存储单元,还集成有智能控制器来实现接口协议管理、安全性能、版权保护盒ECC校验等。
特点:高达2GB容量、SD卡协议兼容、SPI模式控制、版权保护、密码保护SD卡通讯方式:SD 6线通讯(clk、cmd、D0—3)数据出错保护传送单块、多块数据传送SPI 3线串行总线(clk、DI、DO)可选的非数据保护传送单块、多块数据传送读写次数性能:SD卡数据读次数:不受限(无限次)每扇区写:100,000次SD Mode:SD模式下多卡的识别:SD卡模式是单主机多从机模式,clk和power线共用;识别过程如下:主机分别使能各个卡自己的cmd线,各个卡的CID寄存器是事先编程好的,它是一个用在卡识别过程中唯一数字,主机能使用READ_CID命令读取CID寄存器的值,主机只能读而不能写。
内部上拉的DA T3脚可以用来进行卡插入的侦测,在数据传输过程中可以将上拉电阻断开(使用ACMD42)。
Card Status:存储在一个32bit的寄存器中,它被当做命令应答的数据区来发送,它包含卡当前的状态及上一个命令的完成代码,可以通过SEND_STA TUS命令读取。
SD_Status:存储在512bit的寄存器中,当发送命令SD_STA TUS(ACMD13)时它被当做一块数据块来发送。
存储空间阵列分区如图1-2所示:数据传输的基本单元式byte面向块的命令: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卡CMD命令介绍1条CMD线,所有的命令和回应都是通过这条线一位一位的传输.不同模式或不同版本下,命令有不同含义.(SD(SD[0],SD[3:0]),SPI))1条时钟线,时钟源是来自APH总线时钟4条数据线,SPI模式下用了两条(一条输出,一条输入),SD的一位模式下一条(输出输入),也可以用完四条(输出输入,DATA[0]将分时复用).SD卡是以块为单位,初始化时有配置,一般为512字节,一个扇区有4096个块.2410_SDI控制器:封装了命令和数据的移位操作,支持SDI_1.0规范.有FIFO和DMA模式.当操作某些寄存器时,控制器会自动帮我们转换成48位的命令包通过移位控制器发给SD从机.SD命令包格式----------------------------------------------------------------------------Bit 位置47 46 [45:40] [39:08] [07:01] 00Bit 宽度 1 1 6 32 7 1值 0 1 x x x 1说明Start Bit T ransmission Bit Command Index Argument CRC7 End Bit----------------------------------------------------------------------------在S3C2410中要发送CMD需要设置SDICARG,SDICCON两个寄存器.SDICARG: SDI 命令参数寄存器:SDICCON: SDI 命令控制寄存器:这两个寄存器合起来构成SD协议规范中的CMD命令.其中:SDICARG[31:0] ===================== CMD[39:8] 命令的参数(根据命令所需的参数位格式设置)SDICCON[7:0] ===================== CMD[47:40] 包含Start Bit,Transmission Bit,Command Index.ACMD命令:ACMD是特殊命令.虽然发送方法也是用SDICARG和SDICCON来发.但是,在发送特殊命令前,要先发送一条普通的不带参数的CMD55命令,表示下一条所发送的命令是特殊命令.例如:CMD52 SDICARG:----------------------------------------------------------------------------Bit 位置31 [30:28] 27 26 [25:9] 8 [7:0]Bit 宽度 1 3 1 1 17 1 8说明 R/W flag Function Number RAW flag Stuff Register Address Stuff Write Data or Stuff Bits ----------------------------------------------------------------------------SCR 该寄存器保存的SD的特殊性信息(例如支持的总线位宽,SD卡的版本),MMC卡没有此寄存器,获取该寄存器的数据需要从数据线读的.CSD 该寄存器保存着SD卡的详细信息,如块大小,SD卡的容量大小,文件系统等信息.RCA SD的相对地址(SD卡已经保存在芯片内部)OCR 该寄存器保存着SD的可供电范围,并且区别是否为HC卡(根据返回的ORC回应第30位是否置1).CIA (Card I/O Area)CID SD卡的唯一ID号CIS (Card Information Structure)跟Linux内核的参数TagList的存放方式很相似,都是以标识号和长度加后续内容表示一个节点.SD模式的命令说明:CMD0 GO_IDLE_STATE Mandatory Mandatory Used to change from SD to SPI mode /* 使SD卡进入Idle状态 */CMD2 ALL_SEND_CID Mandatory CID not supported by SDIO /* 广播获取卡的CID信息 */CMD3 SEND_RELATIVE_ADDR Mandatory Mandatory /* 广播获取SD卡所分配的相对地址 */CMD4 SET_DSR Optional DSR not supported by SDIOCMD5 IO_SEND_OP_COND MandatoryCMD6 SWITCH_FUNC Mandatory1 Mandatory1 Added in Part 1 v1.10CMD7 SELECT/DESELECT_CARD Mandatory Mandatory /* 根据获取指定的RCA,选中SD卡,如果在选中一个卡的状态下,又选中其他的卡,那么之前的卡会自动取消选中,如果发送地址0,则表示取消选中全部卡 */CMD9 SEND_CSD Mandatory CSD not supported by SDIO /* 获取SD相关的存储信息,如块大小,容量等. */CMD10 SEND_CID Mandatory CID not supported by SDIOCMD12 STOP_TRANSMISSION Mandatory /* 停止多块传输操作 */CMD13 SEND_STATUS Mandatory Card Status includes only SDMEM information /* 获取卡的状态 */CMD15 GO_INACTIVE_STATE Mandatory MandatoryCMD16 SET_BLOCKLEN Mandatory /* 设置SD卡的块大小,CSD寄存器有描述. */CMD17 READ_SINGLE_BLOCK Mandatory /* 使SD卡进入传输状态,读取单个块 */CMD18 READ_MULTIPLE_BLOCK Mandatory /* 使SD卡进入传输状态,读取多个块,直到收到CMD12为止 */CMD24 WRITE_BLOCK Mandatory /* 使SD卡进入传输状态,写入单个块 */CMD25 WRITE_MULTIPLE_BLOCK Mandatory /* 使SD卡进入传输状态,写入多个块 */CMD27 PROGRAM_CSD Mandatory CSD not supported by SDIOCMD28 SET_WRITE_PROT OptionalCMD29 CLR_WRITE_PROT OptionalCMD30 SEND_WRITE_PROT OptionalCMD32 ERASE_WR_BLK_START MandatoryCMD33 ERASE_WR_BLK_END MandatoryCMD38 ERASE MandatoryCMD42 LOCK_UNLOCK OptionalCMD52 IO_RW_DIRECT MandatoryCMD53 IO_RW_EXTENDED Mandatory Block mode is optionalCMD55 APP_CMD Mandatory /* 特殊指令前命令,在发送ACMD类指令前,需要发送此命令 */CMD56 GEN_CMD MandatoryACMD6 SET_BUS_WIDTH Mandatory /* 设置SD卡的总线位宽,这个需要读取SCR确定 */ACMD13 SD_STATUS MandatoryACMD22 SEND_NUM_WR_BLOCKS MandatoryACMD23 SET_WR_BLK_ERASE_COUNT MandatoryACMD41 SD_APP_OP_COND Mandatory /* 获取SD电压值 */ACMD42 SET_CLR_CARD_DETECT MandatoryACMD51 SEND_SCR Mandatory SCR not supported by SDIO /* 获取SD卡的SCR寄存器的值 */2410 SDI控制寄存器:SDICON 0x5A000000 R/W SDI control register /* 完成SD卡基础配置,包括大小端,中断允许,时钟使能和重启FIFO */SDIPRE 0x5A000004 R/W SDI baud rate prescaler register /* 对SD的时钟分频系数设置 */SDICARG 0x5A000008 R/W SDI command argument register /* 指令的参数存放在这里,不同的命令,参数的位数格式有不用含义 */SDICCON 0x5A00000C R/W SDI command control register /* 控制指令形式的寄存器,配置SPI还是SDI指令,指令的反馈长度,是否等待反馈,是否运行指令,指令的索引等 */SDICSTA 0x5A000010 R/(W) SDI command status register /* 指令状态寄存器,指令是否超时,传送,结束,CRC是否正确等 */SDIRSP0 0x5A000014 R SDI response register 0 /* SD回应状态寄存器,R1的回应都用这个,其他长回应会用到4个. */SDIRSP1 0x5A000018 R SDI response register 1SDIRSP2 0x5A00001C R SDI response register 2SDIRSP3 0x5A000020 R SDI response register 3SDIDTIMER 0x5A000024 R/W SDI data / busy timer register /* 设置超时时间 */SDIBSIZE 0x5A000028 R/W SDI block size register /* 设置Block的大小,FIFO共填充的数据.单位是字节*/SDIDCON 0x5A00002C R/W SDI data control register /* 数据控制寄存器,配置是几线传输,数据发送方向,数据传送方式,要传送多少个块的数据等 */SDIDCNT 0x5A000030 R SDI data remain counter register /* 数据保持计数器 */SDIDSTA 0x5A000034 R/(W) SDI data status register /* 数据状态寄存器,数据是否发送完,CRC效验,超时等 */ SDIFSTA 0x5A000038 R SDI FIFO status register /* FIFO状态寄存器,DMA传输时不用判断FIFO */ SDIDAT 0x5A00003C (Li/W,Li/B, Bi/W) 0x5A00003F(Bi/B) R/W SDI data register /* 数据传输寄存器,要严格读完所请求的数据块,否则遗留的数据位将影响下一次的数据传输 */SDIIMSK 0x5A000040 R/W SDI interrupt mask register /* 中断屏蔽 */SD/MMC 初始化流程步骤是:1)配置时钟,慢速一般为400K,设置工作模式2)发送CMD0,进入空闲态,该指令没有反馈3)发送CMD8,如果有反应,CRC值与发送的值相同,说明该卡兼容SD2.0协议。
详细命令描述
表1 基本命令(类0和类1)
命令索引类型参数响应缩写描述
CMD0 bc [31:0]无用—GO_IDLE_STATE 重置所有卡到Idle状态CMD1 保留
CMD2 bcr [31:0]无用R2 ALL_SEND_CID 要求所有卡发送CID号
CMD3 Bcr [31:0]无用R6
SEND_RELATIVE_AD
DR 要求所有卡发布一个新的相对地址RCA
CMD4 不支持
CMD5 保留
CMD6 保留
CMD7 ac
[31:16]RCA
[15:0]无用
R1 选中/不选中卡
CMD8 R7 发送接口状态命令
CMD9 ac
[31:16] RCA
[15:0]无用R2 SEND_CSD
寻址卡并让其发送卡定
义数据CSD
CMD10 ac
[31:16] RCA
[15:0]无用R2 SEND_CID
寻址卡并让其发送卡识
别号CID
CMD11 adtc
[31:0]数据
地址R1
READ_DA T_UNTIL_S
TOP
从卡读取数据流,从给
定地址开始,知道停止
传输命令结束
CMD12 ac [31:0]无用R1b STOP 中止多个块的读/写操作
CMD13 ac
[31:16] RCA
[15:0]无用R1 SEND_STA TUS
寻址卡并发送卡状态寄
存器
CMD14 保留
CMD15 ac
[31:16] RCA
[15:0]无用_ GO_INACTIVE_STATE
设置卡到inactive状
态
表2 块读操作命令(类2)
命令索引类型参数响应缩写描述
CMD16 ac
[31:0]块长
度R1 SET_BLOCKLEN
为接下来的块操作
指令设置块长度
CMD17 adtc
[31:0]数据
地址
R1 READ_SINGLE_BLOCK 读取一个块
CMD18 adtc
[31:0]数据
地址R1 READ_MULTIPLE_BLOCK
连续读取多个块,
直到停止命令
CMD19-23 保留
表3 块写操作命令(类4)
表4 写保护(类6)
命令索引类型参数响应缩写描述
CMD28 ac
[31:0]
数据地
址
R1b SET_WRITE_PROT
设置地址组保护位。
写保
护由卡配置数据的
WP_GRP_SIZE指定
CMD29 ac
[31:0]
数据地R1b CLR_WRITE_PROT 清除保护位
命令索引
类
型
参数响应缩写描述
CMD24 adtc
[31:0]
数据地
址
R1 WRITE_BLOCK
写一个长度由
SET_BLOCKLEN指定
的块
CMD25 adtc
[31:0]数
据地址R1
WRITE_ MULTIPLE
_BLOCK
连续写多个块直到
STOP_TRANSMISSION
命令
CMD26 不支持
CMD27 adtc
[31:0]无
用
R1 PROGRAM_CSD 编辑CSD位
址
CMD30 adtc
[31:0]
写保护
数据地
址
R1 SEND_WRITE_PROT
要求卡发送写保护位状
态
CMD31 保留
表5 擦除命令(类5)
命令索引类型参数响应缩写描述
CMD32 ac
[31:0]
数据地
址
R1 ERASE_WR_BLK_START
设置要擦除的第一个写
数据块地址
CMD33 ac
[31:0]
数据地
址
R1 ERASE_WR_BLK_END
设置要擦除的最后一个
写数据块地址
CMD34
…
CMD37
保留
CMD38 ac
[31:0]
无用R1b ERASE
擦除所有选中的写数据
块
CMD39
…
CMD41
保留
表6 擦除命令(类5)
命令索引类型参数响应缩写描述
CMD32 ac
[31:0]
数据地
址
R1 ERASE_WR_BLK_START
设置要擦除的第一个写
数据块地址
CMD32 ac [31:0] R1 ERASE_WR_BLK_END 设置要擦除的最后一个
数据地
址
写数据块地址
CMD34
…
CMD37
保留
CMD38 ac
[31:0]
无用R1b ERASE
擦除所有选中的写数据
块
CMD39
…
CMD41
保留
表7 卡锁命令(类7)
命令索引类型参数响应缩写描述CMD42
….
CMD54
SDA可选命令
表8 应用相关(Application Specific)命令(类8)
命令索引类型参数响应缩写描述
CMD55 ac
[31:16] RCA
[15:0]填充位R1 APP_CMD
告诉卡接下来的命令是应用
相关命令,而非标准命令。
CMD56 adtc
[31:1] 填充位
[0]:RD/WR,1读,0
写
R1 GEN_CMD
应用相关(通用目的)的数据
块读写命令
CMD57
…
CMD59
保留
CMD60
…
CMD63
厂商保留
*命令相关命令,可能指SD卡专用命令
所有应用相关命令之前必须先执行APP_CMD(CMD55)。
表9 SD卡使用/保留的应用相关命令
ACMD
索引
类型参数响应缩写描述
ACMD6 ac [31:2] 填充
位
[1:0]总线宽
度
R1 SET_BUS_WIDTH
00:1bit
10:4bit
ACMD13
adtc
[31:0] 填充
位
R1 SD_STATUS 设置SD卡状态ACMD17 保留
ACMD18 ————保留作为SD安全应用ACMD19
…
ACMD21
保留
ACMD22
adtc
[31:0]填充位R1 SEND_NUM_WR_BLOCKS 发送写数据块的数目。
响
应为32位+CRC
ACMD23
ac [31:23]填充
位
[22:0]数据块
数目
R1 SET_WR_BLK_ERASE_COUNT 设置写前预擦除的数据块
数目(用来加速多数据块
写操作)。
“1”=默认(一个
块)(1)
ACMD24 保留
ACMD25 ————保留作为SD安全应用ACMD26 ————保留作为SD安全应用
ACMD38 ————保留作为SD安全应用ACMD39
…
ACMD40
保留
ACMD41
bcr [31:0]OCR
without busy
R3 SD_APP_OP_COND 要求访问的卡发送它的操
作条件寄存器(OCR)内容
ACMD42
ac [31:1]填充位
[0]set_cd
R1 SET_CLR_CARD_DETECT 连接[1]/断开[0]卡上
CD/DA T3(pin 1]的50K欧
姆上拉电阻。
上拉电阻可
用来检测卡
ACMD43
ACMD49 —
———
保留作为SD安全应用
ACMD51 adtc [31:0]填充位R1 SEND_SCR 读取SD配置寄存器SCR
(1)不管是否使用ACMD23,在多数据块写操作中都需要STOP_TRAN(CMD12)命令。