SPI及其接口介绍
- 格式:docx
- 大小:260.70 KB
- 文档页数:7
一、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代替。图三和图四分别是双线模式下单器件控制(主从一对一)和双线模式下多器件控制(主从一对多)。
图三:主从一对一控制
图四:主从一对多控制 不管是典型SPI还是三引脚SPI,其基本原理都是一样的,都是主SPI通过SDIO(或MISO与MOSI)将数据传递到从SPI中,通过从SPI控制功能模块。一般来说ADC中的SPI指的是模块中的从SPI极其接口,主SPI可以使用MCU或者单片机实现。主SPI不属于器件的部分,可以不用考虑,操作起来比较简单。
从SPI由指令移位寄存器、指令数据缓存器、寄存器控制逻辑、寄存器构成,如图五所示。
主SPI发送过来的串行数据先依次进入指令移位寄存器,指令移位寄存器再依次将数据传送到指令缓存器。寄存器控制逻辑根据MSB优先或LSB优先控制指令移位寄存器的移位以及控制指令缓存器的输出,将其传送到相应地址的寄存器当中。寄存器包括三种类型:配置寄存器、传送寄存器和编程寄存器。寄存器存入相应数据之后,先根据配置寄存器配置串行接口,编程寄存器再根据寄存器功能表中的定义输出相对应的控制信号,最后根据传送寄存器指令统一输出控制信号。
指令缓存器指令移位寄存器控制逻辑寄存器寄存器„„„„„„功能模块……„„指令
图五: SPI接口的功能模块
三、SPI协议(根据AN-877应用笔记)
SPI接口有主机跟从机之分,主从机可以是一对一,也可以是一对多,但是原理都一样。主从机之间一般由3个引脚组成:串行时钟引脚(SCLK)、串行数据输入/输出引脚(SDIO)、片选引脚(CSB)。
1、引脚
数据输入/输出(SDIO):该引脚用作数据的输入/输出,用作输入还是用作输出具体取决于所发送的指令(读或写)以及时序帧中的相对位置(指令周期或数据周期)。在读或写的第一个阶段,该引脚用作输入,将信息传递到内部状态机。如果该命令为读命令,状态机把该引脚(SDIO)变为输出,然后该引脚将数据回传给外部控制器。如果该命令为写命令,该引脚始终用作输入。
串行时钟(SCLK):SCLK由外部控制器提供,时钟频率最高为25MHZ。所有数据的输入输出都是与SCLK同步的。输入数据在SCLK的上升沿有效,输出数据在SCLK的下降沿有效。 片选信号(CSB):CSB是低电平有效的控制信号,用于选通读写周期。当CSB为低电平时,SPI才会处理SDIO上的数据信息。当CSB为高电平时,SPI忽略SDIO上的数据信息。此外,CSB还有一种特殊作用。CSB可以在字节边界处停止在高电平,为外部的时序处理提供更多的时间。(见图2)
图六:带有停止时间的MSB优先指令和数据
2、格式
当内部状态机处在空闲状态且第一次在SCLK的上升沿检测到CSB为低电平时,确认为帧的开始。传输的第一个阶段为指令阶段,指令由16位组成,之后是数据阶段,数据由一个或多个8位组成,长度不定。
(1)指令周期
指令周期为传输的前16位,如下图所示,指令周期划分为若干位段。
A、读/写
在MSB优先(参见“位序”部分)时,数据流中的第一位是读/写指示位。
若该位为高电平,则表示指令为读取指令。当指令周期(前16位)完成时,内部状态机使用所提供的信息解码要读取的内部地址。随后SDIO由输入变为输出,由字长定义的适当数量的字从器件移位出来(参见“字长”部分)。一旦字长所要求的所有数据均已移位输出,状态机便返回空闲模式,等待下一个指令周期。此时应拉高CSB,表示一次处理结束。
若数据流中的第一位为低电平,则表示指令为写入指令。指令周期完成时,内部状态机使用所提供的信息解码要写入的内部地址。指令之后的所有数据均将移入SDIO引脚并送往目标地址(当需要写入的数据为多个时,地址将自动递增或递减)。一旦传输完所有数据,状态机便返回空闲模式,等待下一个指令周期。此时应拉高CSB,表示一次结束。
无论是读取模式还是写入模式,处理过程都会持续到字长要求时或CSB线路拉高(在非流处理模式的字节边界处(参见“字长”部分)除外)时为止。如果到达存储器的末端(0x00或0xFF),则会发生翻转,下一个处理的地址为0x00(地址递增时)或0xFF(地址递减时)。
B、字长
W1和W0表示要读取或者写入的数据字节数。具体设置和操作如下表:
表1:W1、W0的设置和操作
((W1:W0)+1)所表示的值是要传输的字节数。如果要传输的字节数小于等于三个(00,01,10),则CSB可以在字节边界停止在高电平,而停止在非字节边界会终止通信周期。如果这两位为11,则为流处理模式。在此模式下,只要拉高CSB就会终止通信周期,任何未完成的字节均会丢失,已完成的字节会得到正确的处理。
C、地址位
其余13位为所发送数据或要读取数据的起始地址位。如果需要处理的数据不止一个字节,则会使用顺序寻址,从指定的地址开始,按照设定的模式递增或递减。
(2)数据周期
指令周期之后是数据周期。要处理的数据量由字长(W1、W0)指定。所有的数据都是8位的,若状态机检测到数据不完整,就会复位到空闲状态,等待下一个帧的开始。
(3)位序
发送和接收数据有两种模式:MSB优先和LSB优先(参见控制寄存器0x00)。上电时默认为MSB优先。可以通过对控制寄存器编程改变位序模式。在MSB优先模式下,位序为从最高位到最低位。在LSB优先模式下,位序为从最低位到最高位。
四、SPI中寄存器的设计
SPI端口是一种由外部输入信号来配置寄存器的机制,因此需要指令移位寄存器和指令缓存器对输入进来的数据进行暂存。此外对器件进行编程,需要定义一个结构化的寄存器空间,此结构可细分为多个地址,数据传输的指令阶段中的地址即指向这些地址。每个地址可寻址一个8位的字节,每一位均有其特定的含义和作用,
具体寄存器定义见AN-877的表14或AD9254的表15。
1、配置寄存器(地址00)
配置寄存器位于地址00,该寄存器用来配置串行接口,包含有2个有效位,位于高半字节当中,低半字节未连接,留做备用。其功能是使芯片软复位并配置在已知状态,而与当前的数据移位方向无关,这将确保在发生故障时器件能够给予积极处理。
2、传送寄存器(地址FF)
传送寄存器即提供软件传输信号。 W1:W0 设置 操作 CSB 停止
00 可以传输1个字节数据 可选
01 可以传输2个字节数据 可选
10 可以传输3个字节数据 可选
11 可以传输4个或更多字节数据,CSB必须在整个操作序列中保持低电平,否则周期即终止。 不允许 一般寄存器都需要采用主从触发器进行缓冲,缓冲可以增强系统的多器件同步能力,并有助于写入对存储器其他部分写入的值可能有依赖关系的配置。根据需要的不同,有些寄存器需要这样的缓冲,例如编程寄存器。有些寄存器则永远不会进行缓冲,例如配置寄存器和传送寄存器,因为出于程序和控制目的,这些寄存器要求及时获得响应。无论缓冲与否,SPI端口都要负责将信息放入寄存器中,不过对于采用缓冲的寄存器,必须启动传输以将数据移出。
3、编程寄存器
本报告中所用到的编程寄存器的地址包括(08、09、10、14、16、18)。当编程寄存器按照表3-3输入相对应的值后,应产生一系列的控制信号,如表3-4所示。这些控制信号产生后被锁存,并在软件传输的命令下达后,才会被一起传输到后面的模块。
4、控制寄存器
控制寄存器由两个寄存器组组成:主寄存器和从寄存器。主寄存器暂存输入数据,当一个传输信号(0xFF寄存器的第0位)为高电平时,主寄存器的内容将全部传到相应的从寄存器,随后内部电路会自动把该位置为0。从寄存器直接用来控制芯片内部其他电路的工作特性。但也有一些寄存器不采用这种主从模式,当需要向这些寄存器写入数据时,数据不经过主寄存器,而直接写入从寄存器,如0x00,0xff,0x04,0x05。其中0x00的bit4和bit3应该始终为1。本报告保留的控制寄存器有(0x00、0x18、0x2A、0x2C、0xFF)一共29个寄存器。(细节请参考AD9254和AN-877),其中控制寄存器0x00的高四位和低四位应该是镜像关系(写入数据时要保证此镜像关系),位7和位0恒为0,位4和位3恒为1。
总之,反向来看,例如要实现软复位功能,从AD9254表15所示的功能来看(如图七所示),地址为0X00的寄存器的第5位为1时便可以实现软复位的功能。所以要实现软复位功能,只需要通过主SPI向地址为0X00的寄存器,输入001110000的数据即可。
图七:寄存器功能设定
五、综述-SPI心得
1、SPI是通过配置寄存器来控制电路
2、SPI的核心是寄存器,通过SPI控制电路的实质就是通过寄存器控制电路
3、电路中的SPI是主从SPI的一部分(一般是从SPI及其接口),主SPI一般可以由单片机或者是MCU构建,其作用是向从SPI写数据。
4、要实现电路的某一个功能,首先定义寄存器,然后通过主SPI向该寄存器写入要达到某功能的数据即可。
六、报告不足与后期计划
1、对SPI进行简单应用的设计。
2、对SPI进行时序分析
3、对已出电路进行模块分析,以及实际电路分析
4、对寄存器、指令如何控制电路功能进行简单了解
参考文献:
1、AN-877应用笔记:/view/914dbfa3f524ccbff121845e.html
2、AD9254使用说明书:/view/18d0378683d049649b6658c0.html
3、SPI及其接口设计:/view/914dbfa3f524ccbff121845e.html
欢迎加QQ:865198143进行交流