zoukankan      html  css  js  c++  java
  • spi基本概念

    串行外设接口(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

  • 相关阅读:
    Hadoop集群(三) Hbase搭建
    Hadoop集群(二) HDFS搭建
    Hadoop集群(一) Zookeeper搭建
    Redis Cluster 添加/删除 完整折腾步骤
    Redis Cluster在线迁移
    Hadoop分布式HA的安装部署
    Describe the difference between repeater, bridge and router.
    what is the “handover” and "soft handover" in mobile communication system?
    The main roles of LTE eNodeB.
    The architecture of LTE network.
  • 原文地址:https://www.cnblogs.com/caidi/p/12896484.html
Copyright © 2011-2022 走看看