野火STM32学习笔记(如有侵权立即删除)
1.SPI 协议(Serial Peripheral Interface)即串行外围设备接口,一种高速全双工通信总线。广泛地使用在 ADC、 LCD 等设备与 MCU 间,要求通讯速率较高的场合。SPI---FLASH比IIC---EEPROM具有更大的空间,以及更高的性价比。SPI比I2C的传输速率高很多,低速传感器、芯片等使用IIC,高速芯片一般使用SPI。
2.SPI物理层
一个主机上可以挂载多个从机,
各个端口的作用:
1.SS:从设备选择信号线,常称为片选信号线,也称为NSS、CS。每个从设备都有独立的这一条SS信号线,本信号线独占主机的一个引脚,既有多少个从设备,就有多少条片选信号线。i2c协议通过设备地址来寻址、选中总线上的某个设备并与之通信;而SPI协议中没有设备地址,它使用SS信号线来寻址,当主机要选择从设备时,把该从设备的SS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以SS线置低电平为开始信号,以SS线被拉高作为结束信号。
2.SCK(Serial Clock):时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯速率,不同的设备支持的最高时钟频率不一样,如STM32的SPI时钟频率最大为Fpclk/2,两个设备之间通信时,通信速率受限于低速设备。
3.MOSI(Master Output,Slave input):主设备输出/从设备输入引脚。主机的数据线从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
4.MISO(Master input,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。
3.SPI基本通讯过程(主机视角)
1.NSS信号由高变低,是SPI通讯的起始信号。NSS是每个从机各自独占的信号线,当从机在自己的NSS线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。
2.时钟的上升沿触发,此时数据跳变。
3.时钟下降沿采样。(MOSI及MISO数据线在sck的每个时钟周期传输一位数据,且数据输入输出是同时进行的。)
4.同2。
5.同3。
6.NSS信号由低变高,是SPI通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。
4.CPOL/CPHA及通讯模式
1.时钟极性CPOL是指SPI通讯设备处于空闲状态时,SCK信号线的电平信号状态。(即SPI开始前NSS线为高电平时SCK的状态)。CPOL=0时,SCK在空闲时为低电平,CPOL=1时,则相反。
2.时钟相位CPHA是指数据的采样时刻,当CPHA=0时,MOSI或者MISO数据线上的信号在奇数边沿保持不变,将会在SCK时钟线的奇数边沿被采样,在非采样时刻,MOSI和MISO有效信号发生跳变。当CPHA=1时,数据线有效信号在偶数边沿保持不变,在SCK的偶数边沿被采样,在非采样时刻,MOSI和MISO有效信号发生跳变。
3.SPI分成了四种模式,主机与从机工作在相同的模式下才能正常通信,实际中较多采用模式0与模式3.