24、江科大stm32视频学习笔记——SPI通信协议原理

一、SPI简介(serial Peripheral Interface(串行 外设 接口))

1、电路模式(采用一主多从的模式)、同步,全双工

24、江科大stm32视频学习笔记——SPI通信协议原理_第1张图片

  • 所有SPI设备的SCK、MOSI、MISO分别连在一起
  • 主机另外引出多条SS控制线,分别接到各从机的SS引脚
  • 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
  • 推挽输出:高低电平都有很强的驱动能力,使得SPI引脚信号的下降沿和上升沿非常迅速
  • (IIC因为要实现半双工,经常切换输出输入,IIC又要实现多主机的时钟同步和总线仲裁,若使用推挽输出任意电源短路)
  • SPI的MISO可能有冲突,一位内主机是输入,三个从机都是输出,若三个从机始终是推挽输出,势必会导致冲突。
    故SPI有个规定:
    当从机的SS引脚为高电平时,即从机未被选中,其MISO引脚必须切换成高阻态,高阻态相当于引脚断开,不输出任何电平,这样可以防止一条线有多个输出,导致电平冲突问题
    SS为低电平时,MISO才允许变为推挽输出(切换在从机中,不需要关注)

 2、4条信号线

  • SS(片选信号线(理解为从机选择线)、Slave Select):单片机通过给片选信号线高低电平来确定哪一个从机通讯,一般当这根线为低电平时,片选才有效
  • SCK(时钟信号线、Serial Clock):主设备产生
  • MOSI(发送信号线、Master Output Slave Input):主设备从MOSI输出数据,而从设备通过MOSI接收数据
  • MISO(接收信号线、Master Input Slave Output):主设备通过这根线接收数据

3、通信过程

24、江科大stm32视频学习笔记——SPI通信协议原理_第2张图片24、江科大stm32视频学习笔记——SPI通信协议原理_第3张图片

  • 写数据:在地址为0x01处写数据0000 1111
  • 给存储器发送起始位1,然后发送操作位01,然后地址0x01,数据0000 1111,则存储器的地址0x01就会保存0000 1111数据。
  • 读取数据:
  • 首先先写起始位1,然后操作码10,最后传递要取的地址符号
  • spi是串行同步通信,因此数据线要和时钟线配合使用,才能给存储器发送数据

24、江科大stm32视频学习笔记——SPI通信协议原理_第4张图片

  • 93C46是一个EEPROM存储器,有1024位存储空间,也就是128个字节,每个字节都有属于它的地址,刚好是7位数的二进制数 
  • SSI大部分时候是低电平有效,但在93C46中是高电平有效
  • 四种采集模式:
  • 1、只有在上升沿的时候采集数据(空闲时钟低电平)
  • 2、只有在下降沿的时候采集数据(空闲时钟低电平)
  • 3、只有在上升沿的时候采集数据(空闲时钟高电平)
  • 4、只有在下降沿的时候采集数据(空闲时钟高电平)

4、I2C和SPI的比较

(1)I2C

  • I2C在硬件和软件电路设计都比较复杂,但可在消耗最低硬件资源的情况下,实现最多的功能
  • 由于I2C开漏外加上拉电阻的电路结构,使得通信线高电平的驱动能力比较弱,这会导致通信线由低电平变到高电平的时候,上升沿耗时比较长,限制了IIC的最大通信速度
  • 故IIC的标准模式只有100kHz的时钟频率,快速模式只有400kHz

(2)SPI

  • SPI传输更快,没有严格规定最大传输速度,最大传输速度取决于芯片厂商的设计需求,即看手册
  • SPI的设计比较简单粗暴,实现的功能没IIC多,硬件开销比较大,通行线的个数比较多哈,并且通行过程中,经常会有资源浪费的现象
  • SPI的风格:最简单最快速的完成任务,没有应答机制

二、软件读写W25Q64

1、W25Q64介绍

W25Q64是一个Flash存储器芯片,内部可以存储8M字节的数据,并且是掉电不丢失,若在项目中需要存储大量的数据,可以考虑此芯片。

2、移位示意图

(1)SPI的基础是交换一个字节

24、江科大stm32视频学习笔记——SPI通信协议原理_第5张图片24、江科大stm32视频学习笔记——SPI通信协议原理_第6张图片

 24、江科大stm32视频学习笔记——SPI通信协议原理_第7张图片24、江科大stm32视频学习笔记——SPI通信协议原理_第8张图片

(2)SPI时序基本单元

24、江科大stm32视频学习笔记——SPI通信协议原理_第9张图片

交换一个字节(模式0)(应用最多)
CPOL=0(时间极性):空闲状态时,SCK为低电平
CPHA=0(时钟相位):SCK第一个边沿移入数据,第二个边沿移出数据

四个模式

模式0:CPOL=0:空闲SCK为0,CPHA=0:SCK第一个边沿移入数据,第二个边沿移出

模式1:CPOL=0:空闲SCK为0,CPHA=1:SCK第一个边沿移出数据,第二个边沿移入

模式2:CPOL=0:空闲SCK为1,CPHA=0:SCK第一个边沿移入数据,第二个边沿移出

模式3:CPOL=0:空闲SCK为1,CPHA=1:SCK第一个边沿移出数据,第二个边沿移入

你可能感兴趣的:(stm32单片机,stm32,单片机,c语言,嵌入式硬件)