spi基本概念

caidi caidi     2022-12-10     303

关键词:

串行外设接口(Serial Peripheral Interface,SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。

 SPI是一种同步、全双工、主从式接口。来自主机或从机的数据在时钟上升沿或下降沿同步。主机和从机可以同时传输数据。SPI接口可以是3线式或4线式。本文重点介绍常用的4线SPI接口。

 

接口

技术图片

4线SPI器件有四个信号:

时钟(SPI CLK,SCLK):串行时钟,用来同步数据传输,由主机输出;

片选(CS):片选线,低电平有效,由主机输出;

主机输出、从机输入(MOSI):主机输出从机输入数据线;

主机输入、从机输出(MISO):主机输入从机输出数据线。

 产生时钟信号的器件称为主机。主机和从机之间传输的数据与主机产生的时钟同步。与I2C接口相比,SPI器件支持更高的时钟频率。SPI接口只能有一个主机,但可以有一个或多个从机。上图显示了主机和从机之间的SPI连接。

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

 

 

时钟极性和时钟相位

在SPI中,主机可以选择时钟极性和时钟相位。

时钟极性CPOL(Clock Polarity):是用来配置SCLK的电平处于哪种状态时有效。

CPOL=0:表示高电平有效,低电平处于空闲态。

CPOL=1:表示低电平有效,高电平处于空闲态。

时钟相位CPHA(Clock Phase):是用来配置数据采样是在第几个边沿,0表示第一个边沿(前沿Leading edge),1表示第二个边沿(后沿Trailing edge)。

CPHA=0:表示数据采样是在第1个边沿,数据发送在第2个边沿。

CPHA=1:表示数据采样是在第2个边沿,数据发送在第1个边沿。

主机必须根据从机的要求选择时钟极性和时钟相位,也即从机的传输模式决定了主机的传输模式。故先要了解从机的SPI是何种模式,然后再将主机的SPI的模式设置成同样的模式,即可正常通讯。根据CPOL和CPHA位的选择,有四种SPI模式可用。

技术图片

四种模式采样/输出时序图如下,其中应用比较多的是SPI0/SPI3两种模式:

技术图片

 

 

SPI数据传输与交换

要开始SPI通信,主机必须发送时钟信号,并通过使能CS信号选择从机。片选通常是低电平有效信号。因此,主机必须在该信号上发送逻辑0以选择从机。

SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读取MISO/SDI总线上的数据)同时进行。串行时钟沿同步数据的移位和采样。SPI接口允许用户灵活选择时钟的上升沿或下降沿来采样和/或移位数据。

 SPI协议规定一个SPI设备不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)" 或者"接收者(Receiver)"。在每个Clock周期内, SPI设备都会发送并接收一个bit大小的数据(不管主设备还是从设备),相当于该设备有一个bit大小的数据被交换了。

技术图片

SPI设备通信过程中,Master设备和Slave设备之间会产生一个数据链路回环(Data Loop),SSPSR控制数据移入移出SSPBUF,Controller确定SPI总线的通信模式,SCLK传输时钟信号。

在每个时钟周期内,Master与Slave之间交换的数据其实都是SPI移位寄存器从SSPBUF里面拷贝的。我们可以通过往SSPBUF对应的寄存器 (Tx-Data/Rx-Data register) 里读写数据,间接地操控SPI设备内部的SSPBUF。

例如,在发送数据之前,我们应该先往Master的Tx-Data寄存器写入将要发送出去的数据,这些数据会被Master-SSPSR移位寄存器根据Bus-Width自动移入Master-SSPBUF里, 然后这些数据又会被Master-SSPSR根据Channel-Width从Master-SSPBUF中移出,通过Master-SDO管脚传给Slave-SDI管脚,Slave-SSPSR则把从Slave-SDI接收到的数据移入Slave-SSPBUF里。与此同时,Slave-SSPBUF里面的数据根据每次接收数据的大小(Channel-Width), 通过Slave-SDO发往Master-SDI,Master-SSPSR再把从Master-SDI接收的数据移入 Master-SSPBUF。在单次数据传输完成之后,用户程序可以通过从Master设备的Rx-Data寄存器读取Master设备数据交换得到的数据。

 

多从机配置

在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号,MOSI/MISO线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。

技术图片

在菊花链模式下,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。

 技术图片

 

 

参考文档:

https://www.sohu.com/a/271099924_292853

spi基础概念(代码片段)

...是ETH、USB这类复杂的通讯接口。使用SPI需要了解一些基础概念,并能够在此基础上看懂时序逻辑。这篇文 查看详情

进阶之路(基础篇)-010arduino函数(基本串口spi)

一.基本函数     pinMode(引脚号,模式);     digitalWrite(引脚号,电平状态);             //默认低电平(或浮空)    digitalRead(数字输入端口号); 查看详情

spi配置

1.SPI中的CPOL和CPHA概念        经常会提及SPI分为四种模式:        以上模式仅针对SPI的时钟(SCK)来区分:        CPOL也就是时钟的极性,用来表示SPI总线在空闲时SCK是低电平还是高电平,低... 查看详情

spi详解2

...仅使用四条数据信号线和控制信号线(请参见图1)。图1基本的SPI总线尽管表1中的引脚名称取自Motorola公司的SPI标准,但特殊集成电路的SPI端口名称通常与图1中所标示的名称有所不同。表1SPI引脚名称分配SPI数据速率通常介于1到7... 查看详情

docker的基本概念

Docker的基本概念 查看详情

基本概念

1.基本概念:训练集,测试集,特征值,监督学习,非监督学习,半监督学习,分类,回归 2.概念学习:人类学习概念:鸟,车,计算机   定义:概念学习是指从有关某个布尔函数的输入输出训练样例中推断出该... 查看详情

jms基本概念

JMS基本概念摘要:TheJavaMessageService(JMS)APIisamessagingstandardthatallowsapplicationcomponentsbasedontheJavaPlatformEnterpriseEdition(JavaEE)tocreate,send,receive,andreadmessages.Itenablesdistributedcommu 查看详情

vlan基本概念

  查看详情

02统计基本概念

查看详情

数据链路的基本概念和功能概述

基本概念功能概述 查看详情

socket基本概念

Socket基本概念介绍1默认分类 |2017-10-1010:00:34|10次阅读| 0评1.Socket基本概念介绍Socket是套接字的英文名称,主要用于网络通信编程。前几天看网络通信,发现有许多概念,诸如同步/异步,阻塞/非阻塞等,感觉迷惑不清,因... 查看详情

spi通信四大模式

...的控制下构成各种系统  SPI总线与多从机连接  SPI的基本结构相当于两个8位移位寄存器的首尾相接,构成16位的环形移位寄存器,从而实现了主机与从机的数据交换;  SPI接口的基本结构图  SPI主从模式  设置MSTR(主设... 查看详情

zookeeper基本概念

Zookeeper基本概念文章目录Zookeeper基本概念一、ZooKeeper是什么二、ZooKeeper存储结构节点(Znode)znode的类型节点信息节点的访问控制(ACL)三、Zookeeper集群中的角色集群角色Server状态四、Zookeeper工作原理zookeeper的选举机制(... 查看详情

面向对象(oop)基本概念(代码片段)

...向对象编程--ObjectOrientedProgramming简称OOP目标了解面向对象基本概念0.1面向对象基本概念面向过程和面向对象,是两种不同的编程方式对比面向过程的特点,可以更好第了解什么是面向对象1.1过程和函数过程是早期的一个编程概念... 查看详情

伸展树基本概念基本题目

http://blog.csdn.net/discreeter/article/details/51524210  //基本概念详见这里 例题HDU4453代码来源http://blog.csdn.net/auto_ac/article/details/12318809 伸展树我个人理解就是每次查询或更改都要将其移动至根节点另外伸展树有单点操作和... 查看详情

markdown基本概念(代码片段)

查看详情

系统编程--基本概念知识笔记

查看详情

消息队列技术之基本概念(转)

原文地址:消息队列技术之基本概念最近一直在总结AzureMessagingServiceBusMessaging相关的技术:消息顺序、消息持久化、复杂对象消息的序列化、消息事务、消息回执等机制。感觉有必要补充一篇消息队列技术的基本概念,无论Rabbit... 查看详情