4

【STM32学习笔记-01】SPI通信

 2 years ago
source link: https://blog.51cto.com/Serendipityoojh/5397457
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【STM32学习笔记-01】SPI通信

原创

​一、SPI接口

1.1 SPI接口简介

SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双 工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达 25MHz以上。 SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。

SPI接口通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设 备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从设备使能选择(Chip Select,CS)。

【STM32学习笔记-01】SPI通信_SPI通信

图1  SPI 一主一从示意图

SPI通信只能有一个主机,但可以有一个或多个从机。图1显示了主机和从机之间的SPI连接。产生时钟信号的器件称为主机。主机和从机之间传输的数据与主机产生的时钟同步。SPI接口可以同时发出和接收数据,因此SPI接口的理论传输速度比I²C更快。SPI 接口通过片选引脚选择从机,一个片选一个从机,因此在多从机结构中,需要占用较多引脚。

来自主机的CS(片选信号)用于选择从机。这通常是一个低电平有效信号,拉高时从机与SPI总线断开连接。当使用多个从机时,主机需要为每个从机提供单独的片选信号。本文中的片选信号始终是低电平有效信号。MOSI和MISO是数据线。MOSI将数据从主机发送到从机,MISO将数据从从机发送到主机。

1.2 多从机配置

多个从机可与单个SPI主机一起使用。从机可以采用常规模式连接,或采用菊花链模式连接。

1.2.1 常规模式连接

【STM32学习笔记-01】SPI通信_STM32_02

在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号,MOSI/MISO线上的时钟和数据便可用于 所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。从上图可以看出,随着从机数量的增加,来自主机的片选线的数量也增加。这会快速增加主机需要提供的输入和输出数量,并限制可以使用的从机数量。可以使用其他技术来增加常规模式下的从机数量,例如使用多路复用器产生片选信号。

1.2.2 菊花链模式

【STM32学习笔记-01】SPI通信_嵌入式_03

在菊花链模式下,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需的时钟周期数与菊花链中的从机位置成比例。

【STM32学习笔记-01】SPI通信_STM32_04

例如在上图所示的8位系统中,为使第3个从机能够获得数据,需要24个时钟脉冲,而常规SPI模式下只需8个时钟脉冲。上图显示了时钟周期和通过菊花链的数据传播。并非所有SPI器件都支持菊花链模式。请参阅产品数据手册以确认菊花链是否可用。

二、SPI协议

要开始SPI通信,主机必须发送时钟信号,并通过使能CS信号选择从机。片选通常是低电平有效信号。因此,主机必须在该信号上发送逻辑0以选择从机。SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读入总线(MISO/SDI) 上的数据)同时进行。串行时钟沿同步数据的移位和采样。SPI接 口允许用户灵活选择时钟的上升沿或下降沿来采样和/或移位数据。欲确定使用SPI接口传输的数据位数,请参阅器件数据手册。

2.1 时钟极性和时钟相位

在SPI通信中,主机可以选择时钟极性和时钟相位。在空闲状态期间,CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间。CPHA位选择时钟相位。根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位。根据CPOL和CPHA位的选择,有四种SPI模式可用。表1显示了这4种SPI模式。

【STM32学习笔记-01】SPI通信_STM32_05

表1  SPI四种工作模式

这里要重点强调CPHA(时钟相位)的作用:

  • ​当CPHA=0时,表示数据线上的数据在第一个时钟边沿被采样;
  • 当CPHA=1时,表示数据线上的数据在第二个时钟边沿被采样;​

2.2 四种SPI模式下的通信示例

下图显示了四种SPI模式下的通信示例。在这些示例中,数据显示在MOSI和MISO线上。传输的开始和结束用绿色虚线表示采样边沿用橙色虚线表示移位边沿用蓝色虚线表示。请注意,这些图形仅供参考。要成功进行SPI通信,用户须参阅产品数据手册并确保满足器件的时序规格。

SPI模式0, CPOL=0, CPHA=0

【STM32学习笔记-01】SPI通信_SPI通信_06

上图给出了SPI模式0的时序图。在此模式下,时钟极性为0,表示时钟信号的空闲状态为低电平。此模式下的时钟相位为0,表示数据在第一个时钟边沿(上升沿)采样(由橙色虚线显示),并且数据在时钟信号的下降沿移出(由蓝色虚线显示)。

SPI模式1, CPOL=0, CPHA=1

【STM32学习笔记-01】SPI通信_SPI通信_07

上图给出了SPI模式1的时序图。在此模式下,时钟极性为0,表示时钟信号的空闲状态为低电平。此模式下的时钟相位为1,表示数据在第二个时钟边沿(下降沿)采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

SPI模式2, CPOL=1, CPHA=0

【STM32学习笔记-01】SPI通信_嵌入式_08

上图给出了SPI模式2的时序图。在此模式下,时钟极性为1,表示时钟信号的空闲状态为高电平。此模式下的时钟相位为0,表示数据在第一个时钟边沿(下降沿)采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

SPI模式3, CPOL=1, CPHA=1

【STM32学习笔记-01】SPI通信_SPI通信_09

上图给出了SPI模式3的时序图。在此模式下,时钟极性为1,表示时钟信号的空闲状态为高电平。此模式下的时钟相位为1,表示数据在第二个时钟边沿(上升沿)采样(由橙色虚线显示),并且数据在时钟信号的下降沿移出(由蓝色虚线显示)。

  • 1
  • 1收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK