spi 及其接口设计

spi 及其接口设计
spi 及其接口设计

SPI 接口的设计

第二章介绍了模数转换器的可编程控制架构,其中可编程控制功能的实现需要分成两部分:一部分为SPI 接口电路,以及其根据内部寄存器存储的数据产生的控制信号;另一部分是具体的电路受控模块。本章将介绍接口与数字逻辑电路的设计,包括应用于本模数转换器的SPI 接口与数字逻辑电路的设计、综合以及仿真验证。

3.1 数据通信接口

3.1.1 串行通信

基本的通信方式有两种:并行通信和串行通信。并行通信是指数据以成组的方式,在多条并行信道上同时进行传输。

串行通信指要传送的数据或信息按一定的格式编码,然后在单根线上,按位的先后顺序进行传送。接收数据时,每次从单根线上按位接收信息,再把它们拼成一个字符,送给CPU (Central Processing Unit )做进一步的处理。收发双方必须保持字符同步,以使接收方能从接收的数据比特流中正确区分出与发送方相同的一个一个字符。串行通信只需要一条传输信道,易于实现,是目前主要采用的一种通信方式,它具有通信线少以及传送距离远等优点。

串行通信时,按数据的传送的方向可以分为单工、半双工和全双工等三种方式。

(1)单工(Simplex ):数据线仅能向一个方向传输数据,两个设备进行通信时,一边只能发送数据,另一边只能接收数据。

(2)半双工(Half Duplex ):数据可在两个设备间向任一个方向传输,但因为只有一根传输线,故同一时间内只能向一个方向传输数据,不能同时收发。

(3)全双工(Full Duplex ):对数据的两个传输方向采用不同的通路,可以同时发送和接收数据,

串行通信有两种基本工作方式:异步方式和同步方式。采用异步方式(Asynchronous )时,数据发送的格式如图3-1所示。不发送数据时,数据信号线呈现高电平,处于空闲状态。当有数据要发送时,数据信号线变成低电平,并持续一位的时间,用于表示字符的开始,称为起始位。起始位之后,在信号线上依次出现待发送的每一位字符数据,最低有效位0D 最先出现。采用不同的编码方案,待发送的每个字符的位数就不同。当字符用ASCII 码表示时,数据位占7位(60~D D )。在数据位的后面有一个奇偶校验位,其后有停止位,用于指示字符的结束。停止位可以是一位也可以是一位半或两位。可见,用异步方式发送一个7位的ASCII 码字符时,实际需发送10位、10.5位或11位信息。如果用10

位来发送的话,就意味着发送过程中将会浪费30%的传输时间。为了提高串行数据传输的速率,可以采用同步传送方式。

一帧

n 个字符

图3-1 异步串行数据发送格式

同步方式(Synchronous )中串行同步字符的格式如图3-2所示。没有数据发送时,传输线处于空闲状态。为了表示数据传输的开始,发送方先发送一个或两个特殊字符,称该字符为同步字符。当发送方和接收方达到同步后,就可以连续地发送数据,不需要起始位和停止位了,可以显著的提高数据的传输速率。采用同步方式传送的发送过程中,收发双方须由同一个时钟来协调,用来确定串行传输每一位的位置。在接收数据时,接收方可利用同步字符将内部时钟与发送方保持同步,然后将同步字符后面的数据逐位移入,并转换成并行格式,直至收到结束符为止。

图3-2 同步串行数据发送格式

3.1.2 SPI 接口简介

SPI(Serial Peripheral Interface)是由Motorola 公司提出的一种工业标准,后来交给Opencores 组织进行维护。SPI 模块是在MCU 与MCU 之间,或MCU 与外围设备之间实现近距离、全双工、同步串行传送的接口。与其它串行接口相比,具有电路结构简单、速度快、通信可靠等优点。通过SPI 接口,MCU 可以很方便的与外围芯片直接相连,用以传送控制/状态信息和输入/输出数据。

一个典型的SPI 模块的核心部件是一个8位的移位寄存器和一个8位的数据寄存器SPIDR 。通过SPI 进行数据传送的设备有主SPI 和从SPI 之分,即SPI 传送在一个主SPI 和一个从SPI 之间进行。图3-3给出了两个SPI 模块相互连接、进行SPI 传送的示意图,图左边是一个主SPI ,图右边为一个从SPI 。

图3-3 典型SPI模块

典型的SPI接口有四个引脚:MISO(主入从出)、MOSI(主出从入)、SCLK(串行时钟)和SS(从选择)。具体功能如表3-1。

表3-1 典型SPI接口引脚

传送时双方的MISO(主入从出)、MOSI(主出从入)、SCLK(串行时钟)同名引脚相连。SS引脚的定义有几种选择,因而有不同的连法。可以看到,主SPI和从SPI的移位寄存器通过MISO和MOSI引脚连接为一个16位的移位寄存器。主SPI的波特率发生器产生移位时钟SCLK。

主SPI启动传送过程,MCU向其SPIDR进行一次写入。写入SPIDR的数据被装载到SPI的移位寄存器。根据SCLK的8个周期,双方同步移位8次,移位寄存器中的内容交换,然后双方移位寄存器中的数据加载到各自的SPIDR,双方传送完成标志置1,完成一次传送。仅从传送路径上看,无所谓发送方和接收方。在一次传送开始之前发送方应将发送数据写入自己的SPIDR,该数据自动装载入移位寄存器。在一次传送完成后,接收方从SPIDR中读取接收数据[26]。

目前已有的SPI接口IP软核,XILINX公司的CoolRunner系列SPI主机IP 核[27](CoolRunner Serial Peripheral Interface Master IP Core),是通过有限状态机来控制SPI主机与从机以及微控制器之间的通信。Motorola公司的SPI核[28]是一个主从共用的IP软核,具有很高的可重用性和通用性。

3.2 SPI接口的设计与综合

3.2.1 设计方法、目标及流程

本文SPI接口采用自顶向下设计方法。自顶向下设计[29][30]是一种逐级分解、变换,将系统要求转变为电路或者版图的过程。从系统级(System Level Design)开始考虑系统的行为、功能、性能以及允许的芯片面积和成本要求,进行系统划分和功能设计。用行为语言描述每个方框的外特性,并将全部方框连在一起进行系统仿真(System Simulation)来验证系统设计的正确性。RTL级设计按照系统要求编写程序,一般使用Verilog HDL或VHDL语言进行编程,使之符合系统设计规定的外特性。RTL级设计的结果须经行为仿真(Behavior simulation),保证源代码(Source Code)的逻辑功能正确。

把源代码转换为网表的过程叫做综合。网表是使用Verilog语言对门级电路的结构性描述,它是最底层文件。网表是原理图的语言描述,对应着门级电路原理图。网表中所有的器件都包含有必须的工业参数,如温度特性、电压特性、固有门延时、输入阻抗、上升时间、下降时间、驱动能力、面积等[31][32]。由于这些工业参数的存在,使得门级仿真(Gate Level Simulation)十分接近于真实芯片的物理测试。经过门级仿真后再经过自动布局布线(Auto Place and Route),从而生成版图(Layout),经过物理验证和后仿真,就可以制版流片,并交付封装测试。整个流程如图3-4所示。

图3-4 自顶向下的设计流程

由上节可知,SPI接口有主从之分,本文设计重点为从SPI(Slave SPI)。这主要是由于本文的应用环境决定的。本文设计的ADC接口电路及数字逻辑电路的主要目标是实现外部主SPI对从SPI的初始化。要求从主SPI接收数据,配置内部的寄存器,实现相应的控制目标,产生相应的控制信号。不需要产生数据来配置其他的芯片,所以本文设计的SPI接口中就没有考虑波特率发生器,它只能从外部接收移位时钟。

首先,对所要设计的从SPI做整体规划,建立架构,并对系统进行层次划

分。根据实际需要,将主SPI与从SPI之间的连接架构简单的归结为图3-5所示。

图3-5 主从SPI之间连接架构

主SPI与从SPI之间通过CSB、SCLK、SDIO三个引脚进行相连,它们分别是片选引脚、串行时钟引脚、串行数据输入\输出引脚。此架构比典型的SPI 接口引脚少了一个串行数据输出引脚,为了使芯片引脚数量最少,所以将这一引脚省略。

3.2.2 SPI 接口外特性

3.2.2.1 SPI 接口的端口引脚

SPI接口的端口引脚包括:CSB、SCLK、SDIO。

(1)CSB片选引脚

CSB是一种低电平有效控制,用来选通读写周期。CSB可以在多种模式下工作,如果控制器具有芯片选择输出或其他多器件选择方法,则该引脚可以与CSB线相连。当该线为低电平时,器件被选择,SCLK和SDIO线路上的信息便会得到处理。当该引脚为高电平时,器件会忽略SCLK和SDIO线路上的所有信息。这样,多个器件便可以与SPI端口相连。在只连接一个器件的情况下,可以将CSB线路与低电平相连,使器件始终处于使能状态,但是此时如果端口发生错误,将无法使器件复位,因为复位信号要在CSB的上升沿才起作用。

(2)SCLK串行时钟

SCLK引脚为串行移位时钟输入引脚,用来使串行接口的操作同步。输入数据在该时钟上升沿有效,输出数据在下降沿有效。因为本文中SPI接口仅仅用来为配置寄存器传送数据,所以对数据传输的速率要求不高。为降低该引脚对时钟线路上噪声的敏感度,它采用施密特触发器实现。

(3)SDIO串行数据输入/输出

SDIO引脚用作输入或输出,取决于所发送的指令(读或写)以及时序帧中的相对位置(指令周期或者数据周期)。在写或读操作的第一阶段,该引脚用作输入,将信息传递到内部状态机。如果该命令被确定为写命令,则在指令周期内,SDIO引脚始终用作串行输入,将数据传送给内部移位寄存器。如果该命令被确定为读命令,状态机将把SDIO引脚变为输出,然后该引脚将数据回传给控制器。在本文设计的SPI接口中,该引脚目前只实现向寄存器中写入数据的功能。

3.2.2.2 SPI 接口的数据基本传送规则

(1)格式

SDIO数据传输的第一阶段是指令阶段,指令由16位组成,之后是数据,数据由一个或多个8位构成,长度由前面的指令字长位确定。CSB的下降沿与SCLK的上升沿一起决定帧何时开始。如果器件的CSB与低电平相连,则帧开始于SCLK的第一个上升沿,如图3-6。

图3-6 数据格式

(2)指令周期

指令周期为串行传输数据的前16位,指令周期分为若干位段,如图3-7所示:

图3-7 指令周期

(3)读/写指令位

数据流中的第一位是读/写指令位(W

R/)。当该位为高电平时,表示指令为读取指令,指令周期(前16位)完成时,内部状态机使用所提供的信息解码要读取的内部地址。SDIO的方向由输入变为输出,由字长定义的适当数量的字从从器件移位出来。

当数据流中的第一位为低电平时,则进入写入阶段。指令周期完成时,内部状态机使用所提供的信息解码要写入的内部地址。指令完成之后的所有数据被送往目标地址。一旦传输完字长所要求的所有数据,状态机便返回空闲模式,等待下一个指令周期。

(4)字长

W1和W0表示要读取或者写入的数据字节数。具体设置和操作如下表:

表3-2 W1、W0的设置和操作

如果要传输的字节数为3个或者更少,则CSB可以在字节边界上变为高电

平,如果在非字节边界上变为高电平将终止通信周期。如果W1:W0为11,则数据可以传输到CSB变为高电平时为止。在数据流处理过程中,不允许CSB停止,一旦流处理开始(定义为第三个数据字节完成以后),则在操作完成之前,不允许CSB回到高电平。如果CSB确实变为高电平,流处理即终止,下次CSB 变为低电平时,将开始新的指令周期。如果CSB在非8位边界变为高电平,通信周期即终止,任何未完成的字节均会丢失。不过已完成的数据字节会得到正确处理。

在本文设计的SPI接口中,由于均是8位的寄存器,W1:W0固定为00。即传送一个字节的数据。

(5)地址位

其余13位表示所发送数据的起始位置。如果要发送的数据不止一个字,则会使用顺序寻址,从指定地址开始,根据模式设置而递增或者递减。

(6)数据周期

指令周期之后是数据周期。发送的数据量由字长(W0和W1)决定,可以是一个或者多个字节的数据。所有数据均由8位字组成。

(7)位序

发送数据有两种模式:MSB优先或LSB优先。上电时,默认模式为MSB 优先。可以通过对配置寄存器编程来改变为LSB优先。在MSB优先模式下,串行交换从最高位开始,结束于LSB。在LSB优先模式下,顺序相反。指令长度为16位,有两个字节组成。

3.2.3 SPI 接口的RTL级设计

3.2.3.1 SPI 接口功能模块的划分

图3-8是从SPI接口的系统示意图。SPI接口是串行通信接口,它将主SPI 发送过来的数据存入内部相应寄存器之后再输出控制信号到芯片其他部分。因此整个系统可以划分为接口、核心和输出端口三部分。

图3-8 SPI接口系统示意图

从SPI由指令移位寄存器、指令数据缓存器、寄存器控制逻辑、寄存器构成,如图3-9所示。

主SPI发送过来的串行数据先依次进入指令移位寄存器,指令移位寄存器再依次将数据传送到指令缓存器。寄存器控制逻辑根据MSB优先或LSB优先控制指令移位寄存器的移位以及控制指令缓存器的输出,将其传送到相应地址的寄存器当中。寄存器包括三种类型:配置寄存器、传送寄存器和编程寄存器。寄存器

存入相应数据之后,先根据配置寄存器配置串行接口,编程寄存器再根据寄存器功能表中的定义输出相对应的控制信号,最后根据传送寄存器指令统一输出控制信号。

图3-9 SPI接口的功能模块

3.2.3.2 寄存器的设计

SPI端口是一种由外部输入信号来配置寄存器的机制,因此需要指令移位寄存器和指令缓存器对输入进来的数据进行暂存。此外对器件进行编程,需要定义一个结构化的寄存器空间,此结构可细分为多个地址,数据传输的指令阶段中的地址即指向这些地址。每个地址可寻址一个8位的字节,每一位均有其特定的含义和作用,详见表3-3。

表3-3 寄存器表

在上表中可以看到寄存器分为三种类型:配置寄存器、传送寄存器和编程寄存器。

(1)配置寄存器(地址00)

配置寄存器位于地址00,该寄存器用来配置串行接口,包含有2个有效位,位于高半字节当中,低半字节未连接,留做备用。其功能是使芯片软复位并配置在已知状态,而与当前的数据移位方向无关,这将确保在发生故障时器件能够给予积极处理。

位6——LSB优先

该位决定发送和接收信息的顺序,如果该位清零,数据将以MSB优先的方

式处理。如果设置该位,数据将以LSB优先的方式处理。该位被配置后,立即产生作用。

位5——软复位控制

