SPI与SPIFlash - SOC裸机

1. 协议

1.1 硬件连接方式

SPI总线必须有一个主机,可以包含多个从机,硬件具体连接的方式包含两种。

第一种方式多NSS

第二种方式菊花链

 1.2. 数据格式

模式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时钟的下降沿切换

其中比较常用的模式是模式0和模式3。为了更清晰的描述SPI总线的时序,下面展现了模式0下的SPI时序图:

SPI总线协议概述_bleauchat的博客-CSDN博客_spi

优缺点

SPI通讯的优势

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

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

SPI的缺点

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

SPI接口简介
SPI内部结构
SPI工作原理
SPI特征
SPI的四种工作方式
SPI时序图
SPI原理图连接
SPI常用寄存器
STM32中SPI配置过程(HAL库)
SPI接口简介
SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围
设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上
只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,
提供方便,主要应用在EEPROM,FLASH,实时时钟,AD转换器,
还有数字信号处理器和数字信号解码器之间。

SPI内部结构


MISO :主设备数据输入,从设备数据输出。
MOSI :主设备数据输出,从设备数据输入。
SCLK : 时钟信号,由主设备产生。
CS : 从设备片选信号,由主设备控制。当从设备的片选被拉低的时候,才能从SPI总线上获取数据信息。这里需要知道的地方是,根据SPI被配置成主或者从模式,MIMO和MOSI引脚的功能会自动改变,实现发送和接收的切换。

SPI工作原理
①硬件上为4根线。
②主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
③串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。
④外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节,反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。


SPI特征
●3线全双 工同步传输
●8或16位传输帧格式选择
●主或从操作
●支持多主模式
●可以同时发出和接收串行数据;
●可以当作主机或从机工作;
主机发送时钟频率可编程控制;
●有发送结束中断标志;
●写冲突保护;
●总线竞争保护;

SPI的四种工作方式
SPI 总线根据时钟极性和时钟相位的不同有四种工作方式 ,根据我们所需要通信的外设工作要求的不同,给SPI控制器配置为不同的工作模式,以满足

时钟极性( CPOL) :
如果 CPOL=0,串行同步时钟的空闲状态为低电平。
如果 CPOL=1,串行同步时钟的空闲状态为高电平。
时钟极性对传输协议没有重大影响,只是规定了串行同步时钟在空闲时的电平为高还是为低。
时钟相位( CPHA) :
如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样。
如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
时钟相位主要是在设置数据在什么时候改变和什么时候被采样。
注意:在配置SPI模块时,SPI 主机和与之通信的外设备时钟相位和极性应该一致。
SPI时序图

它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低)。每种模式由一对参数刻画,它们称为时钟极(clock polarity)CPOL与时钟期(clock phase)CPHA。


注意:

如果时钟相位为0,则主从都需要在第一个时钟沿跳边之前将需要发送的数据准备好并上线。在第一个时钟沿来临的时候进行数据采样。
如果时钟相位为1,则主从都在第一个时钟沿到来的时候开始准备数据并上线,等待第二个时钟沿来临的时候对数据进行采样。
如果主从双方的时钟极性和相位不同,则会出现数据移位错误的问题。SPI通信方式中要求从器件先工作,然后主器件才开始发送数据,否则可能发生数据传输错误,而且之后的数据都会出错。
SPI原理图连接


SPI常用寄存器


STM32中SPI配置过程(HAL库)
①使能SPIx和I0口时钟
RCC_AHBxPeriphClockCmd() /RCC_APBxPeriphClockCmd();
②初始化10日为复用功能
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
③设置引脚复用映射:
GPIO_PinAFConfig();
②初始化SPIx,设置SPIx工作模式
void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
③使能SPIx
void SPI_Cmd(SPI_TypeDef* SPlx, FunctionalState NewState);
④SPI传输数据|
void SPI_I2S_SendData(SPl_TypeDef* SPIx, uint16_t Data);
uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPlx),
⑤查看SPI传输状态
SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE);
————————————————
版权声明:本文为CSDN博主「大致若余」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43347572/article/details/108781101

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值