为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

sd卡总结

2011-09-05 33页 pdf 2MB 29阅读

用户头像

is_626899

暂无简介

举报
sd卡总结 一概述 1. SD 总线模式下 CLK:时钟信号 CMD:双向命令和响应信号 DAT0-3:双向数据信号 VDD,VSS:电源和地信号 SD 模式下允许有一个主机, 多个从机(即多个卡), 主机可以给从机分别地址. 主机发 命令有些命令是发送给指定的从机,有些命令可以以广播形式发送. SD 模式下可以选择总线宽度, 即选用几根 DAT 信号线, 可以在主机初始化后设置. 2. SD 总线协议 SD 模式下的命令和数据流都有一个开始位和结束位. >命令: 是在 CMD 上传输的用于启动一个操作的比...
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.CRC7 CRC7 用于所有的命令, 除 R3 以外的响应, 以及 CID 和 CSD 寄存器. 2.CRC16 CRC16 用于数据块的校验 五. 错误类型. 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)基本命令 Class0 2)读命令 Class2 3)写命令 Class4 3)擦除命令 Class5 4)应用特定命令 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,ACMD41 2)地址分配模式:CMD3 3)数据传输模式: 4)命令结束->下一个命令: 5)两个命令直接 2.数据读. 1)单块读:CMD17 2)多块读: 读过程时序. 停止命令时序 3.数据写 1)单块写: 注意 Busy 信号. 2)多块写: 多块写命令时序 停止命令时序 卡主动停止时的时序 4.时序值 十二.寄存器. 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_LEN DSR_IMP: DSR 寄存器是否允许配置, 1 为允许,0 为不允许. FILE_FORMAT: SD 卡上的文件格式. 4.RCA 保存有卡的地址信息. 5.DSR 用于配置卡, 默认值为 0x404 6.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:波特率预分频寄存器. 3. SDICARG:SDI 命令参数寄存器 4. SDICCON:SDI 命令控制寄存器. 5. SDICSTA:SDI 命令状态寄存器. 6.SDIRSP0-SDIRSP3:命令响应寄存器 7. SDIDTIMER:SDI 超时寄存器. 8. SDIBSIZE:SDI 块大小寄存器. 9. SDIDCON:SDI 数据控制寄存器 10. SDIDCNT:SDI 数据维持寄存器. 11. SDIDSTA:SDI 数据状态寄存器 12. SDIFSTA:SDI FIFO 状态寄存器 13. SDIDAT:SDI 数据寄存器 附录: 二 数据包的封装与命令协议相关 1 sd 卡指令数据包 sd卡的指令被封装成48位的数据包,每次传送这48位的数据包。数据包的内容包 括起始位、结束位、传输位、命令索引、传输参数和7位CRC校验码。其具体格 式分布如下图 Bit 位置 47 46 [45:40] [39:08] [07:01] 00 Bit 宽度 1 1 6 32 7 1 值 “0” “1” x x x “1” 说明 Start bit Transmission bit Command index Argument CRC7 End bit 其中的命令索引位是[45:40],里面可以封装各种命令,具体的命令表将在下面 给出。不同的命令会对应不同的回应(respond),回应有三种(R1,R2,R3)格式, 在命令表中的选项会给出。 2 sd 卡命令索引表 SPI 模式 CMD 简略语 指令说明 自变量 回应 0 GO_IDLE_STATE 这是使card初始 化到Idle状态的 指令.CS信号设在 Low的状态时,接 到本指令后,card 将转换到SPI模 式. None R1 1 SEND_OP_COND 接到本指令 后,card将做R3回 应(含有OCR 数 据).根据OCR值, 可以得知card能 工作电压范 围.OCR数据最高 值位的1bit是用 来确认card内部 处理是否结束 (Ready/Busy轮 询). None R1 2 ALL_SEND_CID 接到本指令后, 处于Ready状态 的card将传送CID 数据.在MMC模 式下,数据被送到 CMD信号,在CID 数据的每1bit传 送后,CMD信号 状态将与该card 内部状态相比较, 如果不一致,將中 止数据传送,card 返回到Ready状 态.如果相一致, 该card 将认为已 被选中,然后转换 到Identification 状态. 3 SET_RELATIVE_ADDR 本指令会为已转 换到Identification 状态的card分配 一个相对card地 址(RCA).当RCA 分配后,card将转 换到Stand-by 状 态,对以后的 CMD2和CMD3 不回应. 4 NOP 这是用来设定 DSR(DriveState 寄存器)的指令, 但是本car不支持 DSR. 7 SELECT/DESELECT_CARD 本指令是用来选 择一张card,让它 在Stand-by状态 和Transfer状态之 间转换的指令.如 果给card设定已 分配到的RCA地 址,card将从 Stand-by状态转 换到Transfer状 态,并将回应以后 的读取指令及其 他指令.如果给 card设定RCA以 外的地址,card将 转换到Stand-by 状态。当 RCA=0000h 时,card将无条件 地转换到 Stand-by状态. 9 SEND_CSD 接到本指令后,将 传送CSD数据. None R1 10 SEND_CID 接到本指令后,将 传送CID数据. None R1 11 READ_DAT_UNTIL_STOP 接到本指令后,将 从设定的地址传 送P2ROM数据, 直到接到指令 CMD12为止. 12 STOP _TRANSMISSION 本指令强行终止 CMD11和 CMD18的处理 None R1 13 SEND_STATUS 接到本指令后 , 将传送状态寄存 器的信息. None R2 15 GO_INACTIVE _STATE 接到本指令后,将 转 换 到 休 止 (inactive)状态. 16 SET_BLOCKLEN 本指令用来设定 Block 长度.对象 是 以 后 的 指 令 CMD17 和 CMD18. 31:00] block length R1 17 READ_SINGLE _BLOCK 接到本指令后,将 从自变量设定的 地址传送 1 个 block 长度的数 据.(block 长度由 指令 CMD16 设 定). [31:00] data address R1 18 READ_MULTIPLE _BLOCK 接到本指令后,将 从自变量设定的 地 址 连 续 传 送 block 长度的数 [31:00] data address R1 据,直到接到指令 CMD12 为 止.(block 长度由 指令 CMD16 设 定). 23 SET_BLOCK _COUNT 本指令是给紧跟 的指令 CMD18 设 定 要 传 送 的 block 数量. [31:16]set to 0 [15:00]number of block R1 24 WRITE_BLOCK 接到本指令后,将 写1个block 长度 的数据到自变量 设定的地 址.(block长度由 指令CMD16设 定). [31:0] data address R1 25 WRITE_MULTIPLE_ BLOCK 接到本指令后,将 连续写block长度 的数据到自变量 设定的地址,直到 接到指令CMD12 为止.(block长度 由指令CMD16设 定). [31:0] data address R1 58 READ_OCR 接 到 本 指 令 后 ,Card 将传送 OCR 数据. None R3 59 CRC_ON_OFF 本指令是用来设 定 CRC 选项为 ON 或 OFF.在 SPI 模式下,CRC 的初 始 值 设 定 为 OFF.[CRC 选 项 [bit=1]表示 CRC ON;[CRC 选 项 [bit=0]表示 CRC OFF. [31:01] stuff bits [00:00] CRC option R1 3 命令回应 repond 1) R1 模式 对象指令 CMD0 : GO_IDLE_STATE CMD1 : SEND_OP_COND CMD9 : SEND_CSD CMD10:SEND_CID CMD12:STOP_TRANSMISSION CMD16:SET_BLOCKLEN CMD17:READ_SINGLE_BLOCK CMD18:READ_MULTIPLE_BLOCK CMD23:SET_BLOCK_COUNT CMD59:CRC_ON_OFF 7 6 5 4 3 2 1 0 0 0 0 in idle state illegal command communication CRC address error parameter error 2) R2 模式 对象指令 CMD13:SEND_STATUS 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 out of range communication CRC error in idle state illegal command address error parameter error 3) R3 模式 对象指令 CMD58:READ_OCR 39 38 37 36 35 34 33 32 0 0 0 0 OCR communication CRC error in idle state illegal command address error parameter error
/
本文档为【sd卡总结】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索