该位控制软复位,该位的默认值为0。如果将该位设置为高电平,就会启动芯片芯片软复位,软复位将所有默认值写入寄存器中,但配置寄存器(00)除外,无默认值的寄存器将保持用户最后一次编程的状态。软复位处理完毕后,该位清零,表示复位过程已完成。该位被配置后,在CSB上升沿到来时产生作用。

(2)传送寄存器(地址FF)

一般寄存器都需要采用主从触发器进行缓冲,缓冲可以增强系统的多器件同步能力,并有助于写入对存储器其他部分写入的值可能有依赖关系的配置。根据需要的不同,有些寄存器需要这样的缓冲,例如编程寄存器。有些寄存器则永远不会进行缓冲,例如配置寄存器和传送寄存器,因为出于程序和控制目的,这些寄存器要求及时获得响应。无论缓冲与否,SPI端口都要负责将信息放入寄存器中,不过对于采用缓冲的寄存器,必须启动传输以将数据移出。

传送寄存器即提供软件传输信号。

位0——软件传输

设置位0为“1”将立即启动传输,当状态机识别到该位已经设置时,它会产生一个内部传输信号,将数据从编程寄存器中移出。完成之后,状态机将该位清零,以便下次传输。

(3)编程寄存器

本文设计中所用到的编程寄存器的地址包括(08、09、10、14、16、18),其他地址可以在有新的需求时进行添加。当编程寄存器按照表3-3输入相对应的值后,应产生一系列的控制信号,如表3-4所示。这些控制信号产生后被锁存,并在软件传输的命令下达后,才会被一起传输到后面的模块。受控电路则实现如表3-3中所示的功能。

表3-4 编程寄存器列表

3.2.4 SPI接口的逻辑综合

逻辑综合是指从设计的高层次向低层次转换的过程,是一种自动设计的过程,即用Verilog HDL语言描述的程序经过优化转化成所用单元库的器件列表以及相对应的关系。可以是网表的形式,也可以是图表的形式。综合不是单纯的映射,更重要的是整体优化。一般的综合过程,其输入为RTL设计,经过转换和优化后得到优化后的门级网表。

在布局布线之前,设计者可以通过逻辑综合优先考虑约束问题,尽早发现并解决设计出现的违规,不将其带入物理设计中。施加不同的约束条件,可以满足不同的设计要求。在时序驱动的设计中,优先考虑时序要求,其次为面积要求。

逻辑综合可分为以下步骤[31]:

(1)转译(Translation):读入电路的RTL级描述,将其翻译成所对应的功能块以及功能块之间的拓扑结构。在综合器内部生成不作任何的逻辑重组和优化的布尔函数表达式。

(2)优化(Optimization):基于所施加的面积和时序的约束条件,综合器按照一定的算法对转译结果进行逻辑重组和优化。

(3)映射(Mapping):根据所施加的时序和面积的约束条件,在综合器和目标工艺库(Target Technology)中搜索符合条件的单元来构成实际电路。

逻辑综合所需要的输入文件有RTL级的代码、约束条件以及所对应的综合库。输出文件是描述逻辑单元互连关系的网表。如下图所示:

工艺库

图3-10 逻辑综合步骤

本文所设计的SPI接口使用Synopsys公司的Design Complier软件进行综合,采用chartered 0.18um的深亚微米级综合库,对整个设计的参数进行了试验和调整,使其具有更小的面积和更快的速度。

SPI接口的逻辑综合主要解决以下几个问题:设置综合环境、设置设计约束、选择编译策略以及制定出现时序违规后的解决方案。

3.2.

4.1 综合环境的设置

SPI接口的综合环境的设置要在进行综合之前进行,主要包括工艺偏差、电压和温度范围、必需的驱动强度和驱动类型等。工艺偏差(Process Deviation)是指在流片的阶段,晶圆(Wafer)在流水线上要经过几十道工序,这些工序在控制上会有一些偏差,这些偏差导致器件的性能的变化。一般在逻辑电路上表现为信号延时或者驱动能力的变化。同样,当温度变化时会导致沟道电流强度变化,从而影响逻辑电路的驱动能力和信号延时。当电压比较高时,信号延时变小、逻辑电路单元的驱动能力增强,从而可以运行在较高的工作频率下。综合环境属性的设置脚本如下表所示:

表3-5 综合环境属性脚本设置

首先对SPI进行操作环境设置,包括设计的工艺、电压和温度条件(set_operating_conditions)。综合库包括最好、典型以及最差环境,在综合时要使用最差环境,所以选择scx_csm_18ic_ss_1p62v-125c库文件,以最大建立时间(setup time)来优化设计。

线负载模型(set_wire_load_model)可以对各个模块的线网负载进行正确

的建模,使用较宽松的线负载模型,可以为物理设计提供较充裕的时序空间,避免影响到布局布线后的时序收敛,导致综合迭代次数增加。

线负载模式(set_wire_load_mode)一共有三种,即顶部(TOP)、依附(Enclosed)、分割(Segmented)。本文所选用的综合库默认为顶部模式,就不需要在脚本中另外设置。

本文将库单元INVX1设置为驱动单元(set_driving_cell),使DC根据输入驱动来计算输入的跳变时间,进而计算路径时序。

DC需要知道输出单元所驱动的全部电容负载,以便准确的计算输出电路的时序。默认情况下,DC假设所有端口的负载为0。可以通过set_load命令给端口电容负载设置一个常数,此处设为10pF。

3.2.

4.2 时序约束设置

单纯的映射对综合来说是远远不够的,更重要的是设计的整体优化,这就需要为综合规定必要的面积、速度、功耗等设计约束,从而使优化有所依据。

非时钟信号的时序约束包括接口约束和内部约束。接口约束包括建立时间(setup time)、保持时间(hold time)等。内部约束包括输入延时(set_input_delay)、输出延时(set_output_delay)、假路径(set_false_path)、多周期路径(set_multicycle_path)等。

时序单元(sequential cell)的建立时间是在时钟信号的有效沿到来之前,数据输入信号必须到达的最小时间长度,以保证该单元可以正确工作。建立时间起点为数据信号变换到VDD的50%,终点为时钟信号有效沿变换到VDD的50%[33]。

时序单元的保持时间是在时钟信号的有效沿或其他特定信号到来之后,数据输入信号必须保持稳定的的最小时间长度。起点为时钟信号有效沿变换到VDD 的50%,终点为数据信号有效沿变换到VDD的50%为[33]。

SPI接口的时钟约束条件设置脚本如下表所示:

表3-6 时钟约束条件设置脚本

脚本中,定义了时钟名,设置了输入端口上升延迟为40%,即16ns。输出端口上升延迟也为16ns。设置sclk时钟周期为40ns,上升沿从0ns开始,下降沿从20ns开始。set_clock_uncertainty 选项模拟了时钟抖动。同时还设置了最大的时钟驱动,这里假设时钟驱动能力无限大,实际的时钟结构可以由布局布线工具通过时钟树综合实现。

3.2.

4.3 设计规则约束设置

设计规则需要对一些物理参数进行设置,比如0->1(1->0)跳变时间、电容、扇入扇出。这些参数之间是相互影响相互联系的。如果扇出过大,会导致电容过大。而电容过大,会导致充放电时间过长,也就是0->1(1->0)跳变时间过长。

要在工艺库器件的参数范围内进行设计规则的约束设置。一共有三种设计规则的约束:最大电容(max capacitance)、最大扇出(max fanout)、最大跳变(max transition)。三者相互联系,相互影响,用来控制设计中的缓冲(buffering)。

