SPI及其接口介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、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的下降沿有效。
片选信号(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优先模式下,
位寄存器和指令缓存器对输入进来的数据进行暂存。
此外对器件进行编程,需要定义一个结构化的寄存器空间,此结构可细分为多个地址,数据传输的指令阶段中的地址即指向这些地址。
每个地址可寻址一个8位的字节,每一位均有其特定的含义和作用,
具体寄存器定义见AN-877的表14或AD9254的表15。
1、配置寄存器(地址00)
配置寄存器位于地址00,该寄存器用来配置串行接口,包含有2个有效位,位于高半字节当中,低半字节未连接,留做备用。
其功能是使芯片软复位并配置在已知状态,而与当前的数据移位方向无关,这将确保在发生故障时器件能够给予积极处理。
2、传送寄存器(地址FF)
传送寄存器即提供软件传输信号。
一般寄存器都需要采用主从触发器进行缓冲,缓冲可以增强系统的多器件同步能力,并有助于写入对存储器其他部分写入的值可能有依赖关系的配置。
根据需要的不同,有些寄存器需要这样的缓冲,例如编程寄存器。
有些寄存器则永远不会进行缓冲,例如配置寄存器和传送寄存器,因为出于程序和控制目的,这些寄存器要求及时获得响应。
无论缓冲与否,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的数据即可。
2、SPI的核心是寄存器,通过SPI控制电路的实质就是通过寄存器控
制电路
3、电路中的SPI是主从SPI的一部分(一般是从SPI及其接口),主
SPI一般可以由单片机或者是MCU构建,其作用是向从SPI写数据。
4、要实现电路的某一个功能,首先定义寄存器,然后通过主SPI向该
2、对SPI进行时序分析
3、对已出电路进行模块分析,以及实际电路分析
4、对寄存器、指令如何控制电路功能进行简单了解
/view/914dbfa3f524ccbff121845e.html
2、AD9254使用说明书:/view/18d0378683d049649b6658c0.html
3、SPI及其接口设计:/view/914dbfa3f524ccbff121845e.html
欢迎加QQ:865198143进行交流。