串行外围接口SPI功能模块的设计

出处:彪哥 发布于:2011-02-15 16:02:47

     摘 要:串行外设接口SPI是现在很流行的一种同步串行接口,可用于与其他外设或者单片机进行通信。根据SPI总线性能特点,给出了SPI总线的数据传输规范,设计了一种SPI的IP功能模块,并成功应用到监控系统SOC芯片中。

  1 引 言

  SPI(Serial Peripheral Interface)串行外围接口是一种3线同步串行全双工通信接口,它具有电路简单,速度陕,通信可靠等优点,近年来大量的新型器件如LCD模块、FLASH、EEPROM存储器、数据输入输出设备都采用了SPI接口,新型的单片机一般都已将SPI接口控制器集成在单片机内部,这样能够大大降低软件的工作量。

  由于SPI系统总线一共只需3~4位数据线和控制线即可实现与具有SPI总线接口功能的各种I/O器件进行接口,而扩展并行总线则需要8根数据线、8—16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/0口线,提高设计的可靠性,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。

  2 SPI模块的接口信号、时序要求及工作模式

  2.1 内部总线接口

  在本设计中,内部总线接口采用的是AMBA总线3.0协议,具有较好的可移植性和可复用性。SPI是APB总线上的Slave模块。APB总线的时序完全遵照(ABMA Specification)(Rev 3.0)。因此此SPI模块支持3种DMA操作,除了标准信号线外,还有3根与DMA模块连接的中断请求信号线。

  2.2 SPI总线接口及时序

  SPI串行接口使用4条线可与多种标准外围器件直接接口:串行时钟线SCLK,主机输入/从机输出数据线MISO,主机输出/从机输人数据线MOSI和低电平有效的从机选择线SSN。SCLK是主机时钟线,为MISO数据的发送和接收提供同步时钟信号。

  在正常工作的时候,主机的4个引脚应和从机对应的4个引脚分别相连。

  SPI模块为了和外设进行数据交换,根据外设的工作要求,其输出串行同步时钟的极性和相位可以进行配置,时钟的极性(CPOL)对传输的协议没有重大影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;相反,如果CPOL=l,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。

  如果CPHA=0,在串行同步时钟的个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设时钟相位和极性应该一致。SPI接口时序如图1、图2所示。

CPOL=0 CPHA =0

图1 CPOL=0 CPHA =0

CPOL=0 CPHA=1

图2 CPOL=0 CPHA=1

  2.3 工作模式

  SPI有两种工作模式,可以通过外部引脚跳线的方式来切换。

  主模式:发送和接收可以同时工作在主模式下。

  主模式的显著特征是不论是发送还是接收始终有SCLK信号,发送操作是由向发送FIFO中写数据而触发的。在主模式下,时钟信号的1次作用对应一位数据的发送(MOSI)和另一位数据的接收(MISO)。

  如图3所示,在主片中数据从移位寄存器中自右向左发出送到从片(MOSI),同时从片中的数据自左向右发到主片(MISO),经过8位时钟周期完成1个字节的发送。输入字节保留在移位寄存器中,此时SPI INT FLAG位自动置位(如果有中断设置,则产生中断),移位寄存器的数据将被锁存到接收FIFO中,此后对接收FIFO的读操作将把数据读出。

  从模式:发送和接收同时工作在从模式下。从模式的显著特征是:不论是发送还是接收始终必须在SCLK信号作用下进行,并且SSN信号必须有效。

  当SSN信号无效时,数据的发送无法进行并且输入的数据视为无效。数据的发送和接收过程见图3所示,与主模式下基本相似,只是移位寄存器的数据移出和输入方向与之相反。

主片和从片发送和接收操作

图3 主片和从片发送和接收操作

  3 SPI模块功能设计

  3.1 模块划分

  根据功能定义及SPI的工作原理,将整个SPI IP划分为8个子模块:APB接口模块、时钟分频模块、发送数据FIFO模块、接收数据FIFO模块、寄存器控制模块、命令解析模块、中断处理模块及发送接收数据模块。整个SPI模块划分结构图如图4所示。

数据传输结构

