通信总线协议四 :SPI

通信总线协议四 :SPI

1. SPI总线简介

  • SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。

  • SPI采用主从方式工作,一般有一个主机和一个从机或者一个主机和多个从机通信,不支持多主机。其中提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。

  • SPI至少需要4根线:

    • SCLK : 时钟线
    • MOSI : 主设备输出,从设备输入,主机发送从机接收
    • MISO : 主设备输入,从设备输出,从机发送主机接收
    • CS :片选(chip slelce),用于寻址,多个从设备可为多条
      在这里插入图片描述

2. SPI寻址方式

  • 当主设备要和从设备进行通信时,主设备需要先将对应的从设备的片选线CS上发送使能信号,即将对应从设备连接的CS管脚拉高或者拉低,表示选中的该从设备。
  • 使能信号为高电平还是低电平根据从机而定。
    在这里插入图片描述

3. SPI通信过程

  • 通信原理:SPI主设备和从设备都有一个串行移位寄存器,主设备通过向它的SPI串行寄存器写入一个字节来发起一次传输
    在这里插入图片描述
    在这里插入图片描述
  • SPI数据传输时先发高位后发低位,例如发送0xAA (10101010B),先发送高位1,发送顺序为 :1 0 1 0 1 0 1 0
  • 数据线的高电平表示逻辑 1,低电平表示逻辑 0
  • SPI一个字节传送完成后,无需应答即可开始下一个字节的发送
  • SPI采用同步方式工作,时钟线在上升沿或者下降沿时发送器向数据线上发送数据,紧接着在下降沿或者上升沿时接收器从数据线上读取数据,完成一个数据的传输,8个时钟周期完成一个字节的数据传输。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4. SPI设备时钟

  • SPI时钟特点主要包括:时钟速率时钟极性时钟相位三方面。
  • 时钟速率:SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。从理论上讲,只要实际可行,时钟速率就可以为任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。
  • 时钟极性:根据硬件制造商的命名规则不同,时钟极性通常写为CKPCPOL。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据。
  • 时钟相位 :根据硬件制造商的不同,时钟相位通常写为CKECPHA。顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;

5. SPI 4种工作模式

  • SPI总线有4种工作模式,取决于极性CPOL相位CPHA的设置

  • CPOL表示SCLK空闲是的状态

    • CPOL = 0, 空闲时SCLK为低电平
    • CPOL = 1, 空闲时SCLK为高电平
  • CPHA表示采样时刻

    • CPHA = 0,每个周期的第一个时钟沿采样
    • CPHA = 1,每个周期的第二个时钟沿采样
      在这里插入图片描述
  • 四种SPI模式下的通信示例如下图,数据显示在MOSI和MISO线上,传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示

    1. SPI模式0,CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。
    在这里插入图片描述
    2. SPI模式1,CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出
    在这里插入图片描述
    3. SPI模式2,CPOL = 1,CPHA = 1:CLK空闲状态 = 高电平,数据在下降沿采样,并在上升沿移出
    在这里插入图片描述
    4. SPI模式3,CPOL = 1,CPHA = 0:CLK空闲状态 = 高电平,数据在上升沿采样,并在下降沿移出
    在这里插入图片描述

  • 对于一个特定的从设备来说,一般在出厂时就会将其工作模式确定,使用该设备时需要将主设备模式设置成从设备模式,否则无法进行通信。

6. SPI通信的优缺点

  • 优点

    1. 无起始位和停止位,因此数据位可以连续传输而不会被中断;
    2. 没有像I2C这样复杂的从设备寻址系统;
    3. 数据传输速率比I2C更高(几乎快两倍);
    4. 分离的MISO和MOSI信号线,因此可以同时发送和接收数据;
    5. 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
    6. 非常简单的硬件结构,从站不需要唯一地址(与I2C不同)。
    7. 从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。
    8. 不需要收发器(与CAN不同)。
  • 缺点

    1. 使用四根信号线(I2C和UART使用两根信号线);
    2. 无法确认是否已成功接收数据(I2C拥有此功能);
    3. 没有任何形式的错误检查,如UART中的奇偶校验位;
    4. 只允许一个主设备;
    5. 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
    6. 没有定义硬件级别的错误检查协议;
    7. 与RS-232和CAN总线相比,只能支持非常短的距离;

感谢阅读 若有错误 欢迎指正 !!!


在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

园长QwQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值