SD卡协议中文.docx

上传人:b****5 文档编号:5338552 上传时间:2022-12-15 格式:DOCX 页数:31 大小:2.56MB
下载 相关 举报
SD卡协议中文.docx_第1页
第1页 / 共31页
SD卡协议中文.docx_第2页
第2页 / 共31页
SD卡协议中文.docx_第3页
第3页 / 共31页
SD卡协议中文.docx_第4页
第4页 / 共31页
SD卡协议中文.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

SD卡协议中文.docx

《SD卡协议中文.docx》由会员分享,可在线阅读,更多相关《SD卡协议中文.docx(31页珍藏版)》请在冰豆网上搜索。

SD卡协议中文.docx

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)命令后,卡即进入IdleState状态.此时卡将其RCA设为0,相关寄存器设为传输稳定的最优模式.

2)工作电压验证

每个卡的最高和最低工作电压存储在OCR.只有当电压比配时,CID和CSD的数据才能正常传输给主机.

SD_SEND_OP_COND(ACMD41)命令用来判断卡的工作电压是否符合,如果不符合的话,卡应该放弃总线操作,进入InactiveState状态.在发送SD_SEND_OP_COND(ACMD41)命令前记得要首先发送APP_CMD(CMD55).

卡的状态变换图.

ACMD41命令响应中的BUSY位也用于卡表示其还没准备好,主机此时应重发ACMD41命令,直到卡准备好.

主机在这个阶段的ACMD41中不允许改变工作电压,如果确实想改变的话,应该先发送CMD0,然后再发送改变后的ACMD41.

GO_INACTIVE_STATE(CMD15)命令用于使指定地址的卡进入InactiveState模式.

3)卡识别过程.

ALL_SEND_CID(CMD2)命令用于获取卡的CID信息,如果卡处于ReadyState,它就会在CMD线上传送它的CID信息,然后进入IdentificationState模式.紧接着发送CMD3(SEND_RELATIVE_ADDR)命令,用于设置卡新的地址.卡收到新的地址后进入Stand-byState模式.

2.数据传输模式.

数据传输模式下卡的状态转变图

进入数据传输模式后,主机先不停的发送SEND_CSD(CMD9)命令获取卡的CSD信息.

SET_DSR(CMD4)用于设置卡的DSR寄存器,包括数据总线宽度,总线上卡的数目,总线频率,当设置成功后,卡的工作频率也随之改变.此步操作是可选的.

CMD7命令用于使指定地址的卡进入传输模式,任何指定时刻只能有一个卡处于传输模式.

传输模式下所有的数据传输都是点对点的,并且所有有地址的命令都需要有响应.

.所有读命令都可以由CMD12命令停止,之后卡进入TransferState.读命令包括单块读(CMD17),多块读(CMD18),发送写保护(CMD30),发送scr(ACMD51)和读模式一般命令(CMD56).

.所有写命令都可以由CMD12命令停止.写命令包括单块读(CMD24),多块读(CMD25),写CID(CMD26),写CSD(CMD27),锁和解锁命令(CMD42)和写模式一般命令(CMD56).

.当写命令传输完成后,卡进入ProgrammingState(传输成功)或TransferState(传输失败)

.如果一个卡写操作被停止,但其前面数据的CRC和块长度正确,数据还是会被写入.

.卡要提供写缓冲,如果写缓冲已满并且卡处于ProgrammingState,DAT0保持低BUSY.

.写CID,CSD,写保护,擦除命令没有缓冲,当这些命令没完时,不应发送其他的数据传输命令.

.参数设置命令在卡被编程时是不允许发送的,这些命令包括设置块长度(CMD16),擦除块起始(CMD32)和擦除块结束(CMD33).

.当卡正编程时读命令是禁止的.

.用CMD7使另一个卡进入TransferState不会终止当前卡的编程和擦除,当前卡会进入DisconnectState并且释放DAT线.

.DisconnectState模式的卡可通过CMD7重新被选中,此时卡进入ProgrammingState并且使能busy信号.

.CMD0或CMD15会终止卡的编程操作,造成数据混乱,此操作应禁止.

1)总线宽度选择命令

ACMD6命令用于选择总线宽度,此命令只有在TransferState有效.应在CMD7命令后使用.

2)块读命令

块是数据传输的最小单位,在CSD(READ_BL_LEN)中定义,SD卡为固定的512B.

每个块传输的后面都跟着一个CRC校验.CMD17(READ_SINGLE_BLOCK)用于传输单个块,传输完之后,卡进入TransferState.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)andERASE(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(CIDCSD寄存器):

长度为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:

根据在命令执行期间设置,必须再次读此位才能获得命令执行后的情况.

ClearCondition:

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,DSRandSCR.其中前四个保存卡的特定信息,后两个用来对卡进行配置.

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指明卡支持的传输类型.

第二部分S3C2410SD卡控制器

一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控制寄存器

字节序类型:

TypeA:

D[7:

0]D[15:

8]D[23:

16]D[31:

24]

TypeB:

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:

SDIFIFO状态寄存器

13.SDIDAT:

SDI数据寄存器

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1