• SPI通讯简介


    SPI简介

    1. SPI是串行外设接口(Serial Peripheral Interface)的缩写,
    2. 是美国摩托罗拉公司(Motorola最先推出的一种同步串行传输规范
    3. 是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步的串行通信总线
    4. SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主模块选择一个从模块进行同步通信,从而完成数据的交换。
    5. SPI通信原理很简单,需要至少4根信号线,单向传输是3根线;它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)和CS/SS(片选)

    SPI通讯方式

    SPI的通信方式有一主一从与一主多从,可以从字面意思上理解,其中一主多从模式分为两种,常规模式和菊花链模式。

    1.常规模式

    SPI主机的SCL,MOSI,MISO分别于从机对应的引脚相连,SS片选的个数取决于从机数,并且每个从机都与在主机上与其对应的SS相连。

    2.菊花链模式

    其中SCL的连接方式与常规模式相同,但所有从机的片选SS是连接在一起的,信息传输是从一个从机传输到另一个从机,最后传输到主机,主机发送的信号也是经过从机传给下一个从机。

    SPI通信原理

    1、主设备发起信号,将CS/SS拉低,启动通信。

    2、主设备通过发送时钟信号,来告诉从设备进行写数据或者读数据操作(采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低),因为SPI有四种模式,后面会讲到),它将立即读取数据线上的信号,这样就得到了一位数据(1bit)。

    3、主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(缓存长度不一定,看单片机配置),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。

    4、从机(Slave)也将自己的串行移位寄存器(缓存长度不一定,看单片机配置)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。

    通讯过程

    SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑“1”,低电平表示逻辑“0”;一个字节传送完成后无需应答即可开始下一个字节的传送;SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送;所以SPI的通讯方式有四种,下面分别介绍一下这四种模式。

    SPI有四种工作模式,通过串行时钟极性(CPOL)和相位(CPHA)的搭配来得到四种工作模式:

    • CPOL表示SCLK空闲时的状态,CPOL=0,串行时钟空闲状态为低电平。 CPOL=1,串行时钟空闲状态为高电平。
    • CPHA表示采样时刻,CPHA=0,串行时钟的第一个跳变沿(上升沿或下降沿)采集数据。 CPHA=1,串行时钟的第二个跳变沿(上升沿或下降沿)采集数据。

    1.CPOL = 0 , CPHA = 0

    此时SCK为低电平时表示空闲状态,并且在SCK产生第一个跳边沿时开始数据的采集,也就是上图紫色对号的位置,SCK第一个上升沿产生的位置开始采集数据。

    2.CPOL = 0 , CPHA = 1

    此时SCK为低电平时表示空闲状态,在SCK产生第二个跳边沿时开始数据采集,如上图紫色对号位置所示,从SCK的第二个跳边沿也就是图示下降沿开始处开始采集数据。

    3.CPOL  =  1 , CPHA = 0

    此时SCK为高电平时表示空闲状态,并且SCK产生的第一个跳边沿也就是第一个下降沿时开始数据的传输,如上图所示。

    4.CPOL = 1,CPHA = 1

    此时SCK为高电平时表示空闲状态,SCK产生的第二个跳边沿也就是第一个上升沿时开始数据传输,如上图所示。

    注意: 需要说明的是,对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式;我们在使用该设备时就必须保证主设备的工作模式和该从设备保持一致,否则是无法进行通信的;所以一般我们需要对主设备的CPOL和CPHA进行配置;

  • 相关阅读:
    RISC-V特权架构 - 机器模式下的异常处理
    BIT-5-操作符详解(C语言初阶学习)
    110、数据转换的事情,谁来做?
    dtcloud 的消息机制(二)
    Jmeter(五十三) - 从入门到精通高级篇 - 懒人教你在Linux系统中安装Jmeter(详解教程)
    界面控件DevExpress WinForms 2024产品路线图预览(一)
    [VNCTF2024]-Web:CheckIn解析
    【MYSQL】索引
    征文|@程序员,快来解锁过“中秋”的正确姿势!
    用巴特沃斯滤波器对原始信号进行滤波
  • 原文地址:https://blog.csdn.net/m0_74936872/article/details/133338448