一、SPI简介
SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器和数字信号处理器和数字信号解码器之间。
STM32 芯片有多个 SPI 外设,它们的 SPI 通讯信号引出到不同的 GPIO 引脚上,使用时必须配置到这些指定的引脚。其中 SPI1 是 APB2 上的设备,最高通信速率达 36Mbtis/s,SPI2、SPI3 是 APB1 上的设备,最高通信速率为 18Mbits/s。除了通讯速率,在其它功能上没有差异。其中 SPI3 用到了下载接口的引脚,这几个引脚默认功能是下载,第二功能才是 IO 口,如果想使用 SPI3 接口,则程序上必须先禁用掉这几个 IO 口的下载功能。一般在资源不是十分紧张的情况下,这几个 IO 口是专门用于下载和调试程序,不会复用为 SPI3。
SPI又叫移位寄存器,它通过8个时钟周期的移位,来达到交换主从数据的目的,也就是说:在每个SPI时钟周期内,都会发生全双工数据传输。主机在MOSI线上发送一位数据,从机读取它,而从机在MISO线上发送一位数据,主机读取它。
二、SPI主从模式
SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。SPI是全双工且SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps
主机和从机之间传输的数据与 主机产生的时钟同步。同IIC接口相比,SPI器件支持更高的时钟 频率。 SPI接口只能有一个主机,但可以有一个或多个从机。主机的片选信号用于选择从机。这通常是一个低电平有效信号,拉高时从机与SPI总线断开连接。当使用多个从机时,主机需要为每个从机提供单独的片选信号。
三、SPI引脚说明
SPI是一种同步、全双工、主从式接口。来自主机或从机的数据在 时钟上升沿或下降沿同步。主机和从机可以同时传输数据。SPI接 口可以是3线式或4线式。
- MOSI(Master Output Slave Input) – 主设备输出/从设备输入信号;
- MISO(Master Input Slave Output) – 主设备输入/从设备输出信号;
- SCLK(Serial Clock) – 串行时钟信号,由主设备产生,用来同步数据比特;
- SS(Slave Select)/CS(Chip Select) – 从设备片选信号,低电平有效,由主设备控制;
四、SPI时钟极性和时钟相位
时钟极性和时钟相位 在SPI中,主机可以选择时钟极性和时钟相位。在空闲状态期 间,CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为 高电平且在向低电平转变的期间,以及传输结束时CS为低电平且 在向高电平转变的期间。CPHA位选择时钟相位。根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根 据从机的要求选择时钟极性和时钟相位。根据CPOL和CPHA位的选 择,有四种SPI模式可用。表1显示了这4种SPI模式。
传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示。
总结:针对模式1的上升沿采样,下降沿移出的实质意义就是:在SCLK上升沿期间,主机要把发送的数据放到MOSI主线上,在SCLK下降沿期间,主机会把数据移出,在移出的同时,从机通过MISO把数据传进来,所以主机需要接收数据,即上升沿写,下降沿读。
五、多从机配置
5.1 常规SPI模式
常规SPI模式:主机需要为每个从机提供单独的片选信号。一旦 主机使能(拉低)片选信号,MOSI/MISO线上的时钟和数据便可用 于所选的从机。如果使能多个片选信号,则MISO线上的数据会被 破坏,因为主机无法识别哪个从机正在传输数据。 从图中可以看出,随着从机数量的增加,来自主机的片选线的数量 也增加。这会快速增加主机需要提供的输入和输出数量,并限制 可以使用的从机数量。可以使用其他技术来增加常规模式下的从机数量,例如使用多路复用器产生片选信号。
5.2 菊花链模式
在菊花链模式下,所有从机的片选信号连接在一起,数据从一个 从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI 时钟。来自主机的数据直接送到第一个从机,该从机将数据提供 给下一个从机,依此类推。 使用该方法时,由于数据是从一个从机传播到下一个从机,所以 传输数据所需的时钟周期数与菊花链中的从机位置成比例。图8显示了时钟周 期和通过菊花链的数据传播。并非所有SPI器件都支持菊花链模 式。请参阅产品数据手册以确认菊花链是否可用。
六、isoSPI通信
isoSPI通信实质上就是将四线SPI通信通过芯片转换成两线SPI通信,但底层操作的步骤完全相同。