图4 数据传输结构

  在这些模块中,Tx—FIFO和Rx—FIFO用来做接收发送数据的FIFO。DMA/INT是中断控制模块,通知MCU或者DMA发送或者接收数据的FIFO。CMD ANALYSIS模块用来解析在从模式下Host发过来的命令。CTRl/Register用来放置寄存器,供MCU读写配置SPI的各种参数。Shifter用来做串并转换,收发送数据。Clock模块用来产生主模式下时钟。

  3.2 设计方案

  通过深入分析SPI的四种传输协议可以发现,根据一种协议,只要对串行同步时钟进行转换,就能得到其余的三种协议。为了简化设计,规定如果要连续传输多个数据,在两个数据传输之问插入一个串行时钟的空闲等待,这样状态机只需两种状态(空闲和工作)就能正确工作。相比其它设计,在基本不降低性能的前提下,思路比较精炼、清晰,能够大大缩短写代码的时间,降低出错率。

  此SPI模块有两种工作方式:查询方式和DMA方式。查询方式通过处理器核监视SPI的状态寄存器来获取其所处的状态,从而决定下一步动作。

  DMA方式由DMA模块控制数据在内存和SPI间的交换,而不需要处理器核的参与,有效提高了总线利用率。

  外部MCU可以通过和内部MCU通讯的方式,把从模式的SPI配置成可以解析命令的模式,这样外部主模式的SPI可以在SSN低电平的时候连续传输多位数据,在下降沿的个数据被认为是命令。从模式的SPI可以解析这些命令然后做相应的操作。这些操作主要包括,清除接收FIFO或者发送FIFO中的数据,选择MCU或者DMA来作为数据交互的对象等,可以大大节省和MCU交互所需要的带宽。

  作为主要组成部分的寄存器控制模块和SPI模块采用同步电路设计,它们之间的通讯采用异步电路设计。这些主要是考虑到SPI的带宽通过MCU的控制是可调的。SPI部分的时钟频率可调,可实现多种带宽,增加了本设计SPI的灵活性。

  3.3 电路实现

  为了保证RTL代码的正确性,对IP的功能进行全面的仿真验证。仿真包括RTL级和门级仿真验证。RTL级仿真是将代码文件调入硬件描述语言的仿真软件进行功能仿真,门级仿真包括布局布线前和布局布线后仿真。布局布线后仿真,获得的时延参数。将RTL级代码转换成门级网表,0.13um工艺标准单元库。

  在传统的设计流程中进行功能验证,首先需要通过写测试矢量的方式给需要进行功能测试的模块加激励,然后通过观察模块的输出结果,判断模块的功能是否正确。但是在写测试矢量时,测试工程师是在自己对模块功能理解的基础上进行的。这样就存在一个问题,测试矢量对模块的激励有可能是不完备的,还有可能是错误的,但测试矢量的激励并没有使错误体现出来;也有可能模块的功能是正确的,误报错误使验证过程变得非常低效。为避免以上问题,对本设计模块的功能验证中,采用系统级验证环境。该环境由IP总线、驱动器、监视器、外部模块和协调它们工作的脚本组成。组成系统的各模块可以按需要加人环境。每次验证过程就是相应的激励作用于环境的过程。验证结果由环境产生、检验和输出。以保证测试矢量的完备性和正确性。

  该验证环境在LINUX操作系统下,仿真器采用Cadence公司的Nc—verilog,支持C/C++、Verilog和VHDL协同仿真,可以直接把SPI模块挂在验证环境中,通过Verilog的$readmemh任务读入软件激励进行验证。

  在系统时钟为36MHz的情况下,图5(a)给出了CPOL=0,CPHA=1时,发送6位数据的仿真结果。图5(b)给出了在CPOL=0,CPHA=0的情况下,接收6位数据的仿真结果。

仿真结果

图5 仿真结果

  这两个仿真结果说明本设计完全支持4种SPI传输协议,而且能够以的速率无缝传输数据。

  4 结束语

  本设计的SPI可作为IP核嵌入监控系统SOC芯片中。芯片通过流片验证,各项指标已达到了原设计的要求,通过板级测试,芯片中SPI能支持4种传输协议,工作的频率可达18M bps,在一秒钟内能够抓图或者回显l5帧图像,达到业内较高水平。本设计中的不足之处是没有做数据校验,随着市场需求的提高,可在设计中增加CRC校验以增加数据的正确性,提高系统效率。


  
关键词:接口

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!