SPI接口的设计规则约束设置的脚本如下表所示:

表3-7 设计规则约束脚本

3.2.

4.4 编译策略

根据设计的结构和定义,选择最合适的编译策略。对于少于10K门的设计,采用自顶向下的层次式编译。整个设计被读入并编译,然后基于设计指标,只需在顶层应用约束和属性,通过对整个设计进行优化,就可以得到理想的结果。

使用时序预算(Time Budgeting)来编译根据每个模块的时序要求来划分的设计。设计者有包括内部模块的时序需求在内的整个设计的时序预算。通过手工规定每个模块的时序需求,从而为每个单独的模块产生单独的综合脚本。此时,综合通常采用自底向上的方法。时序预算编译方案适合于大型设计,由于它使用独立的脚本,因此更易于管理设计。即使对子模块添加改动,也不需要重新对整个设计进行综合。它还可以对单个模块进行优化得到较好的结果。

对于内部模块没有很好定义的大型设计,使用重新综合编译。它不受硬件内

存的限制,允许模块之间的时序预算,但需要对顶层设计进行约束,并且预先编译子模块。子模块再使用顶层约束来规定特性,这样可以有效地传播时序信息从顶层到子模块。通过执行脚本,为每个子模块产生各自的约束文件,接着用这些文件对个子模块进行重新编译。由于可以自由进行子模块之间的时序预算,且占用内存小,子模块之间的优化可得到高质量的结果,产生单独的可被设计者修改的脚本。本文采用自顶向下的层次式编译方案,因为设计的SPI 接口规模较小,且时钟网络较简单。

3.2.

4.5 SPI 接口综合的面积报告分析

SPI 的面积报告如下图所示,组合逻辑面积:2794.182m μ,内部连线面积为40786.882m μ,总面积为51694.142m μ。符合预期的要求。

表3-8 综合后的面积分析报告

3.2.

4.6 SPI 接口综合的时序报告分析

时序分析主要用来显示单个路径在每个路径组中的最坏时序迟滞。时序分析报告中包含:路径起点、终点和中间点;路径上每个点增加和积累的延迟;数据最终到达终点的时间和数据输出应该所需的时间;建立时间迟滞,即所需时间与到达时间之差。由表3-9可知,路径时序符合要求,并且有21.45ns 的时序裕量。

表3-9 综合后的时序分析报告

3.2.

4.7 综合后得到的电路图

下图为综合后的整体电路图:

图3-11 整体电路图

3.3 SPI接口的仿真与验证

仿真与验证是芯片设计中重要环节。随着技术的快速进步,芯片上市周期越来越短,这就需要提高芯片的设计效率以缩短产品研发周期。而在芯片设计流程中,仿真验证所需时间已经占整个设计周期的70%,甚至高达85%,因此仿真验证成为芯片设计的主要瓶颈。

集成电路的验证分为功能验证、时序验证、物理验证和可测试性验证等。本章将介绍SPI接口的功能验证。功能验证方法主要采用基于仿真的验证方法。本文采用仿真的验证方法来验证SPI接口的功能正确性。

对芯片功能的验证可以分为三个阶段:RTL级验证、全芯片验证和扩展验证[34]。RTL级验证通常由模块的设计者进行,运行大量简单的测试方案,保证该模块可以与其他功能模块很好地集成在同一芯片上。全芯片验证的目的是保证可以覆盖功能测试计划中的所有测试目标。扩展验证目的是发现设计中所有角落的错误。由于测试向量集不能预先确定,并且可能延续到版图设计阶段,因此这个阶段相对较长。本章将介绍RTL级的验证。

3.3.1 SPI接口的RTL级仿真及结果

RTL级设计是对各个功能模块进行寄存器传输级的描述,系统的行为功能由寄存器之间的连接关系所实现的逻辑来承载。RTL级仿真的主要目标是完成逻辑功能的验证。仿真的输入是不含任何延迟的源代码程序。RTL级仿真只验

证理想状态下逻辑功能是否正确和时序安排是否合理,所以仿真输出中不包含器

件延迟和路径延迟,没有过渡态和毛刺,波形很规整。RTL级仿真应采用自下而上的方法,首先完成各个功能块的仿真,然后完成顶层仿真,应尽量全面。

仿真的方法有两种:测试平台法和交互式仿真方法[35]。测试平台法是使用专门设计测试程序对被测模块自动输入测试矢量,并通过波形输出文件记录输出,将仿真输出矢量与所期望的仿真输出矢量比较,从而判断其功能的正确性。利用测试程序可以对一个设计模块进行时序仿真和功能仿真。交互式仿真方法主要利用EDA工具提供的仿真器进行模块的仿真。它利用仿真器对输入信号赋值,指定仿真执行时间,观察输出波形。由于SPI接口规模较小,输入输出少,本文采用交互式仿真方法。

本文设计SPI接口的主要目的是从外部输入数据来配置寄存器,产生相应的控制信号,因此对信号输入的速度没有特别的要求。在仿真过程中按照25MHz 的频率来设置主片同步频率sclk,芯片本身的时钟频率clk为100MHz。根据本章第二节的内容,可知SPI接口通过sdio传输数据,当csb为低电平时选通读写周期。根据表3-4,制定了下面的测试计划,根据顺序产生的波形来验证SPI 接口的功能。

(1)输入控制寄存器地址08,输入数据00000001,选择完全关断模式;输入地址09,输入00000000,关闭时钟占空比稳定电路;输入地址10,输入00111111,输出偏移调整量offs;输入地址14,输入00000011,调整输出模式调整opm;输入地址16,输入10000000,调整输出相位opp;输入地址18,输入00000000,调整基准电压输出;输入地址FF,输入00000001,开启软件传输功能,在下一个csb下降沿到来时,所有控制信号一起输出。

(2)输入地址00,输入00100000,实现软复位功能,在csb上升沿到来时全部控制信号恢复原值。

(3)输入地址00,输入01000000,实现LSB优先;输入地址08,输入10000000,选择完全关断模式;输入地址09,输入00000000,关闭时钟占空比稳定电路;输入地址10,输入11111100,输出偏移调整量offs;输入地址14,输入11000000,调整输出模式调整opm;输入地址16,输入00000001,调整输出相位opp;输入地址18,输入00000000,调整基准电压输出;输入地址FF,输入10000000,开启软件传输功能,在下一个csb下降沿到来时,所有控制信号一起输出。

(4)输入地址00,输入00000100,开启软复位功能,在csb上升沿到来时全部控制信号恢复原值。

(5)根据表3-4,分别向地址08、09、10、14、16、18输入其他的值,验证输出的控制信号是否正确。

下面是ModelSim的仿真波形图:

图3-10 波形仿真图(一)

由图3-12可以看出,sdio按照测试计划(1)中串行输入相应数据,MSB 优先,在软件传输功能开启之后,在下一个csb下降沿输出相对应的控制信号。其对应的控制信号输出的期望值和实际输出值如下表所示:

表3-10 控制信号输出值

各控制信号的实际输出值与期望值相同,达到了设计目标。

在配置地址为00的寄存器之后,实现软复位,即测试计划(2),再按照(3)由sdio接口串行输入数据,此时LSB优先。最后按照步骤(4),实现软复位功能。如下图所示:

图3-11 波形仿真图(二)

3.4 本章小结

本章完成了SPI接口与数字逻辑电路的RTL级设计、逻辑综合与验证工作。RTL级设计从顶层模块的划分、各个子模块的划分直至最底层模块的设计,然后将设计映射到Chartered 0.18um工艺库中,综合后得到了符合面积和时序要求的网表。进行了RTL级的仿真,保证了SPI接口的功能正确,达到了设计目标。

SPI接口设计与实现

SPI接口设计与实现 SPI(SerialPeripheralInterface)总线是一种同步串行外设接口,它 可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI总线应用广泛,已经成为很多器件的标准配置,可以直接和各个厂家生产的 多种标准外围器件直接接口。其它常用的串行接口还有I2C、UART这 两种接口,这三种接口互有优缺点。与I2C接口相比,SPI接口速度更快、协议更简单、并且是全双工的,但连线也相对多一些。与UART接口相比,SPI更灵活,因为其使用主设备的时钟进行同步,所以两个比特之间 的时间间隔可以是任意的。在点对点的通信中,SPI接口不需要进行寻 址操作,且为全双工通信,显得简单高效。 1SPI总线工作原理 SPI总线一般以主/从模式工作,通常有一个主设备和一个或多个从设备,数据传输由主机控制,典型SPI结构框图如图1所示。SPI总线包含四条信号线,分别是sclk、miso、mosi和cs,其中,sclk为数据传输时钟,由主机产生;miso是从机输出,主机输入数据线;mosi是主机输出, 从机输入数据线;cs是从设备片选信号,由主机控制,当连接多个从设备时,通过该信号选择不同的从设备。SPI总线是按字节发送数据的,主机和从机内部都包含一个8位串行移位寄存器,在时钟信号控制下,寄存 器内的数据由高到低输出至各自的数据线,8个时钟后,两个寄存器内的数据就被交换了。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机 的传输。当主机发送一个连续的数据流时,可以进行多字节传输,在这 种传输方式下,从机的片选端必须在整个传输过程中保持低电平。 根据串行同步时钟极性和相位不同,SPI有四种工作方式。时钟极性(CPOL)为0时,同步时钟的空闲状态为低电平,为1时,同步时钟的空闲 状态为高电平。时钟相位(CPHA)为0时,在同步时钟的第一个跳变沿采 样数据,为1时,在同步时钟的第二个跳变沿采样数据。因为主设备时

基于CPLD的SPI接口设计

基于CPLD 的SP I 接口设计 D esign i ng SP I I n terface ba sed on CPLD 何永泰 (楚雄师范学院 楚雄 675000) 【摘 要】 根据SP I 同步串行接口的通信协议,介绍了在X ilinx Coo lR unnct XPLA 3CPLD 中利用V HDL 语言实现SP I 接口的设计原理和编程思想,通过用此接口,使得那些没有SP I 接口功能的微处理器和微控制器,也能通过SP I 接口与外围设备进行数据交换。 【关键词】 SP I 接口,CPLD ,接口扩展,接口设计,串行接口 ABSTRACT A cco rding to comm un icati on p ro toco l of SP I synch ronou s serial in terface ,th is paper p resen ts the design theo ry and p rogramm ing idea of i m p lem en ting SP I in terface w ith V HDL language in X ilinx Coo lR unner XPLA 3CPLD .T h is in terface can be u sed to data exchange w ith peri pheral apparatu s fo r m icrop rocesso r and m icrocon tro ller w h ich have no t SP I in terface functi on .KEYWOR D S SP I in terface ,CPLD ,in terface expan si on ,in terface design ,serial in terface 1 SP I 总线接口协议 SP I (Seri on Perp heral In terface )总线接口是一个 全双工,同步串行数据接口。许多微处理器,微控制器和外部设备具有这个接口。它能够实现在微控制器之间或微控制器与外部设备之间通信。SP I 总线通常有4条线组成,即:串行时钟线(SCK )、主机输出从机输入 线(M O S I )、 主机输入从机输出线(M ISO )和从机选择线SS N 。SCK 靠主机和数据流来驱动。M O S I 数据线从主机输出数据作为从机的输入数据。M ISO 数据线传送从机输出的数据作为主机的输入数据。在大多数情况下,使用一个SP I 作为主机,它控制数据向1个或几个从机传送。主机驱动数据从它的SCK 和M O S I 端到各从机的SCK 和M O S I 端,被选择的从机驱动数据从它的M ISO 端到主机的M ISO 端。SS N 控制线用于从机选择控制。 SCK 的相位和极性能改变SP I 的数据格式,时钟极性CPOL =‘0’,串行数据的移位操作由时钟正脉冲触发,时钟极性CPOL =‘1’,串行数据的移位操作由负脉冲触发;时钟相位CPHA =‘0’, 串行数据的移位 图1 CPHA =‘0’时SP I 的数据转换时序图 操作由时钟脉冲前沿触发,时钟相位CPHA =‘1’,串行数据的移位操作由时钟脉冲后沿触发。时钟相位CPHA =‘0’时SP I 的数据转换时序图如图1所示。 在图1中SCK 信号在第一个SCK 周期中的前半周期无效,在这种模式中,SS 的下降沿示意数据传送的开始,因此,SS 在连续串行字节之间必须被取反和重新申明。时钟相位CPHA =‘1’时SP I 的数据转换时序图如图2所示。 在图2中SCK 信号从无效电平到有效电平的第一边沿意味着在这种模式下数据传送的开始,SS 信号能保持有效的低电平在连续串行字节之间,这种模式用于只有一个主机和一个从机的系统中。 在SP I 传送数据时,8位数据从一个SP I 接口移出时,另一个SP I 接口也开始移出8位数据,这样主机的8位移位寄存器和从机的8位移位寄存器可以被看作是16移位寄存器,16位移位寄存器移动8个位置就实现了在主机和从机之间交换数据。基于CPLD 的SP I 接口设计中,从SP I 总线上接收的数据被保存在一个接收寄存器中,发送的数据被写到一个发送寄存器中 。 图2 CPHA =‘1’时SP I 的数据转换时序图 3 20040414收到,20040724改回 33 何永泰,男,1970年生,讲师,在读硕士,研究方向:电子工程设计。 ? 72?第17卷 第10期 电脑开发与应用 (总497)

SPI接口详细说明

SPI 串行外设接口总线,最早由Motorola提出,出现在其M68系列单片机中,由于其简单实用,又不牵涉到专利问题,因此许多厂家的设备都支持该接口,广泛应用于外设控制领域。 SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照Motorola的SPI接口定义来设计的。但正因为没有确切的版本协议,不同家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法直接互连(需要软件进行必要的修改)。 虽然SPI接口的内容非常简单,但本文仍将就其中的一些容易忽视的问题进行讨论。 SPI ( Serial Peripheral Interface ) SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。 时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI 接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。 SPI接口信号线 SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。 设备选择线SS-(Slave select,或CS-)

SS-线用于选择激活某Slave设备,低有效,由Master驱动输出。只有当SS-信号线为低电平时,对应Slave设备的SPI接口才处于工作状态。 SCLK:同步时钟信号线, SCLK用来同步主从设备的数据传输,由Master驱动输出,Slave设备按SCK的步调接收或发送数据。 串行数据线: SPI接口数据线是单向的,共有两根数据线,分别承担Master到Slave、Slave到Master的数据传输;但是不同厂家的数据线命名有差别。 Motorola的经典命名是MOSI和MISO,这是站在信号线的角度来命名的。 MOSI:When master, out line; when slave, in line MISO:When master, in line; when slave, out line 比如MOSI,该线上数据一定是Master流向Slave的。因此在电路板上,Master的MOSI引脚应与Slave的MOSI引脚连接在一起。双方的MISO也应该连在一起,而不是一方的MOSI连接另一方的MISO。 不过,也有一些产家(比如Microchip)是按照类似SDI,SDO的方式来命名,这是站在器件的角度根据数据流向来定义的。 SDI:串行数据输入 SDO:串行数据输出 这种情况下,当Master与Slave连接时,就应该用一方的SDO连接另一个方的SDI。 由于SPI接口数据线是单向的,故电路设计时,数据线连接一定要正确,必然是一方的输出连接另一方的输入。 其实这个问题本来很简单的,但由于不同厂家产品的命名习惯可能不同,因此还需小心,以免低级出错。 数据传输的时序模式

