目录
一、简介
二、接口
三、传输模式
四、数据交换
五、多从机配置
1、常规SPI模式
2、菊花链模式
一、简介
串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。
SPI是一种同步、全双工、主从式接口。来自主机或从机的数据在时钟上升沿或者下降沿同步。SPI共有四根线,主机和从机可以同时传输数据。
相对于I2C协议来说,SPI通信速率可以很高,一般能达到 MHz 甚至更高的级别,适用于高速数据传输;SPI支持全双工通信,主设备和从设备可以同时发送和接收数据,通信效率高;SPI时钟极性和相位可以调整,可以适应不同的外设和通信方式。但是,SPI线数多,并且不支持多主机连接,只能由一个主设备控制多个从设备。
二、接口
SPI共有四根线,分别是MISO、MOSI、SCLK、CS。
- MISO:主设备数据输入,从设备数据输出
- MOSI:主设备数据输出,从设备数据输入
- SCLK:同步时钟信号,由主设备产生
- CS:从设备使能信号,由主设备控制。当总线上有多个从设备的时候,主设备如果需要和某个从设备通信,就将该设备对应的片选引脚拉低使能
学习完SPI的接口后,我们总结一下,要开始SPI通信,主机必须发送时钟信号,并通过使能CS信号选择从机。 片选通常是低电平有效信号。因此,主机必须在该信号上发送逻辑0以选择从机。SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送和接收同时进行。同时,SPI接口允许用户灵活选择时钟的上升沿或下降沿来采样数据或移位数据。
三、传输模式
在SPI中,主机可以选择时钟极性和时钟相位。在空闲状态期间,CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间。
CPHA位选择时钟相位。根据CPHA位的状态,使用时钟上升沿或下降沿来采样或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位。根据CPOL和CPHA位的选择,有四种模式可用。
SPI模式 | CPOL | CPHA | 空闲状态下的时钟极性 | 采样或移位的时钟相位 |
---|---|---|---|---|
0 | 0 | 0 | 逻辑低电平 | 数据在上升沿采样,在下降沿移出 |
1 | 0 | 1 | 逻辑低电平 | 数据在下降沿采样,在上升沿移出 |
2 | 1 | 0 | 逻辑高电平 | 数据在下降沿采样,在上升沿移出 |
3 | 1 | 1 | 逻辑高电平 | 数据在上升沿采样,在下降沿移出 |
看如下几张图,传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示。
模式一
模式二
模式三
模式四
四、数据交换
SPI设备之间的数据传输之所以被称为数据交换,是因为SPI协议规定一个SPI设备不能在数据通信过程中仅仅只充当一共“发送者”或者“接收者”。事实上SPI设备在通信时两边各有一个移位寄存器,这样在发送一个bit的同时将会收到对方1个bit的数据,当发送完8bit数据后,也将收到对方的8bit数据,这也就意味着完成了1个byte的数据交换。
SPI数据传输过程实际上就是主从设备两个移位寄存器的数据交换过程,所以SPI的读功能实际上可以由SPI的写功能实现,即随便写一个字节的无效数据即可。在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收到的数据有可能会被丢弃,导致SPI物理模块最终失效。
五、多从机配置
多个从机可与单个SPI主机一起使用。从机可以采用常规模式连接,或采用菊花链模式连接。
1、常规SPI模式
在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号,MOSI、MISO线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。
但是常规SPI模式,随着从机数量的增加,来自主机的片选线的数量也增加。这会快速增加主机需要提供的输入和输出数量,并限制可以使用的从机数量。
优点
每个从设备直接连接到主设备,数据传输路径短,延迟较低,适合实时性要求高的应用;每个从设备都有独立的片选信号(CS),一个从设备的故障不会影响其他从设备的正常工作,提高了系统的可靠性;每个从设备直接与主设备通信,无需中间设备转发数据,通信协议简单。
缺点
每增加一个从设备,就需要一个额外的片选引脚,导致引脚资源消耗较大,限制了可以连接的从设备数量;需要为每个从设备布设独立的片选信号线,随着从设备数量的增加,布线复杂度增加;增加或移除从设备时,需要重新配置片选信号线和修改主设备的软件配置,灵活性较差。
2、菊花链模式
在菊花链模式下 ,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一个SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依次类推。
使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需要的时钟周期数与菊花链中的从机位置成比例。例如在下图所示的8位系统中,为使第3个从机能够获得数据,需要24个时钟脉冲,而常规SPI模式下只需要8个时钟。(注意:并非所有SPI器件都支持菊花链模式)
优点
菊花链模式通过串联多个设备,使得只需要一组SPI总线即可连接多个从设备,从而节省了主控设备的引脚资源;由于设备是串联的,所以布线相对简单,可以减少PCB上的布线复杂度;可以方便地添加或移除从设备,只需将新的设备串联在链的末端即可。
缺点
每个设备都会引入一定的延迟,随着链条长度的增加,总延迟会累积,可能影响通信速度和实时性;如果链条中的一个设备故障,可能会影响后续所有设备的通信,降低系统的可靠性;传输的数据需要通过多个设备,中间设备需要对数据进行转发,这增加了信号的复杂性和系统设计的难度。