SPI通信协议详解

简介

与 I2C 一样, SPI 也是很常用的通信协议( Motorola 公司推出),且二者都支持“一主多从”通信,很多常见的模块(芯片)都支持了该通信协议。相比 I2C 接口, SPI 接口的通信速度更快( I2C 最高 400KHz,而 SPI 最高可达几十MHz),且支持全双工通信。

想了解I2C通信的可以看我之前写的这篇帖子:IIC(I2C)通信协议详解

1 电气连接

SPI通信的接线比I2C稍微复杂些,所以很需要一张图来说明。在SPI通信中,一般需要4根线。准确来说是3+N。N是从机的数量。
在这里插入图片描述
电气接线作用如下:

  • CS/SS, Slave Select/Chip Select,这个是片选信号线,用于选择需要进行通信的从设备。 I2C 主机是通过发送从机设备地址来选择需要进行通信的从机设备的, 而SPI 主机不需要发送从机设备,直接将相应的从机设备片选信号拉低即可。所以有几个从机参与了SPI通信,就需要几根CS/SS信号线。
  • SCK, Serial Clock,串行时钟,为通信提供时钟信号。
  • MOSI/SDO, Master Out Slave In/Serial Data Output,简称主出从入信号线,这根数据线只能用于主机向从机发送数据,也就是所谓的主机输出,从机输入。
  • MISO/SDI, Master In Slave Out/Serial Data Input,主入从出信号线,与MOSI相反,这根数据线只能从机向主机发送数据,也就是所谓的主机输入,从机输出。

记忆这4种接线的时候,只需要记住英文全称就可以反推出其简称。

2 通信过程

2.1 工作模式

SPI 有四种工作模式,通过串行时钟极性(CPOL)和相位(CPHA)来实现(CPOL和CPHA的值可通过寄存器来设置)。

  • CPOL=0,串行时钟空闲状态为电平。
  • CPOL=1,串行时钟空闲状态为电平。
  • CPHA=0,串行时钟第个跳变沿(上升沿或下降沿)采集数据。
  • CPHA=1,串行时钟第个跳变沿(上升沿或下降沿)采集数据。

四种工作模式下的数据交换如下图所示:
在这里插入图片描述

2.2 通信时序

SPI的通信线增多了,通信也变得简单了起来,以常见的CPOL = 0和CPHA = 0为例,其通信时序如下所示。
在这里插入图片描述
首先通过将CS/SS线上的电平拉低,来实现片选,选择了具体的从机(芯片)后,便可发送时钟信号,根据时钟周期进行通信了,且可同时收发数据,十分高效。

还有一个好处,由于片选线的存在,避免了多个从机通信时候的总线冲突,因此不需要I2C那样外接上拉电阻

当然SPI通信也是有缺点的,

  1. SPI既没有UART通信那样的奇偶校验,也没有I2C那样的应答机制,所以并不能保证通信数据的准确性。
  2. 当从机较多的时候,会出现较多的通信线,这对于硬件设计师来说并不是一个好消息。在布线的过程中,不仅仅需要考虑到线路的交叉,还要考虑到信号的相互影响等等因素。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FPGA串口通信程序主要涉及到两个方面:串口通信协议和FPGA的硬件设计。下面分别进行详细介绍。 1. 串口通信协议 串口通信协议是指串行通信双方之间的数据传输规则,通常包括数据格式、波特率、数据位、停止位、奇偶校验等参数。 在FPGA串口通信程序中,常用的串口通信协议有UART和SPI。 UART(通用异步收发传输器)协议是一种异步串行通信协议,常用于单片机与外设之间的通信。UART协议中,数据以字节为单位进行传输,每个字节包括一个起始位、8位数据位、一个可选的奇偶校验位和一个或多个停止位。波特率表示数据传输的速度,一般常用的波特率有9600、115200等。 SPI(串行外设接口)协议是一种同步串行通信协议,常用于连接多个外设。SPI协议中,数据以字节为单位进行传输,每个字节包括一个时钟和一个数据位,数据以串行方式进行传输,一般常用的时钟频率有1MHz、10MHz等。 2. FPGA的硬件设计 FPGA的硬件设计包括串口收发模块、时钟模块、状态机模块等。 串口收发模块负责将串口通信协议中的数据进行收发,常用的收发模块包括UART收发模块和SPI收发模块。 时钟模块负责产生时钟信号,时钟信号用于同步数据的传输。 状态机模块负责控制FPGA的工作状态,根据收到的数据进行相应的处理,常用的状态机包括UART状态机和SPI状态机。 在FPGA的硬件设计中,还需要注意一些低层次的细节问题,例如时序分析、时钟域划分、时钟缓冲等。 总之,FPGA串口通信程序的设计需要结合具体的硬件平台和通信协议进行,需要对硬件设计和通信协议有深入的理解和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值