spi_和接口设计

SPI 接口的设计 第二章介绍了模数转换器的可编程控制架构,其中可编程控制功能的实现需要分成两部分:一部分为SPI 接口电路,以及其根据部寄存器存储的数据产生的控制信号;另一部分是具体的电路受控模块。本章将介绍接口与数字逻辑电路的设计,包括应用于本模数转换器的SPI 接口与数字逻辑电路的设计、综合以及仿真验证。 3.1 数据通信接口 3.1.1 串行通信 基本的通信方式有两种:并行通信和串行通信。并行通信是指数据以成组的方式,在多条并行信道上同时进行传输。 串行通信指要传送的数据或信息按一定的格式编码,然后在单根线上,按位的先后顺序进行传送。接收数据时,每次从单根线上按位接收信息,再把它们拼成一个字符,送给CPU (Central Processing Unit )做进一步的处理。收发双方必须保持字符同步,以使接收方能从接收的数据比特流中正确区分出与发送方相同的一个一个字符。串行通信只需要一条传输信道,易于实现,是目前主要采用的一种通信方式,它具有通信线少以及传送距离远等优点。 串行通信时,按数据的传送的方向可以分为单工、半双工和全双工等三种方式。 (1)单工(Simplex ):数据线仅能向一个方向传输数据,两个设备进行通信时,一边只能发送数据,另一边只能接收数据。 (2)半双工(Half Duplex ):数据可在两个设备间向任一个方向传输,但因为只有一根传输线,故同一时间只能向一个方向传输数据,不能同时收发。 (3)全双工(Full Duplex ):对数据的两个传输方向采用不同的通路,可以同时发送和接收数据, 串行通信有两种基本工作方式:异步方式和同步方式。采用异步方式(Asynchronous )时,数据发送的格式如图3-1所示。不发送数据时,数据信号线呈现高电平,处于空闲状态。当有数据要发送时,数据信号线变成低电平,并持续一位的时间,用于表示字符的开始,称为起始位。起始位之后,在信号线上依次出现待发送的每一位字符数据,最低有效位0D 最先出现。采用不同的编码方案,待发送的每个字符的位数就不同。当字符用ASCII 码表示时,数据位占7位(60~D D )。在数据位的后面有一个奇偶校验位,其后有停止位,用于指示字符的结束。停止位可以是一位也可以是一位半或两位。可见,用异步方式发送一个7位的ASCII 码字符时,实际需发送10位、10.5位或11位信息。如

全功能SPI接口的设计与实现

SPI 串行通信接口是一种常用的标准接口,由于其使用 简单方便且节省系统资源,很多芯片都支持该接口,应用相当广泛[1]。但是现有文献和设计多数仅实现了SPI 接口的基本发送和接收功能,对SPI 接口的时序控制没有进行深入的研究。全功能SPI 接口应具有四种不同的时钟模式,以适应具有不同时序要求的从控制器。文中主要研究SPI 接口的时钟时序,并用具体电路实现具有4种不同极性和相位的时钟,最后通过仿真验证和FPGA 验证[2]。 1SPI 控制器典型结构 SPI 模块中的典型结构是用于通信的主从2个控制器之 间的连接,如图1所示。由串行时钟线(SPICLK )、主机输入从机输出线(SPISOMI )、主机输出从机输入线(SPISIMO )、SPI 选通线(SPISTE )4条线组成[3]。当CPU 通过译码向主控制器写入要传输的数据时,主控制器通过串行时钟线来启动数据传输,将会在串行时钟线的一个边沿将数据移出移位寄存器,而在串行时钟的另一个边沿将数据锁存在移位寄存器中。 SPI 选通线是SPI 控制器的使能端,可以选择多个从机,实现 一主多从的结构,只要SPI 选通信号将要选的从机处的选通信号变为低电平就能够连接成功。 2 全功能SPI 控制器设计 2.1 SPI 控制器内部结构 SPI 控制器的原理框图如图2所示,其中主要包括:1)SPI 控制器的内部寄存器 SPI 操作控制寄存器(SPICTL ),SPI 状态寄存器(SPISTS ), SPI 波特率设计寄存器(SPIBRR ),SPI 接收缓冲寄存器 图1 SPI 主从连接Fig.1 Master -slave link 全功能SPI 接口的设计与实现 辛晓宁,孙文强 (沈阳工业大学研究生学院,辽宁沈阳110870) 摘要:SPI (Serial Peripheral Interface ,串行外围接口)是Motorola 公司提出的外围接口协议,它采用一个串行、同步、全双工的通信方式,解决了微处理器和外设之间的串行通信问题,并且可以和多个外设直接通信,具有配置灵活,结构简单等优点。根据全功能SPI 总线的特点,设计的SPI 接口可以最大发送和接收16位数据;在主模式和从模式下SPI 模块的时钟频率最大可以达到系统时钟的1/4,并且在主模式下可以提供具有四种不同相位和极性的时钟供从模块选择;可以同时进行发送和接收操作,拥有中断标志位和溢出中断标志位。关键词:全功能SPI ;时钟极性和相位;串行通信;微处理器;中断控制中图分类号:TP332.3 文献标识码:A 文章编号:1674-6236(2012)23-0153-04 Design and implementation of full featured SPI master interface XIN Xiao -ning ,SUN Wen -qiang (Graduate School ,Shenyang University of Technology ,Shenyang 110870,China ) Abstract:The SPI put forward by Motorola Company is a full-duplex ,synchronous serial date link that is standard across many microprocessors ,microcontrollers ,and peripherals It enables communication between microprocessors and peripherals and inter -processor communication ,The SPI system is flexible enough to interface directly with numerous commercially available peripherals ,and it also has some excellences such as it can be configured flexibly and it has a simply structure ,and so on.This SPI has 16-bit transmit and receive capability.The maximum transmission rate in both slave mode and master mode is now CLKOUT/4.The SPI can provide four different clocking schemes on the SPICLK pin.It can be sending and receiving at same time.It has SPI interrupt flag and TXBUF full flag. Key words:full function of SPI ;polarity and phase of CLK ;serial communication microprocessor ;interrupt control 收稿日期:2012-08-11 稿件编号:201208039 作者简介:辛晓宁(1965—),男,辽宁沈阳人,博士,教授。研究方向:SOC 集成电路设计。 电子设计工程 Electronic Design Engineering 第20卷Vol.20第23期No.23 2012年12月Dec.2012 -153-

基于FPGA的SPI接口设计

