SPI接口详解

SPI(Serial Peripheral Interface,串行外围设备接口)是由Motorola公司开发,用来在微控制器和外围设备芯片之间提供一个低成本、易使用的接口(SPI有时候也被称为4线接口)。这种接口可以用来连接存储器(存储数据)、A/D转换器、D/A转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至其他处理器。支持SPI的元件很多,并且还一直在增加。SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。

与标准的串行接口不同,SPI是一个同步协议接口,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机(处理器)产生,接收数据的外设(从设备)使用时钟来对串行比特流的接收进行同步化。可能会有许多芯片连到主机的同一个SPI接口上,这时主机通过触发从设备的片选输入引脚来选择接收数据的从设备,没有被选中的外设将不会参与SPI传输。SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。

SPI主要使用4个信号:主机输出/从机输入(MOSI)、主机输入/从机输出(MISO)、串行SCLK或SCK和外设芯片(CS)。有些处理器有SPI接口专用的芯片选择,称为从机选择(SS)。

(1)MOSI – 主器件数据输出,从器件数据输入
      (2)MISO – 主器件数据输入,从器件数据输出
      (3)SCLK – 时钟信号,由主器件产生
      (4)/SS – 从器件使能信号,由主器件控制

在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。
      在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

MOSI信号由主机产生,从机接收。在有些芯片上,MOSI只被简单的标为串行输入(SI),或者串行数据输入(SDI)。MISO信号由从机产生,不过还是在主机的控制下产生的。在一些芯片上,MISO有时被称为串行输出(SO)或串行数据输出(SDO)。外设片选信号通常只是由主机的备用I/O引脚产生的。下左图是微处理器通过SPI和外设进行连接的示意图。

主机和外设都包含一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器是通过MOSI信号线将字节传送给外设,外设也将自己移位寄存器中的内容通过MISO信号线返回给主机,如上右图所示。这样,两个移位寄存器中的内容就被交换了。外设的写操作和读操作是同步完成的,因此SPI成为一个很有效的协议。

如果只是进行写操作,主机只需忽略收到的字节;反过来,如果主机要读取外设的一个字节,就必须发送一个空字节来引发从机的传输。

当主机发送一个连续的数据流时,有些外设能够进行多字节传输。许多拥有SPI接口的存储器芯片都以这种方式工作。在这种传输方式下,SPI外设的芯片选择端必须在整个传输过程中保持低电平。比如,存储器芯片会希望在一个“写”命令之后紧接着收到的是4个地址字节(起始地址),这样后面接收到的数据就可以存储到该地址。一次传输可能会涉及千字节的移位或更多的信息。

其他外设只需要一个单字节(比如一个发给A/D转换器的命令),有些甚至还支持菊花链连接,如下图所示。

在这个例子中,主机处理器从其SPI接口发送3个字节的数据。第1个字节发送给外设A,当第2个字节发送给外设A的时候,第1个字节已移出了A,而传送给了B。同样,主机想要从外设A读取一个结果,它必须再发送一个3字节(空字节)的序列,这样就可以把A中的数据移到B中,然后再移到C中,最后送回主机。在这个过程中,主机还依次从B和C接收到字节。

注意,菊花链连接不一定适用于所有的SPI设备,特别是要求多字节传输的(比如存储器芯片)设备。另外,要对外设芯片的数据表进行仔细分析,确定能对它做什么而不能做什么。如果芯片的数据表中没有明确提到菊花链连接,那么该芯片不支持这种连接的几率为50%。

根据时钟极性和时钟相位的不同,SPI有4个工作模式。时钟极性有高、低两极:时钟极性为低电平时,空闲时时钟(SCK)处于低电平,传输时跳转到高电平;时钟极性为高电平时,空闲时时钟处于高电平,传输时跳转到低电平。

时钟相位有两个:时钟相位0和时钟相位1。对于时钟相位0,如果时钟极性是低电平,MOSI和MISO输出在(SCK)的上升沿有效。如果时钟电平极性为高,对于时钟相位0,这些输出在SCK的下降沿有效。MISO输出的第X位是一个未定义的附加位,是SPI接口特有的情况。用户不必担心这个位,因为SPI接口将忽略该位。

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,同时一位数据被存入移位寄存器。

接口内部硬件图示:

(0)

相关推荐

  • 关于SPI,你知道的和不知道的都在这里

    SPI在嵌入式系统中非常普遍.无论是芯片上的系统处理器(如ARM.MIC或Power PC等高端32位处理器)还是微控制器(如AVR.PIC等),通常包括能够以主从模式运行的SPI控制器.系统内可编程 ...

  • (2) Java SQL框架(java.sql.*)中常用接口详解

    Driver接口:定义了一个驱动程序接口,每一个数据库的JDBC driver都应该实现这个接口,用于访问对应的数据库.比如MySQL的driver为com.mysql.jdbc.Driver.Jav ...

  • Java SPI机制详解

    SPI介绍 SPI ,全称为 Service Provider Interface,是一种服务发现机制,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件. SPI的 ...

  • LVDS接口详解

    LVDS接口详解

  • MODBUS 485通讯常见物理接口——DB9接口详解

    做工业自动化的朋友经常接触到的通讯协议如RS232,RS485,它的通讯线物理接口大部分DB9接口,如果需要对总线上的数据进行监听的时候,只需要做一条三通线,通过USB转485转换插头连接到电脑就可以 ...

  • MAIWO存储学堂 硬盘IDE和SATA接口详解

    随着台式机逐渐被笔记本取代,台式机里的硬盘有了新的用途,那就是DIY成移动硬盘,或者用硬盘座.硬盘易驱线直接读写,作为可以随时移动的数据存储备份工具. 在选购移动硬盘盒.硬盘座.硬盘易驱线的时候,需要 ...

  • 一文详解SPI接口

    串行外设接口(SPI)是微控制器和外围IC(如传感器.ADC.DAC.移位寄存器.SRAM等)之间使用最广泛的接口之一.本文先简要说明SPI接口,然后介绍ADI公司支持SPI的模拟开关与多路转换器,以 ...

  • C#-接口(Interface)详解

    定义 在 C# 语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的.一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承.无论是表示类之间的继承还 ...

  • 【IBE】详解DVI、HDMI、VGA这几个接口!值得看看!

    安防行业中,经常会接触到高清设备接口,通常碰到的高清接口有DVI.HDMI.VGA. 我们一般会在网络上或者技术杂志上了解高清接口概念,但因为有些技术文章写的笼统混淆,会对这些接口产生了一些技术误解. ...

  • (6条消息) SSD硬盘的接口区别详解图解 SATA、mSATA、PCI

    转 扫盲:SATA.mSATA .PCIe和M.2--SSD硬盘的接口 2019年03月02日 20:47:06 nedwons 阅读数 11035更多 个人分类: 非技术 SATAT通道:硬盘--内 ...