原创 SPI协议定义

2009-5-5 18:51 6497 7 9 分类: 通信

SPI协议定义


         SD卡手册第5章节学习笔记


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


5.1 SPI总线协议


         SD卡是基于命令和数据流的传输,开启于一个起始位并结束于一个停止位,SPI是基于字节进行传输的。每个命令或者数据是8bit即一个字节,并与CS信号对齐(多次的8个时钟)。


         SPI信息由命令、响应和数据传输组成。所有主机和从机之间的通信由主机控制。主机通过拉低CS信号开始每个总线传输。


         SPI总线模式的响应不同于SD总线模式有如下三点:


被选中的卡总是对命令做出响应;


使用8或者16位的响应结果;


当卡遇到数据恢复问题,它将会产生一个错误响应,而不是像SD总线模式下的超时响应。


 


5.1.1 模式选择


         SD卡在总线模式中唤醒。在接收复位命令时如果CS信号有效(拉低),那么将进入SPI模式。如果SD卡认为SD总线模式是必须的,那么它不会对命令做出响应并继续保持SD总线模式。如果是需要SPI模式,SD卡将切换到SPI模式并发出SPI模式下的R1响应。


         返回SD总线模式唯一的方法是重新给SD卡上电。在SPI模式下,SD卡协议状态机不被检测。所有在SD总线模式支持的命令在SPI模式也是可用的。


         SPI模式下缺省的命令结构/协议是CRC检测关闭。随着SD卡在SD总线模式下上电,CMD0必须紧跟着一个有效的CRC字节。一旦在SPI模式下,默认将关闭CRC


         CMD0命令通常是顺次发送:40 00 00 00 00 9516进制)。


 


5.1.2 总线传输保护


         SPI接口在非保护模式下初始化。主机可以通过CRC_ON_OFF命令(CMD59)开启或关闭保护模式。


 


5.1.3 数据读取


         SPI模式支持单块和多块的数据读取操作(CMD17CMD18)。当SD卡接收到一个有效的读命令时,它将发出响应并随之发送完成早先定义在SET_BLOCK_LENGTH(CMD16)命令里的相应长度数据。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


点击看大图 


         最大块长度如定义在READ_BL_LEN(CSD参数)512字节。块长度可以定义在1READ_BL_LEN之间的任何数。


         起始地址可以定义为SD卡有效地址范围内的任意地址。然而,每个块必须被包含在一个单一的物理卡断里。


 


5.1.4 数据写入


         SPI模式下,SD卡支持单块或者多块写入操作。在接收到一个有效的写命令(CMD24或者CMD25)后,SD卡将做出响应并等待从主机传输过来的数据块。有效的块长度是512字节。设置一个更小的块长度将会导致下一个写命令出错。



点击看大图 


         每个数据块有个start block的传输(一个字节)。SD卡接收到数据块后将会发出一个数据响应并且如果数据接收无误,那么它将被写入。只要SD卡忙于数据写入,一个持续的忙信号将会发送给主机(有效保持dataout线为低)。


         一旦写入操作完成,主机必须使用SENT_STATUSCMD13)命令检测写入结果。一些错误(地址溢出、写保护违规等等)只会在写入期间被检测到。


         在多块写入操作中,停止写入将发生在下一个块写入开始时发送“Stop Tran”取代“Start Block”。



点击看大图 


         SD卡忙时,复位CS信号并不会终止写入操作。SD卡释放dataout线并继续写入。如果在写入完成前不再片选SD卡,dataout线将会被强制拉低并拒绝所有命令。


         SD卡复位(CMD0)将会终止任何悬挂着或者激活操作。这将会SD卡的数据格式。主机有责任包含SD卡。


 


5.1.5 擦除和保护管理


 


5.1.6 CID/CSD寄存器


         SD总线协议不同(发送的寄存器内容包含命令响应),SPI模式下读CIDCSD寄存器是纯粹的读块传输。SD卡将会发出一个标准的响应,随后发送一个末尾包含16CRC16字节字节数据块。


 


5.1.7 复位顺序


         SD卡需要一个预定好的复位顺序。上电复位后或发送完CMD0命令(软件复位命令),SD卡进入IDLE状态。这个状态下主机合法的命令只有CMD1(SEND_OP_COND)ACMD41(SD_SEND_OPCND)CMD59(CRC_ON_OFF)CMD58(READ_OCR)


         主机必须不断查询SD卡(通过不断发送CMD1命令)直到SD卡响应的“in-idle-state”位(被设置为0)指示SD卡完成初始化步骤并准备好进入下一个命令。


         然而,在SPI模式下CMD1没有操作数并且不返回OCR寄存器的内容。取而代之的,主机可以使用CMD58(仅用于SPI模式)读取OCR寄存器。主机有职责阻止在SD卡不支持的电压范围内被访问。


 


5.1.8 时钟控制


         SPI主机可以使用SPI总线时钟信号使得SD卡进入低功耗模式或者或者控制总线的数据流(以避免过慢或过快传输)。允许主机改变时钟频率或关闭时钟。


         以下是SPI主机必须遵守的一些约定:


1.       总线频率可以在任何时候被改变(低于SD卡本身所限定的最大数据传输率);


2.       SD卡的数据输出和响应明显都是需要时钟的运行的。在SPI总线传输的最后,主机需要给SD卡操作完成提供8个周期的时钟信号。在这8个时钟周期内,CS信号值是不相关的,它可以有效也可以无效。以下是各种SPI总线传输需要的额外时钟罗列:


  命令及响应后。SD卡响应结束位后8个时钟,在这8个时钟周期内CS信号值可以有效也可以无效。


  读数据传输。最后一个数据块的读取后的8个时钟周期。


  写数据传输。CRC状态后的8个时钟周期。


 


5.2 SPI命令设置


5.2.1 命令格式


         所以的SD卡命令是6个字节长,并且高位在前传输。



点击看大图 


5.2.2 命令分类


        


 


 


 


 


 


 


 


 


 


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

ilove314_323192455 2009-5-6 16:33

做着看看喽,应该是cyclone或者cyclone II

tengjingshu_112148725 2009-5-6 08:48

学习了,博主是准备在什么器件上实现?
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
EE直播间
更多
我要评论
2
7
关闭 站长推荐上一条 /3 下一条