《SD卡的SPI模式.pdf》由会员分享,可在线阅读,更多相关《SD卡的SPI模式.pdf(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、SD 卡的 SPI 模式7 SPI7 SPI 模式模式7.1 介绍SPI 模式由一个由基于闪存SD 存储卡提供的次要通信协议组成.此模式是 SD 存储卡协议的子集。此接口在上电(CMD0)后的每一个复位命令期间被选择。SPI 标准只定义物理链接,而不提供数据传输协议。SD 存储卡 SPI 执行利用 SD 存储卡协议和命令集的子集。7.2 SPI 总线协定SD 卡是基于命令和数据流,这些命令和数据流以一个起始位开始,以停止位结束的.SPI 通道是面向字节的.每个命令或数据块都是由多个8位字节构成,且每个字节与CS 片选信号对齐(例如:此长度是8时钟周期的倍数)。类似于 SD 存储卡协议,SPI
2、短信是由命令,响应和数据块环组成。所有的通信都由主机控制,主机通过拉低 CS 来启动每个总线事务。SPI 模式下的响应行为有三个方面和SD 模式不同:1、被选择的卡总是回应命令。2、使用附加的(8位)响应结构。3、当卡遇到一个数据检索问题时,它会用一个响应错误来回应(替换预期的数据块),而不是 SD 模式中的超时。除了命令响应之外,每一个在写操作期间发送到卡的数据块将以一个特殊的数据响应令牌来被响应。一个数据块可能和一个写块(WRITE_BL_LEN)一样大,也可能和一个信号字一样小。部分块的读/写操作都被卡中 CSD 寄存器中所叙述的被选择的项使能。7.2.1 模式选择SD 卡从 SD 模式
3、中唤醒。如果 CS 信号在复位命令(CMD0)被接收期间被拉低,并进入空闲模式,如果认为是 SD 模式被需求则不会响应此命令,仍在 SD 模式下。如果 SPI 模式被需求,则卡将会切换到 SPI,且用 SPI 模式 R1响应。唯一返回 SD 模式的方法是进入上电周期。在SPI 模式下,SD 存储卡协议状态机不被遵守。所有的在 SPI 模式下被支持的 SD 存储卡命令总是可用的。7.2.2 总线传输保护每个在总线上传输的 SD 存储卡令牌被 CRC 位保护。在SPI 模式下,SD 存储卡提供一个非保护模式。此模式使系统用可靠的数据链接来建立,以排除(否定)硬件或软件需要执行CRC生成和校验功能。
4、在非保护模式下,命令、响应和数据令牌的CRC 位在令牌中仍被需要,尽管,对于发送器,它们被定义成“dont care”,且被接收器忽略。在非保护模式下,SPI 接口被初始化。尽管,RESET 命令用于使卡切换到 SPI 模式,但它是在 SD 模式下被卡接收,所以,必须有一个有效的CRC 域。因为 CMD0没有参数,所有的域的内容(包括CRC 域)都是常数,不需要在运行时间计算出来。一个有效的复位命令是:0 x40,0 x0,0 x0,0 x0,0 x0,0 x95主机可以用 CRC_ON_OFF 命令(CMD59)开关卡的 CRC 选项。7.2.3 读数据SPI 支持单块读和多块读操作(在SD
5、 存储卡协议中的 CMD17 OR CMD18)。当接收一个有效的读命令后卡将在一个在SET_BLOCK_LEN(CMD16)定义了长度的数据令牌之后,用一个响应令牌作出回复。(参考 Figure41)Figure41 单块读操作16125一个有效的数据块被添加了一个16位 CRC,此 CRC 由 CCITT 标准多项式 X+X+X+1生成。能被 READ_BL_LEN 给出的最大的块的的长度大CSD 中定义了。如果片块被允许,块长度可以是1MAX 块大小之间的任何长度。否则,数据读的有效块长度只是在READ_BL_LEN 中给出的值。起始地址可以是在卡的有效地址范围内的任何字节地址。但是,每
6、一个块,必须包含入一个单一的物理卡扇区中。如发生一个可修复错误,卡不会传输任何数据,而是发送一个特定的数据错误令牌到主机。Figure42:读操作-数据错误在多块读操作中,每一个被传输的块有它的16-CRC 位。停止传输命令将实际地停止数据传输操作。(与 SD 模式相同)Figure43:多块读操作7.2.4 写数据在 SPI 模式下,SD 存储卡支持单块和多块写命令。在接收到有效的写命令(CMD24、CMD25)之后,卡将以一个响应令牌响应,然后等待主机发来数据块。CRC 后缀、块长度和起始地址都与读操作相同。(例外:控制片块读读操作的CSD 参数 WRITE_BL_PARTIAL)Figu
7、re44:单块写操作每一个数据有一个一字节的“start block”令牌的前缀。在一个数据块被接收后,卡有一个数据响应令牌的响应。如果数据无误地接收,它将会被编程。只要卡忙于编程,一个忙令牌的连续流将会被发到主机(有效地使 DataOut 数据线为低电平)一旦编程操作完成,主机可用SEND_STATUS 命令(CMD13)来检查编程的结果。在编程期间仅某些错误(如地址超出范围,写保护)被探测到。在数据块和 data_response 令牌中,有效校验仅是这 CRC 和 Write Error 指示。在多块写操作中,停止传输是通过发送“Stop Tran”令牌而不是在下一块开头的“StartB
8、lock”令牌。如果在数据响应(data_response)中发生 Write Error 指示,主机要利用SEND_NUM_WR_BLOCKS(ACMD22)去获得有多少个好块被写入。数据令牌的描述在7.3.3中给出。Figure45:多块写操作当卡正忙,复位 CS 信号不会终结编程过程。卡会释放 DataOut(tri-state)并且继续编程。如果卡在编程完成之前重新选择,DataOut 线将会被强行回到低电平且所有的命令将会被拒绝。复位一张(用 CMD0)将会终结任何悬而未决的或激活的编程操作。这样将会破坏卡上的数据格式。主机要有保护它的责任。7.2.5 擦除和写保护在 SPI 模式下
9、擦除和写保护管理程序与SD 模式下的相同。当卡正在擦除或者正在改变预定扇区清单的写保护位时,它将会进入忙状态且使 DataOut 线为低电平。图46举例说明了一个有和没有忙信号的无数据的总线事务。Figure46:无数据的操作7.2.6 读 CID/CSD 寄存器跟 SD 存储卡协议不同(在那里寄存器的内容是作为一个命令响应发送),在SPI 模式下,CSD 和 CID 的内容的读取是一个简单的块读事务。在16字节的带16位 CRC 后缀的数据块之后,卡用一个标准的响应令牌来响应。CSD 命令的数据超时时间不能被设置入卡的TAAC,因为这个值是放在卡的 CSD 寄存器中。所以标准的响应超时值(N
10、CR)被用于 CSD 寄存器的读响应时间。7.2.7 复位序列SD 卡需要一个定义了的复位序列。上电复位或CMD0之后,卡进入了空闲模式。在这个模式中,合法的主机命令只有CMD1、ACMD41、CMD58。在 SPI 模式下,CMD1和 ACMD41都有同样的行为。在 SPI 模式下,正好与SD 模式相反,CMD1和 ACMD41都没有打操作数和不会返回OCR 寄存器的内容。而是,主机利用CMD58(仅用于 SPI)去读 OCR 寄存器。此外,主机有责任避免访问那此不在允许电压范围内的卡。CMD58的应用不仅限于初始化期间,且可以用于任何时候。7.2.8 错误条件不像 SD 存储卡协议那样,在
11、SPI 模式下卡总会对一个命令作出响应。此响应显示了命令的接受和拒绝。如果一个命令不被支持,它被拒绝。如果 CRC 校验失败,如果它含有非法的操作数,或者它在擦除序列期间不按照序列。7.2.9 内存阵列请参考英文原版。7.2.10 卡片 锁定/解锁请参考英文原版。7.2.11 应用程序特殊命令请参考英文原版。7.2.12 版权保护命令请参考英文原版。7.3 SPI 模式事务包7.3.1 命令令牌1、命令格式所有的 SD 存储卡命令都是6字节长。命令的传输总是以相应的命令代码字的左边位开始。所有的命令由 CRC 保护。命令的参数由以下表给出。2、命令集如 SD 模式一样,SPI 命令分成几个集合
12、。每一个集合支持一类的功能。在这两种通信模式下,SD 存储卡都支持同组的可选命令集。3、命令详细说明下表给出了一个 SPI 模式总线命令集的详细说明.响应在7。3。2中定义了。表57列出了所有SD 存储卡命令。SPI 模式的“YES”表示此命令在 SPI 模式下被支持。由于这此限制,CSD中此命令集描述仍有效。如果一个命令不需要参数argument,此域的值应该设为零。被保留的命令在 SD 模式中也是被保留。命令的二进制代码通过记忆标志来定义。举一个例子,command index 域的内容是二进制的“000000”(CMD0)和“100111”(CMD39)。Table57:命令和 argu
13、ment7.3.2 响应这里有几种响应令牌。就像在SD 模式一样,所有响应首先从MSB 开始传输。l格式格式 R1R1除了 SEND_STATUS 命令,在每一个命令之后响应令牌被发送。它是一个字节长,和 MSB 总是设为零。其它位错误指示,一个错误以“1”作为信号。R1格式的结构是在图47中给出。其标志的意思在下面给出:2在空闲状态:卡正在空闲状态,且正运行初始化程序。2擦除复位:因为一个不按擦除序列命令被接收到,则一个擦除序列是在执行之前清除2非法命令:一个非法命令代码被探测到。2通讯 CRC 错误:最后一个命令的CRC 校验失败。2擦除序列错误:在擦除命令序列中有一个错误发生。2地址错误
14、:一个非对齐的与数据长度不匹配的地址,在命令中被取用。2参数错误:命令的 argument(如地址,块长度)超出卡的允许范围。Figure47:R1 响应格式l格式格式 R1b R1b响应令牌相同于 R1格式,另带可选的忙信号。忙信号令牌可能是数字节的任何数目。一个零值表示忙。非零表示卡准备好接收下一个命令。l格式格式 R2R2此响应令牌是两字节长。作为SEND_STATUS 命令的响应发送。其格式如Figure48Figure48.第一个字节与 R1响应相同。第二个字节的内容如下:2擦除参数:对于擦除,一个无效的选择、扇区或者组。2写保护违返:命令尝试写一个已保护的块。2卡 ECC 失败:卡
15、内部的 ECC 被利用了,但是对正确的数据它失败了。2 CC 错误:内部的卡的控制器错误。2错误:一个一般的或一个未知的错误在操作期间发生。2写保护擦除忽略或锁/解锁失败:这个状态位有两个过载的功能。当主机尝试擦除一个写保护的扇区时或制造一个序列或锁解锁时密码错误,它要被设为1。2卡被锁:当卡被用户锁时设为1。当解锁后被复位为0。l格式格式 R3R3当一个 READ_OCR 命令被接收后,一个响应令牌由卡发送。这个响应长度为5字节。第一个字节与 R1格式相同。其它四字节是OCR 寄存器。Figure49:R3响应格式l数据响应数据响应每一个被写到卡的数据块将通过一个数据响应令牌来确认。它是一个
16、字节长,格式如下:状态位的含义如下:“010”-数据接收。“101”-因 CRC 错误数据被拒绝。“110”-因写错误数据被拒绝。如果主机获得“110”的状态域,它应用 CMD12中止数据传输和发送 CMD13来校验哪个写问题引起写错误标志。ACMD22能用来发现已写好的块的数目。7.3.3 数据令牌读写命令有与它们相关的数据传输。数据通过数据令牌来传输接收。所有的数据字节首先发送 MSB 字节。数据令牌是4515字节长,格式如下:对于单块读、单块写和多块读:2第一字节:start block2字节2-513(取决于数据块长度):用户数据2最后两字节是:16位的 CRC对于多块写操作:2每一个
17、块的第一字节:如果数据是用于传输的,第一个字节是Start Block如果停止传输被请求,第一字节是Stop tran注意:此格式只用于多块写。如果是多块读,停止传输是用STOP_TRAN 命令(CMD12)来完成。7.3.4 数据错误令牌如果一个读操作失败,则卡不会提供请求的数据,而是发送一个数据错误令牌。此令牌是一字节长,格式如下:Figure50:数据错误令牌从第四位开始的位与响应格式R2相同。7.3.5 清除状态位跟据以上段落的描述,在SPI 模式下,状态位以三种不同的格式向主机汇报:响应R1、响应 R2和数据错误令牌(在多响应类型中存在相同的几个位,如:card ECC failed)按照在 SD 模式下,不管什么响应格式,错误位在被主机读时清除。状态指示器可以是由读来清除或跟据卡的当前状态。7.4 卡片寄存器7.5 SPI 总线时序表时序图的缩写字母的含义参考英文原版。所有的时序值在表60中定义。主机必须在接收到卡的响应后,保持时钟至少有 NCR时钟周期。这种限制应用在命令和数据响应令牌中。7.5.1 命令/响应请参考英文原版。7.5.2 读数据请参考英文原版。7.5.3 写数据请参考英文原版。7.5.4 时序请参考英文原版。7.6 SPI 电气连接请参考英文原版。7.7 SPI 总线操作条件请参考英文原版。7.8 总线时序请参考英文原版。
限制150内