7 SPI模式<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
7.1 介绍
SPI模式由一个由基于闪存SD存储卡提供的次要通信协议组成.此模式是SD存储卡协议的子集。此接口在上电(CMD0)后的每一个复位命令期间被选择。
SPI标准只定义物理链接,而不提供数据传输协议。SD存储卡SPI执行利用SD存储卡协议和命令集的子集。
7.2 SPI总线协定
SD卡是基于命令和数据流,这些命令和数据流以一个起始位开始,以停止位结束的.SPI通道是面向字节的.每个命令或数据块都是由多个8位字节构成,且每个字节与CS片选信号对齐(例如:此长度是8时钟周期的倍数)。
类似于SD存储卡协议,SPI短信是由命令,响应和数据块环组成。所有的通信都由主机控制,主机通过拉低CS来启动每个总线事务。
SPI模式下的响应行为有三个方面和SD模式不同:
1、被选择的卡总是回应命令。
2、使用附加的(8位)响应结构。
3、当卡遇到一个数据检索问题时,它会用一个响应错误来回应(替换预期的数据块),而不是SD模式中的超时。
除了命令响应之外,每一个在写操作期间发送到卡的数据块将以一个特殊的数据响应令牌来被响应。一个数据块可能和一个写块(WRITE_BL_LEN)一样大,也可能和一个信号字一样小。部分块的读/写操作都被卡中CSD寄存器中所叙述的被选择的项使能。
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />7.2.1 模式选择
SD卡从SD模式中唤醒。如果CS信号在复位命令(CMD0)被接收期间被拉低,并进入空闲模式,如果认为是SD模式被需求则不会响应此命令,仍在SD模式下。如果SPI模式被需求,则卡将会切换到SPI,且用SPI模式R1响应。
唯一返回SD模式的方法是进入上电周期。在SPI模式下,SD存储卡协议状态机不被遵守。所有的在SPI模式下被支持的SD存储卡命令总是可用的。
7.2.2 总线传输保护
每个在总线上传输的SD存储卡令牌被CRC位保护。在SPI模式下,SD存储卡提供一个非保护模式。此模式使系统用可靠的数据链接来建立,以排除(否定)硬件或软件需要执行CRC生成和校验功能。
在非保护模式下,命令、响应和数据令牌的CRC位在令牌中仍被需要,尽管,对于发送器,它们被定义成“don't care”,且被接收器忽略。
在非保护模式下,SPI接口被初始化。尽管,RESET命令用于使卡切换到SPI模式,但它是在SD模式下被卡接收,所以,必须有一个有效的CRC域。
因为CMD0没有参数,所有的域的内容(包括CRC域)都是常数,不需要在运行时间计算出来。一个有效的复位命令是:
0x40,0x0, 0x0, 0x0, 0x0,0x95
主机可以用CRC_ON_OFF命令(CMD59)开关卡的CRC选项。
7.2.3 读数据
SPI支持单块读和多块读操作(在SD存储卡协议中的CMD17 OR CMD18)。当接收一个有效的读命令后卡将在一个在SET_BLOCK_LEN(CMD16)定义了长度的数据令牌之后,用一个响应令牌作出回复。(参考Figure41)
Figure41 单块读操作
一个有效的数据块被添加了一个16位CRC,此CRC由CCITT标准多项式X16+X12+X5+1生成。
能被READ_BL_LEN给出的最大的块的的长度大CSD中定义了。如果片块被允许,块长度可以是1~MAX块大小之间的任何长度。否则,数据读的有效块长度只是在READ_BL_LEN中给出的值。
起始地址可以是在卡的有效地址范围内的任何字节地址。但是,每一个块,必须包含入一个单一的物理卡扇区中。
如发生一个可修复错误,卡不会传输任何数据,而是发送一个特定的数据错误令牌到主机。
Figure42:读操作-数据错误
在多块读操作中,每一个被传输的块有它的16-CRC位。停止传输命令将实际地停止数据传输操作。(与SD模式相同)
Figure43:多块读操作
7.2.4 写数据
在SPI模式下,SD存储卡支持单块和多块写命令。在接收到有效的写命令(CMD24、CMD25)之后,卡将以一个响应令牌响应,然后等待主机发来数据块。CRC后缀、块长度和起始地址都与读操作相同。(例外:控制片块读读操作的CSD参数WRITE_BL_PARTIAL)
Figure44:单块写操作
每一个数据有一个一字节的“start block”令牌的前缀。
在一个数据块被接收后,卡有一个数据响应令牌的响应。如果数据无误地接收,它将会被编程。只要卡忙于编程,一个忙令牌的连续流将会被发到主机(有效地使DataOut数据线为低电平)
一旦编程操作完成,主机可用SEND_STATUS命令(CMD13)来检查编程的结果。在编程期间仅某些错误(如地址超出范围,写保护)被探测到。在数据块和data_response令牌中,有效校验仅是这CRC和Write Error 指示。
在多块写操作中,停止传输是通过发送“Stop Tran”令牌而不是在下一块开头的“Start Block”令牌。如果在数据响应(data_response)中发生Write Error 指示,主机要利用SEND_NUM_WR_BLOCKS(ACMD22)去获得有多少个好块被写入。数据令牌的描述在7.3.3中给出。
Figure45:多块写操作
当卡正忙,复位CS信号不会终结编程过程。卡会释放DataOut(tri-state)并且继续编程。如果卡在编程完成之前重新选择,DataOut线将会被强行回到低电平且所有的命令将会被拒绝。
复位一张(用CMD0)将会终结任何悬而未决的或激活的编程操作。这样将会破坏卡上的数据格式。主机要有保护它的责任。
7.2.5 擦除和写保护
在SPI模式下擦除和写保护管理程序与SD模式下的相同。当卡正在擦除或者正在改变预定扇区清单的写保护位时,它将会进入忙状态且使DataOut线为低电平。图46举例说明了一个有和没有忙信号的无数据的总线事务。
Figure46:无数据的操作
7.2.6 读CID/CSD寄存器
跟SD存储卡协议不同(在那里寄存器的内容是作为一个命令响应发送),在SPI模式下,CSD和CID的内容的读取是一个简单的块读事务。在16字节的带16位CRC后缀的数据块之后,卡用一个标准的响应令牌来响应。
CSD命令的数据超时时间不能被设置入卡的TAAC,因为这个值是放在卡的CSD寄存器中。所以标准的响应超时值(NCR)被用于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存储卡协议那样,在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命令分成几个集合。每一个集合支持一类的功能。在这两种通信模式下,SD存储卡都支持同组的可选命令集。
3、命令详细说明
下表给出了一个SPI模式总线命令集的详细说明.响应在7。3。2中定义了。表57列出了所有SD存储卡命令。SPI 模式的“YES”表示此命令在SPI模式下被支持。由于这此限制,CSD中此命令集描述仍有效。如果一个命令不需要参数argument,此域的值应该设为零。被保留的命令在SD 模式中也是被保留。命令的二进制代码通过记忆标志来定义。举一个例子,command index域的内容是二进制的“000000”(CMD0)和“100111”(CMD39)。
Table57:命令和argument
7.3.2 响应
这里有几种响应令牌。就像在SD模式一样,所有响应首先从MSB开始传输。
l 格式R1
除了SEND_STATUS命令,在每一个命令之后响应令牌被发送。它是一个字节长,和MSB总是设为零。其它位错误指示,一个错误以“1”作为信号。R1格式的结构是在图47中给出。其标志的意思在下面给出:
2 在空闲状态:卡正在空闲状态,且正运行初始化程序。
2 擦除复位:因为一个不按擦除序列命令被接收到,则一个擦除序列是在执行之前清除
2 非法命令:一个非法命令代码被探测到。
2 通讯CRC错误:最后一个命令的CRC校验失败。
2 擦除序列错误:在擦除命令序列中有一个错误发生。
2 地址错误:一个非对齐的与数据长度不匹配的地址,在命令中被取用。
2 参数错误:命令的argument(如地址,块长度)超出卡的允许范围。
Figure47:R1 响应格式
l 格式 R1b
响应令牌相同于R1格式,另带可选的忙信号。忙信号令牌可能是数字节的任何数目。一个零值表示忙。非零表示卡准备好接收下一个命令。
l 格式R2
此响应令牌是两字节长。作为SEND_STATUS命令的响应发送。其格式如Figure48
Figure48.
第一个字节与R1响应相同。第二个字节的内容如下:
2 擦除参数:对于擦除,一个无效的选择、扇区或者组。
2 写保护违返:命令尝试写一个已保护的块。
2 卡ECC失败:卡内部的ECC被利用了,但是对正确的数据它失败了。
2 CC错误:内部的卡的控制器错误。
2 错误:一个一般的或一个未知的错误在操作期间发生。
2 写保护擦除忽略或锁/解锁失败:这个状态位有两个过载的功能。当主机尝试擦除一个写保护的扇区时或制造一个序列或锁解锁时密码错误,它要被设为1。
2 卡被锁:当卡被用户锁时设为1。当解锁后被复位为0。
l 格式R3
当一个READ_OCR命令被接收后,一个响应令牌由卡发送。这个响应长度为5字节。第一个字节与R1格式相同。其它四字节是OCR寄存器。
Figure49:R3响应格式
l 数据响应
每一个被写到卡的数据块将通过一个数据响应令牌来确认。它是一个字节长,格式如下:
状态位的含义如下:
“010”-数据接收。
“101”-因CRC错误数据被拒绝。
“110”-因写错误数据被拒绝。
如果主机获得“110”的状态域,它应用CMD12中止数据传输和发送CMD13来校验哪个写问题引起写错误标志。ACMD22能用来发现已写好的块的数目。
7.3.3 数据令牌
读写命令有与它们相关的数据传输。数据通过数据令牌来传输接收。所有的数据字节首先发送MSB字节。
数据令牌是4~515字节长,格式如下:
对于单块读、单块写和多块读:
2 第一字节:start block
2 字节2-513(取决于数据块长度):用户数据
2 最后两字节是:16位的CRC
对于多块写操作:
2 每一个块的第一字节:
如果数据是用于传输的,第一个字节是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 总线时序
请参考英文原版。
文章评论(0条评论)
登录后参与讨论