当前位置: 代码迷 >> 综合 >> Serial Peripheral Interface串行外围接口
  详细解决方案

Serial Peripheral Interface串行外围接口

热度:40   发布时间:2024-01-21 02:22:32.0

串行外设接口(SPI)是一种用于短距离通信的同步串行通信接口规范,主要用于嵌入式系统。该界面是摩托罗拉在20世纪80年代中期开发的,已经成为事实上的标准。典型的应用包括安全数字卡和液晶显示器。

SPI设备以全双工模式通信,使用一个主-从体系结构和一个单一的主。主设备产生用于读写的框架。多个从设备通过单个从选择(SS),有时被称为芯片选择(CS)线的选择来支持。

有时SPI被称为四线串行总线,与三线、两线和单线串行总线相比。SPI可以准确地描述为一个同步串行接口,但它不同于同步串行接口(SSI)协议,SSI也是一种四线同步串行通信协议。SSI协议采用差分信令,只提供一个单一的单工通信信道。SPI是一主多从通信。

接口

SPI总线指定了四个逻辑信号:

  • SCLK: Serial Clock (output from master) 连续的时钟信号,从主设备发出。
  • MOSI: Master Out Slave In (data output from master)主设备输出数据接口。对应从数据接收接口。
  • MISO: Master In Slave Out (data output from slave)主设备接收数据接口。对应从数据发送接口。
  • SS: Slave Select (often active low, output from master)从设备选择接口

主用MOSI连接从用MOSI。Slave Select具有与 chip select相同的功能,并被用来代替寻址(addressing )概念。

Slave Select:

SS, SS, SSEL, nSS, /SS, SS# (slave select)
CS, CS (chip select)
CSN (chip select/enable)
CE (chip enable)

操作

SPI总线可以操作一个单一的主设备和一个或多个从设备。
如果一个单一的从设备被使用,SS引脚可以被固定到逻辑低如果主设备允许它。一些从机需要芯片选择信号的下降边缘来启动一个动作。maxmax1242 ADC就是一个例子,它从高→低转换开始转换。有多个从设备,主设备要为每一个从设备主备一条单独的SS线。

大多数从设备具有三态输出,因此当设备未被选择时,它们的MISO信号成为高阻抗(电断开)。没有三态输出的设备不能与没有使用外部三态缓冲区的其他设备共享SPI总线段。

数据传输

为了开始通信,总线上的主设备需要使用从设备支持的频率来配置时钟,这个频率最高为几兆赫兹左右。然后主设备将某个从设备的SS线置为低电平,来选中这个从设备。如果等待时间是必要的话(例如进行模数转换),主设备必须在这段时间结束后,才可以发出时钟周期信号。

在每个SPI时钟周期内,都会发生全双工数据传输。主设备在MOSI线上发送一个位,从设备读取它,同时从机在MISO线上发送一位数据,主机读取它。即使只有单向数据传输的目的,主从机之间的通信工作方式仍然是双工的。

两个连接成虚拟环形缓冲器的移位寄存器
传输通常会使用给定字长的两个移位寄存器,一个在主设备中,一个在从设备中,这两个寄存器连接成一个虚拟的环形缓冲器。数据通常先从最高位移出。在时钟信号边沿,主机和从机均移出一位,然后在传输线上输出给对方。在下一个时钟沿,每个接收器都从传输线接受对方发出的数据位,并且从移位寄存器的最低位推入。每完成这样一个移出——推入的周期后,主机和从机就交换寄存器中的一位数据。当所有数据位都经过了这样的移出——推入过程后,主机和从机就完成了寄存器上的数据交换。如果需要交换的数据比寄存器的位数还要长的话,则需要重新加载移位寄存器并重复该过程。传输可能会持续任意数量的时钟周期。完成后,主设备会停止发送时钟信号,并通常会取消选择从设备。

传输寄存器通常包含8位。但是其他字长也很常见,例如触摸屏控制器或音频编解码器通常采用16位字长(如德州仪器的TSC2101),许多数模转换或者模数转换的设备则会采用12位字长。

所有在总线上的没有被片选线激活的从设备必须忽略输入时钟和MOSI信号,并且不得从MISO发送数据。

优点和缺点

优点

SPI协议默认是全双工通信。
与漏极开路输出相反,SPI的推挽输出可提供良好的信号完整性和高速度
比I?C或SMBus更高的吞吐量 。 不限于任何最大时钟速度,可实现高速运行
完整的传输位协议灵活性
不限于8位字
任意选择消息大小,内容和目的地
非常简单的硬件接口
由于电路较少(包括上拉电阻),因此通常比I?C或SMBus的功耗要低,
没有仲裁或相关的失败模式
从站直接使用主时钟,不需要精密振荡器
从站不需要唯一的地址 - 不像I?C或GPIB或SCSI
不需要收发器
IC封装只使用四个引脚,而电路板布局或连接器则少于并行接口
每个器件至多有一个独特的总线信号(芯片选择);其他信号均可以共享
信号是单向的,允许简单的电气隔离
简单的软件实现

缺点

即使是三线式SPI,也需要比I?C更多的IC封装引脚
没有带内寻址; 共享总线上需要带外片选信号
从机不支持流控制 (但主机可以延迟下一个时钟边沿以降低传输速率)
不支持动态添加节点(热插拔)。
没有从机检测机制,主机无法检测是否与从机断开。
通常只支持一个主设备(取决于设备的硬件实现)
没有错误检测机制
无法进行数据校验,不定义额外的协议时无法保证一致性。
与RS-232 , RS-485或CAN总线相比,它只能处理短距离内的数据传输。(距离可以通过使用收发器如RS-422进行扩展)
有许多现有的变体,使得很难找到支持这些变体的主机适配器等开发工具。
一些变体,如双路SPI , 四路SPI和三线SPI是半双工的。
必须通过带外信号来实现中断,或者通过使用类似于USB 1.1和2.0的定期轮询来模拟中断

  相关解决方案