低速通信接口(三)SPI

SPI(Serial Peripheral Interface,串行外围设备接口)是一种全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于EEPROM、Flash、RTC(实时时钟)、ADC(数模转换器)、DSP(数字信号处理器)以及数字信号解码器上。SPI通信的速度很容易达到好几兆bps,所以可以用SPI总线传输一些未压缩的音频以及压缩的视频。

2个chip利用SPI总线进行通信:
在这里插入图片描述

  • SCK(Serial Clock):SCK是串行时钟线,作用是Master向Slave传输时钟信号,控制数据交换的时机和速率
  • MOSI(Master Out Slave in):在SPI Master上也被称为Tx-channel,作用是SPI主机给SPI从机发送数据
  • CS/SS(Chip Select/Slave Select):作用是SPI Master选择与哪一个SPI Slave通信,低电平表示从机被选中(低电平有效)
  • MISO(Master In Slave Out):在SPI Master上也被称为Rx-channel,作用是SPI主机接收SPI从机传输过来的数据

SPI总线有以下几个特点:
1、采用主从模式,SPI规定了两个SPI设备之间通信必须由主设备Master来控制从设备Slave。同时一个Master可以设置多个片选(Chip Select)来控制多个Slave。SPI协议还规定Slave设备的clock由Master通过SCK管脚提供给Slave,Slave本身不能产生或控制clock,没有clock则Slave不能正常工作。

单Master多Slave的典型结构如下图所示:
在这里插入图片描述
2、 SPI总线在传输数据的同时也传输了时钟信号,所以SPI协议是一种同步(Synchronous)传输协议。Master会根据将要交换的数据产生相应的时钟脉冲,组成时钟信号,时钟信号通过时钟极性(CPOL)和时钟相位(CPHA)控制两个SPI设备何时交换数据以及何时对接收数据进行采样,保证数据在两个设备之间是同步传输的
3、 SPI总线协议是一种全双工的串行通信协议,数据传输时高位在前,低位在后。SPI协议规定一个SPI设备不能在数据通信过程中仅仅充当一个发送者(Transmitter)或者接受者(Receiver)。在片选信号CS为0的情况下,每个clock周期内,SPI设备都会发送并接收1 bit数据,相当于有1 bit数据被交换了。数据传输高位在前,低位在后(MSB first)

SPI主从结构内部数据传输示意图如下图所示在这里插入图片描述
SPI总线传输的模式:
SPI总线传输一共有4种模式,这4种模式分别由时钟极性(CPOL,Clock Polarity)和时钟相位(CPHA,Clock Phase)来定义,其中CPOL参数规定了SCK时钟信号空闲状态的电平,CPHA规定了数据是在SCK时钟的上升沿被采样还是下降沿被采样。

  • 模式0:CPOL= 0,CPHA=0。SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换

  • 模式1:CPOL= 0,CPHA=1。SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换

  • 模式2:CPOL= 1,CPHA=0。SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换

  • 模式3:CPOL= 1,CPHA=1。SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换

时钟相位、极性有四种组合方式,时钟相位、极性的选择决定了传输是否以第一个发送时钟作为开始,停止时时钟是否保持为高电平等问题。
在这里插入图片描述
基本的SPI协议也称为Single-SPI,需要至少4根线(支持全双工)或者3根线(支持半双工)
而在single-SPI 协议基础上,扩展出Dual-SPI 和 Quad-SPI协议:
Dual-SPI协议:

  • 在Dual-SPI协议中,MOSI、MISO数据线被重名为SD0、SD1,即可以做输出,也可以输入双向信号线
  • Dual-SPI 协议同时使用两根数据线进行传输,在一段时间或者全部做输出(发送数据),或者全部做输入(接受数据),因此是半双工的方式。
  • 由于同时使用两根数据线进行传输,一个周期可以传送2bit的信号,因此在单向传输时,数据的吞吐率能够提高一倍。

Quad-SPI协议:

  • Quad-SPI在Dual-SPI的基础上再添加2根数据线,使得数据线变成4根,分别为SD0、SD1、SD2和SD3
  • Quad-SPI同样使用半双工的方式,一周期可以传递4bit信号。

其中的发送、接受FIFO
若发送、接受FIFO深度为8,宽度为16,与串行传输的位数在4到16bit之间,当传输数据不满16bit,需要右对齐;即保证每个FIFO的单元只存在一个串行传输的数据(复位时,发送、接受FIFO清空,会产生写满中断以及读空中断)
模式选择由TMOD寄存器决定,传输模式不影响串行传输的双工行:

  • 同时发送和接受,发送数据从发送FIFO弹出,通过TXD给目标器件,从目标器件接受的数据移入移位寄存器,在每帧数据结束进入接受FIFO
  • 只发送,只是接受移位寄存器接受的数据不进入接受FIFO,下次传输被覆盖
  • 只接受,不能工作在只接受模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值