第19章-串行外围设备接口(SPI)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第19章串行外围设备接口(SPI)
19.1 概述
串行外围设备接口(SPI serial peripheral interface)允许MPC8349E与其他PowerQUICC系列芯片、MC68360、M68HC11和M68HC05微控制器系列以及其他系列设备交换数据。可以将SPI用于与外围设备的通信,例如EEPROM、实时时钟、A/D转换器和ISDN设备等。
SPI是一个全双工、同步、面向字符的通道,支持四线接口(接收、发送、时钟和从选择)。SPI部件由发送器和接收器单元、一个独立的波特率发生器和一个控制单元组成。发送器和接收器单元使用相同的时钟。这个时钟在主模式下源自SPI波特率发生器,在从模式下由外部提供。在SPI传输过程中,同时发送和接收数据。
SPI接收器和发送器都是双缓冲的,如图19-1所示,有效FIFO尺寸(等待时间)为两字符。首先移出SPI的MSB/LSB。当SPI模式寄存器禁止SPI时(SPMODE[EN]=0),它的功耗非常小。
19.2 绪论
SPI的结构图如图19-1所示。
19-1 SPI结构图
19.2.1 特征
SPI的主要特征如下所示:
●四信号接口(SPIMOSI,SPIMISO,SPICLK和/SPISEL)
●全双工操作
●使用32位的数据字符或4位到16位的数据字符
●支持连续字符发送和接收
●支持8/16/32字符长度的反向数据模式
●支持主SPI模式
●支持多主环境
●最大时钟频率在主模式下为(系统时钟频率/4),在从模式下为(系统时钟频率/2)
●独立的可编程波特率发生器
●用于测试的本地回送能力
●漏极开路输出支持多主配置
19.2.2 SPI发送和接收过程
由于SPI是面向字符通信单元,因此由核负责是打包和解包接收和发送的帧。一帧包含一个完整的SPI传输会话中发送或接收的所有字符,从写入SPITD寄存器的第一个字符开始到设置SPCOM[LST]之后发送的最后一个字符为止。更多的信息参看19.4.1.4节“SPI命令寄存器(SPCOM)”。
核通过读SPI接收数据保持寄存器(SPIRD)接收数据,然后SPI清除非空的SPIE[NE]以释放SPIRD寄存器,为下一次接收操作做准备。核通过将数据写入SPI发送数据保持寄存器(SPITD)以发送数据,然后SPI清除SPI事件寄存器(SPIE)的非满位(NF),指示SPITD 寄存器包含待发送的字符。当待发送的下一个字符为当前帧中最后一个字符时,核置位SPCOM[LST],然后将最后一个字符写入SPITD。
SPI核握手协议可以通过轮询或中断来实现。当采用轮询方式时,核按照预定义的频率读SPIE,并且根据SPIE位的值进行操作。轮询频率取决于SPI串行信道的频率。当采用中断机制时,置位SPIE的非满(NF)或非空(NE)位引起到e300核的中断。然后核读SPIE,并根据SPIE位的值进行操作。三个基本的发送和接收模式为主、从和多主模式。
注意
当非满(NF)和非空(NE)位均被置位时,e300核应在发
送新数据前读取接收的数据。
SPMODE[LEN]确定硬件发送的字符的长度。核负责位处理,将数据打包或者解包成合适的字符长度。更多信息参看表19-4中SPMODE[LEN]的说明。
19.2.3 操作模式
可以把SPI设定在在单主设备或多主设备环境下工作。本节介绍单主设备配置时的SPI 主和从操作。同时也讨论了多主设备环境下SPI的操作。
下面几节总结了SPI支持的主要操作模式。
19.2.3.1 作为主设备的SPI
在主设备模式下,SPI发送消息到从外设,从外设同时发回应答。带有多个从设备的单主设备可以使用通用并行I/O信号有选择地启用从设备,如图19-2所示。为了消除单主设备
环境下的多主设备的错误,应通过外部上拉强制主设备的SPISEL输入无效。
图19-2 单主设备/多从设备的配置
为了开始交换数据。e300将待发送数据写入SPITD寄存器。然后SPI为每一个字符在SPICLK产生可编程时钟脉冲。将Tx数据在SPI主出从入(SPIMOSI)移出,同时将Rx数据在SPI主入从出(SPIMISO)移入。在发送过程中,无论何时SPI发出请求,核都负责提供数据,从而保证操作的顺畅。在最后一个数据(LST命令和紧接其后的数据)发送完毕后,写入SPITD的第一个字符作为SPI的开始命令。
SPI连续地发送和接收字符,直到SPCOM[LST]被置位或者有错误发生。
只要发送缓冲区不满,SPI就置位SPIE[NF]向中断控制器发送可屏蔽中断。在发送完最后一个字之后,SPI也置位NF。作为回应,核应读取与最后一个字相关的异常标志。只要接收缓冲区填充了数据,SPI就置位SPIE[NE],向中断控制器发送可屏蔽中断。
19.2.3.2 作为从设备的SPI
在从模式下,SPI设备接收来自SPI主设备的信息并且同时发送回答。从设备的SPISEL 必须在识别出Rx时钟之前有效。一旦SPISEL信号有效,SPICLK就成为从主设备到从设备的输入。SPICLK可以为从DC到系统时钟/2之间的任意频率。
核心将待发送数据送入SPITD寄存器,为数据传输做准备。一旦SPISEL有效,从设
备将数据从SPIMISO移出,从SPIMOSI移入。SPI置位SPI寄存器的NF位,当满缓冲完成发送和接收时或者在出现错误之后,发出可屏蔽中断。SPI连续接收,直到SPISEL信号无效。
发送连续进行,直到没有更多的数据可用或者SPISEL无效。一旦SPISEL重新有效,并且SPICLK开始翻转,就继续发送。缓冲区中的字符都发送了之后,只要SPISEL保持有
效,SPI就发送1。
19.2.3.3 多主设备环境下操作的SPI
SPI可以工作在多主设备环境中,此时所有的SPI设备都被连接到同一个总线上。在这种配置中,所有SPI设备共享SPIMOSI、SPIMISO和SPICLK信号,但是SPISEL输入是独立连接的,如图19-3所示。某一时刻仅有一个SPI设备可以作为主设备——其他所有的SPI 设备必须为从设备。当把一个SPI配置成主设备时,如果它的SPISEL输入有效,将产生多
主设备错误,因为有多个SPI设备成为总线主设备。SPI置位SPI事件寄存器中的SPIE[MME]并且向核发出可屏蔽中断。它还禁止SPI操作和SPI信号的输出驱动器。在重新使用SPI之前,核心必须清除SPMODE[EN],纠正错误,并清除SPIE[MME]。