SPI IIS 协议

SPI

SPI (Serial Peripheralinterface),顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在EEPROM,FLASH,实时时钟,AD转换器。

特点:

  • 主机和从机的收发数据同时完成的,应使得它们的SPI具有相同的时钟极性和时钟相位。
  • 主设备时钟极性和相位都是以从设备为基准。两者要有相同的时钟极性和相位。
  • 即使是主机先读取数据,也要往发送缓冲区内写数据,以触发时钟线开始计时,这样从机才能开始传输数据。
  • NSS为低电平有效,主要使能从机。

SPI通讯的优势

使SPI作为串行通信接口脱颖而出的原因很多;

  • 全双工串行通信;
  • 高速数据传输速率。
  • 简单的软件配置;
  • 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
  • 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

SPI的缺点

  • 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
  • 通常仅支持一个主设备;
  • 需要更多的引脚(与I2C不同);
  • 没有定义硬件级别的错误检查协议;
  • 与RS-232和CAN总线相比,只能支持非常短的距离;

物理连接

在这里插入图片描述

SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,片选线为 SS,它们的作用介绍如下:

  1. ( Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、CS,以下用 NSS 表示。
    • 当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI 及 MISO 同时并联到相同的 SPI 总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每个从设备都有独立的一条NSS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号 线。
    • I2C 协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而 SPI 协议中没有设备地址,它使用 NSS 信号线来寻址,当主机要选择从设备时,把该从设备的 NSS 信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行 SPI 通讯。 所以 SPI 通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号。
    • NSS为低电平有效,主要使能从机。
  2. SCK (Serial Clock):时钟信号线
    • 用于通讯数据同步。
    • 由通讯主机产生决定了通讯的速率, 不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为 fpclk/2
    • 两个设备之间通讯时,通讯速率受限于低速设备。
  3. MOSI (Master Output,Slave Input):主设备输出/从设备输入引脚。
    • 主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机
  4. MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。
    • 主机从这条信号线读入数 据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机
  5. 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
    • 推挽输出,高低电平有很大的驱动力,使电平转换很迅速
  6. 当从机未被选中时,它的MISO 引脚需设置为高阻态,以免一条线有多个输出,导致电平冲突

移位示意图

在这里插入图片描述

img

  • 主要是在 sck 的控制下,两个双向移位寄存器进行数据交换,每一次跳变传输一位数据。
  • 主机只发送不接收时,不看接收来的数据即可
  • 主机只接收不发送时,发送一个无效数据即可,一般为0x00,0xFF。
  • SSPBUF,Synchronous Serial Port Buffer, 泛指 SPI 设备里面的内部缓冲区, 一般在物理上是以 FIFO 的形式, 保存传输过程中的临时数据;
  • SSPSR, Synchronous Serial Port Register, 泛指 SPI 设备里面的移位寄存器(Shift Regitser), 它的作用是根据设置好的数据位宽(bit-width) 把数据移入或者移出 SSPBUF;
  • Controller, 泛指 SPI 设备里面的控制寄存器, 可以通过配置它们来设置 SPI 总线的传输模式。
  • 采样:内部缓存区中的数据传输到移位寄存器中
  • 传输:主机移位寄存器中的数据转移到从机

协议

时钟相位、时钟极性:

SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置:

  • **时钟极性(CPOL)**对传输协议没有重大的影响
    • 指SPI通讯设备处于空闲状态时,SCK信号线的电平信号 (即SPI通讯开始前、 NSS线为高电平时SCK的状态)。
    • 如果 CPOL=0,串行同步时钟的空闲状态为低电平
    • 如果 CPOL=1,串行同步时钟的空闲状态为高电平
  • 时钟相位(CPHA) 能够配置用于选择两种不同的传输协议之一进行数据传输
    • 指数据的采样的时刻
    • 如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样
    • 如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样
  • SPI 主模块和与之通信的外设时钟相位和极性应该一致。
  • 实际中采用较多的是“模式0”与“模式3”

在这里插入图片描述

起始、停止信号:

在这里插入图片描述

  • SS信号线由高变低,是SPI通讯的起始信号。从机的SS线被拉低
  • SS信号由低变高,是SPI通讯的停止信号。

传输规则:

在这里插入图片描述

  • CPOL = 0,SCK 空闲时为低电平;CPOL = 1,SCK 空闲时为高电平。
  • CPHA = 0,MOSI、MISO 的数据在SCK的第一个跳变沿被采样,数据在第二个时钟边沿被锁存。

在这里插入图片描述

  • CPOL = 0,SCK 空闲时为低电平;CPOL = 1,SCK 空闲时为高电平。
  • CPHA = 1,MOSI、MISO 的 数据在SCK的第二个跳变沿被采样,第一个跳变沿转换电平。

多从机模式

前面说到SPI总线必须有一个主机,可以有多个从机,那么具体连接到SPI总线的方法有以下两种:

第一种方法:多NSS

  1. 通常,每个从机都需要一条单独的SS线。
  2. 如果要和特定的从机进行通讯,可以将相应的NSS信号线拉低,并保持其他NSS信号线的状态为高电平;如果同时将两个NSS信号线拉低,则可能会出现乱码,因为从机可能都试图在同一条 MISO 线上传输数据,最终导致接收数据乱码。

具体连接方式如下图所示;

img

第二种方法:菊花链

在数字通信世界中,在设备信号(总线信号或中断信号)以串行的方式从一 个设备依次传到下一个设备(从机的输出作为下一个从机的输入),不断循环直到数据到达目标设备的方式被称为菊花链

  1. 菊花链的最大缺点是因为是信号串行传输,所以一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了;
  2. 另一方面,距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况;

具体的连接如下图所示:

img

其中红线加粗为数据的流向;

所以最终的数据流向图可以表示为:

img

SCK为时钟信号,8clks表示8个边沿信号;
其中D为数据,X为无效数据;

所以不难发现,菊花链模式充分使用了SPI其移位寄存器的功能,整个链充当通信移位寄存器,每个从机在下一个时钟周期将输入数据复制到输出。

IIS

I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。I2S有3个主要信号:

  1. 串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率=2×采样频率×采样位数
  2. 帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。
  3. 串行数据SDATA,就是用二进制补码表示的音频数据。
    Alt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值