SPI通信过程简述:
两根数据线:对应于通信双方的各自数据发送端和接收端
一根时钟线:用于通信的同步
一根NSS线:简单来说其作用是使能
通信过程
双方数据通过时钟的电平边沿保持同步:(SPI只利用了其中一种边沿:即要么上边沿要么下边沿)
因此对于时钟信号来说,最低要求就是要有边沿的变化,而要产生边沿的变化,有多种选择:
- 时钟信号可有两种形式:空闲时高 / 空闲时低 ->STM32中由CPOL进行选择
- 数据的同步方式也有两种选择:上升沿通信 / 下降沿通信 -> STM32中由CPHA进行选择
当然,通信双方的上述配置要相同
再具体些:
当时钟信号的有效边沿到来时,在MOSI和MISO上发生了如下事情:
MOSI:主发从收
MISO:从发主收
由此完成了一个位数据的交换,接着双方等待下一个有效边沿的到来,如此循环
再具体些:
这里的所谓的“发”,不过是把数据线设置成对应的电平,而“收”就是检测一下数据线的电平。显然,收要在发之后,因此——————>在时钟信号的有效边沿到来前,发送方就要准备好数据(即提前设置数据线的电平),边沿到来时接收方检测一下就行了
主和从的区别是什么?
主:提供时钟信号
NSS详解:
Before:
NSS有两种模式:
- 软件模式:类似于用一个寄存器代表实际的引脚状态
- 硬件模式:实际引脚状态
从设备:
NSS信号为低时才能通信(包括软件和硬件)
主设备:
NSS又分输入和输出模式:
输入:输入模式的作用就是两个字——检测
检测NSS是否为高,若为低表示总线被占用,工作失败,自动切换至从模式(检测对象可为软件模拟引脚或实际引脚,若采用软件,则SSI位作为引脚的模拟就要被置1,官方库中指定mode为SPI_Mode_Maste时就同时设定了SSI为1)
输出:拉低NSS 以片选从设备(此时若配置为软件模式,作用对象是什么?)
其它设置:
- 数据长度:8位或16位
- 高位先还是低位先
关于中断(类似于串口):
- 发送:当发送缓冲器中的数据传输到移位寄存器时,SPI_SP寄存器的TXE标志被设置,表示内部的发送缓冲器可以接收下一个数据
- 接收:当移位寄存器中的数据传送到接收缓冲器时,SPI_SR 寄存器中的RXNE标志被设置