基于FPGA的SPI接口设计 SPI是一种在FPGA和其他芯片之间传输数据的简单有效的接口方式。 SPI项目 第一部分:什么是SPI 第二部分:SPI的简单实现 第三部分:应用 第一部分:什么是SPI SPI是允许一个器件同其他一个或多个器件进行通讯的简单接口。 SPI是什么样的? 首先让我们来看看两个芯片之间的SPI接口是如何连接的。 在两个芯片时间通讯时,SPI需要4条连线。 正如你所看到的,他们是SCK、MISO、MOSI以及SSEL。其中一个芯片叫做主控芯片,另一个叫从芯片。 SPI基础 基本特点: 1.同步 2.串行 3.全双工 4.非即插即用 5.一主多从 更多细节: 1.同步时钟有主控芯片产生,每个时钟传输一位数据 2.数据在传输前,首先许要进行并转串,才能用一条线传输 3.两条数据线,一条输入、一条输出 4.主从双方有关于SPI传输的先验知识,如比特顺序、数据长度等 5.数据传输有主控芯片发起,每次只与一个从芯片通讯 SPI是一种同步全双工的通讯接口,每个时钟在两条数据线上各传输一比特数据。 简单的传输 假设在主从芯片之间进行的是8位长度的,高位数据在前的SPI传输,则单个字节的传输在波形上看起来是这样的。 MOSI是主输出线,而MISO则是从输出线。由于SPI是全双工的,所以在时钟沿上两条线同时传输数据。MOSI将数据从主控芯片传输至从芯片,MISO则将从芯片的数据传输到主控芯片。 详细的说是这样的: 1,首先主控芯片使能相应的SSEL信号,通知相应的从芯片数据传输要开始了; 2,主控芯片产生8个SPI时钟周期,并将数据在每个时钟沿发送出去,同时从芯片在也每个时钟沿将数据发送到MISO线上。 3,主控芯片撤销SSEL信号,一次SPI传输结束 多个从芯片的情况

MAX7219及单片机的SPI接口设计

串行显示驱动器PS7219及单片机的SPI接口设计 在单片机的应用系统中,为了便于人们观察和监视单片机的运行情况,常常需要用显示器显示运行的中间结果及状态等等。因此显示器往往是单片机系统必不可少的外部设备之一。常用的显示器有很多种,其中LED(发光二极管显示器)是应用较多的一种,它特别适用于强光和光线极弱的场合。 要使LED显示,必须提供段选码和位选码。传统的硬件译码显示接口广泛采用由中央处理器CPU(如:Intel 8031)扩展I/O口(如:8255),然后再使用逻辑门驱动芯片(如7407等)驱动相应的位码和段码。这种设计,芯片间连线十分复杂,系统工作可靠性不高,已越来越不适应单片机系统集成化、小型化的发展要求。特别是系统并行扩展I/O,其缺点十分明显 (1)连线太多,系统连线复杂,印制板布线不方便; (2)并行总线上挂靠的器件太多,系统工作的稳定性和可靠性低; (3)体积较大,集成度不高。 正是由于上述原因,近年来,各厂家相继开发出了集成度较高、驱动能力较强、驱动位数较多、功能齐全的LED显示驱动器。 本文介绍一种低价位、高性能的多位LED显示驱动器PS7219芯片,以及它与单片机89C51具体的SPI接口设计与应用软件。 1PS7219简介 PS7219是一种新型的串行接口的8位数字静态显示芯片。它是由武汉力源公司新推出的24脚双列直插式芯片,采用流行的同步串行外设接口(SPI),可与任何一种单片机方便接口,并可同时驱动8位LED (或64只独立LED),其引脚图如图1所示。 PS7219内部具有15×8RAM功能控制寄存器,可方便选址,对每位数字可单独控制、刷新、不需重写整个显示器。显示数字亮度可由数字进行控制,每位具有闪烁使能控制位。当引脚CON(13脚)置高电平,可禁止所有显示,达到降低功耗的效果,但同时并不影响对控制寄存器的修改。PS7219还有一个掉电模式、一个允许用户从1位数显示到8位数显示选择的扫描界限寄存器和一个强迫所有LED接通的测试模式。另外,PS7219A型内置一个可靠的uP监控电路,可为外部提供一个脉宽140ms,触发门限典型值为4.63V的高电平复位信号。 如果N个PS7219级联,可实现N×8位LED显示。 2PS7219引脚功能 PS7219引脚功能如表1所示。

SPI及其接口介绍

一、SPI接口简介 SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。外围设备FLASHRAM、网络控制器、LCD显示驱动器、A/D 转换器(如图一所示)和MCU等。 图一、ADC中的SPI 二、SPI接口 一个典型的SPI模块的核心部件是一个8位的移位寄存器和一个8位的数据寄存器SPIDR。通过SPI进行数据传送的设备有主SPI和从SPI之分,即SPI传送在一个主SPI和一个从SPI之间进行。图二给出了两个SPI模块相互连接、进行SPI传送的示意图,图左边是一个主SPI,图右边为一个从SPI。

图二、典型SPI示意图 在AN-877应用笔记中,对spi的接口定义与典型spi接口有所不同,AN-877使用一根线SDIO代替了典型SPI的MISO和MOSI,SS接口用CSB代替。图三和图四分别是双线模式下单器件控制(主从一对一)和双线模式下多器件控制(主从一对多)。 图三:主从一对一控制 图四:主从一对多控制

但是原理都一样。主从机之间一般由3个引脚组成:串行时钟引脚(SCLK)、串行数据输入/输出引脚(SDIO)、片选引脚(CSB)。 1、引脚 数据输入/输出(SDIO):该引脚用作数据的输入/输出,用作输入还是用作输出具体取决于所发送的指令(读或写)以及时序帧中的相对位置(指令周期或数据周期)。在读或写的第一个阶段,该引脚用作输入,将信息传递到内部状态机。如果该命令为读命令,状态机把该引脚(SDIO)变为输出,然后该引脚将数据回传给外部控制器。如果该命令为写命令,该引脚始终用作输入。 串行时钟(SCLK):SCLK由外部控制器提供,时钟频率最高为25MHZ。所有数据的输入输出都是与SCLK同步的。输入数据在SCLK的上升沿有效,输出数据在SCLK的下降沿有效。

串行接口SPI接口应用设计

串行接口SPI接口应用设计 2011-12-28 13:24:32| 分类:单片机| 标签:|字号大中小订阅 作者:马潮老师/ 整理:armok / 2005-01-17/ https://www.360docs.net/doc/9a1580159.html, 作者:马潮老师/ 整理:armok / 2005-01-17/ https://www.360docs.net/doc/9a1580159.html, 使用的同步串行三线SPI接口,可以方便的连接采用SPI通信协议的外围或另一片AVR单片机,实现在短距离内的高速同步通信。ATmega128的SPI采用硬件方式实现面向字节的全双工3线同步通信,支持主机、从机和2种不同极性的SPI时序,通信速率有7种选择,主机方式的最高速率为1/2系统时钟,从机方式最高速率为1/4系统时钟。 ATmega128单片机内部的SPI接口也被用于程序存储器和数据E2PROM的编程下载和上传。但特别需要注意的是,此时SPI的MOSI和MISO接口不再对应PB2、PB3引脚,而是转换到PE0、PE1引脚上(PDI、PDO),其详见第二章中关于程序存储器的串行编程和校验部分的内容。 ATmega128的SPI为硬件接口和传输完成中断申请,所以使用SPI传输数据的有效方法是采用中断方式+数据缓存器的设计方法。在对SPI初始化时,应注意以下几点: .正确选择和设置主机或从机,以及工作模式(极性),数据传输率; .注意传送字节的顺序,是低位优先(LSB First)还是高位优先(MSB Frist); .正确设置MOSI和MISO接口的输入输出方向,输入引脚使用上拉电阻,可以节省总线上的吊高电阻。 下面一段是SPI主机方式连续发送(接收)字节的例程: #define SIZE 100 unsigned char SPI_rx_buff[SIZE]; unsigned char SPI_tx_buff[SIZE]; unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow; unsigned char tx_wr_index,tx_rd_index,tx_counter; #pragma interrupt_handler spi_stc_isr:18 void spi_stc_isr(void) { SPI_rx_buff[rx_wr_index] = SPDR; //从ISP口读出收到的字节 if (++rx_wr_index == SIZE) rx_wr_index = 0; //放入接收缓冲区,并调整队列指针 if (++rx_counter == SIZE) { rx_counter = 0; rx_buffer_overflow = 1; } if (tx_counter) //如果发送缓冲区中有待发的数据 { --tx_counter;

基于FPGA的SPI串行外围接口接口设计毕业设计

武汉理工大学本科学生毕业设计(论文)开题报告

目录 摘要.................................................................................. I Abstract ............................................................................. II 1 绪论.. (3) 1.1课题研究背景 (3) 1.2 SPI研究目的及意义 (4) 1.3 本章小结 (4) 2 SPI原理分析 (5) 2.1 SPI介绍 (5) 2.2 SPI工作模式 (6) 2.3 SPI传输模式 (6) 2.4 SPI协议 (7) 2.5 本章小结 (8) 3 方案论证 (10) 3.1在51系列单片机系统中实现 (10) 3.2 用可编程逻辑器件设计SPI (11) 3.3 本章小结 (11) 4 SPI的电路设计 (12) 4.1 SPI设计系统的功能 (12) 4.2 SPI各部分具体实现 (12) 4.2.2 SPI系统中所用的寄存器 (13) 4.2.3 SPI速率控制 (14) 4.2.4 SPI控制状态机 (14) 4.2.5 SPI程序设计流程图 (15) 4.3 SPI仿真及开发板上调试验证分析 (16) 4.3.1 仿真分析 (16) 4.3.2开发板上调试 (18) 4.4 本章小结 (20) 5 论文总结 (21) 致谢 (22) 参考文献 (23) 附录1 (24) 附录2 (28)

摘要 随着专用集成电路(ASIC)设计技术的进步以及超大规模集成电路(VLSI)工艺技术的飞速发展,以及其价格的日益降低,采用FPGA编程的硬件电路来实现诸如SPI接口也日益切实可行,相对软件实现具有更好的优点。SPI接口是一种常用的标准接口,由于其使用简单方便且节省系统资源,很多芯片都支持该接口,SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间等等。 由于SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照Motorola的SPI接口定义来设计的,但正因为没有确切的版本协议,不同厂家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法互联(需要用软件进行必要的修改)。本文基于一种使用较为普遍的协议来进行设计,并参照Motorola公司的MC68HC11A8单片机中的SPI模块定义来设计的简化的SPI接口,用Verilog语言进行编写设计,并在ISE 软件上进行设计仿真,并在基于Xlinx公司的Spartan-3E芯片的Digilent公司出品的Nexys2开发板上用在线逻辑分析仪chipscope进行板上调试验证观察结果,并完成实现功能,并具有一些独创性的设计。 关键词:FPGA Verilog SPI协议 chipscope ISE

spi_和接口设计

SPI 接口的设计 第二章介绍了模数转换器的可编程控制架构,其中可编程控制功能的实现需要分成两部分:一部分为SPI 接口电路,以及其根据部寄存器存储的数据产生的控制信号;另一部分是具体的电路受控模块。本章将介绍接口与数字逻辑电路的设计,包括应用于本模数转换器的SPI 接口与数字逻辑电路的设计、综合以及仿真验证。 3.1 数据通信接口 3.1.1 串行通信 基本的通信方式有两种:并行通信和串行通信。并行通信是指数据以成组的方式,在多条并行信道上同时进行传输。 串行通信指要传送的数据或信息按一定的格式编码,然后在单根线上,按位的先后顺序进行传送。接收数据时,每次从单根线上按位接收信息,再把它们拼成一个字符,送给CPU( Central Processing Unit )做进一步的处理。收发双 方必须保持字符同步,以使接收方能从接收的数据比特流中正确区分出与发送方相同的一个一个字符。串行通信只需要一条传输信道,易于实现,是目前主要采用的一种通信方式,它具有通信线少以及传送距离远等优点。 串行通信时,按数据的传送的方向可以分为单工、半双工和全双工等三种方式。 ( 1 )单工( Simplex ):数据线仅能向一个方向传输数据,两个设备进行通信时,一边只能发送数据,另一边只能接收数据。 ( 2 )半双工( Half Duplex ):数据可在两个设备间向任一个方向传输,但因为只有一根传输线,故同一时间只能向一个方向传输数据,不能同时收发。 ( 3 )全双工( Full Duplex ):对数据的两个传输方向采用不同的通路,可以同时发送和接收数据, 串行通信有两种基本工作方式:异步方式和同步方式。采用异步方式 ( Asynchronous )时,数据发送的格式如图3-1 所示。不发送数据时,数据信号线呈现高电平,处于空闲状态。当有数据要发送时,数据信号线变成低电平,并持续一位的时间,用于表示字符的开始,称为起始位。起始位之后,在信号线上依次出现待发送的每一位字符数据,最低有效位D0 最先出现。采用不同的编 码方案,待发送的每个字符的位数就不同。当字符用ASCII 码表示时,数据位占7 位( D0 ~ D6 )。在数据位的后面有一个奇偶校验位,其后有停止位,用于指示字符的结束。停止位可以是一位也可以是一位半或两位。可见,用异步方式发送一个7 位的ASCII 码字符时,实际需发送10 位、10.5 位或11 位信息。如

SPI接口及应用

SPI接口及应用 摘要:为解决I/O口数据传输的速率问题,提出SPI接口的单线应用方案,分析该方法的可行性,并在单片机ADuC812与射频无线通信模块nRF2401间的接口设计中得到了应用,验证该方案的有效性。该方案具有电路设计简单、数据传输速率高等优点。 1 SPI通信 SPI接口的全称 "Serial Peripheral Interface" 意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI接口一种同步串行外设接口,有信号线少、协议简单、传输速度快的特点,因此有不少外围器件都采用SPI总线,如Flash RAM、A/ D转换器、LED显示器、MCU以及计算机网络等。 MCU中的SPI接口通过配置可与各个厂家生产的多种标准外围器件直接连接。 SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。 SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号: (1)MOSI -主器件数据输出,从器件数据输入 (2)MISO -主器件数据输入,从器件数据输出 (3)SCLK -时钟信号,由主器件产生 (4)/SS -从器件使能信号,由主器件控制 SPI信号线:一般的SPI接口使用4条信号线与外围设备接口,其具体功能如下: SCLOCK:主机的时钟线,为数据的发送和接收提供同步时钟信号。每一位数据的传输都需要1次时钟作用,因而发送或接收1个字节的数据都需要8个时钟作用。主机的时钟可以通过固件进行设置,并和从机的时钟线相连。 MISO:主机输入/从机输出数据线。主机的MOSO应与从机的发送数据端相连,进行高位在前的数据交换。 SS:低电平有效的从机选择线。当该线置低时,才能跟从机进行通信。 SPI工作模式:SPI的工作模式分为:主模式和从模式。 主模式的特点是不论发送还是接收始终有SCLOCK信号,SS信号不是必需的,由于SPI只能有一个主机,因而不存在主机的选择问题。 从模式的特点是无论发送还是接收必须在时钟信号SCLOCK的作用下才能进行,并且SS信号必须有效。 不论是在主模式下还是在从模式下,都要在时钟极性和时钟相位的配合下才能有效的完

相关主题
相关文档
最新文档