本节继续讲嵌入式硬件通信接口协议中的另外一个串行通信接口-SPI。相比于UART串口协议,SPI又有着其独特之处。
简介
SPI(全称SerialPeripheral Interface),串行外设接口。
SPI是串行外设接口(SerialPeripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如AT91RM9200。
--from 百度百科
该接口由摩托罗拉在20世纪80年代中期开发,并已成为事实标准。
--from Wiki
从维基百科查阅的的“事实标准”,在这来科普一下知识盲点:
事实标准是指非由标准化组织制定的,而是由处于技术领先地位的企业、企业集团制定(有的还需行业联盟组织认可,如DVD标准需经DVD论坛认可),由市场实际接纳的技术标准。
--from 百度百科
SPI接口定义了一主多从这样的一个通信架构,在同一SPI总线上只有一个主机,可以有多个从机。这样的架构就限制了通信的主动权只能在主机端,主机发起一次通信,从机做出想要。
信号线
SPI被称为四线串行总线,其信号线分别有:
SCLK:串行时钟(主机输出)
MOSI:主输出从机输入或主机输出从机输入(主机输出的数据)
MISO:主输入从输出或主输入从输出(从输出的数据输出)
SS:从机选择(通常为低电平有效,主机输出)
信号线命名也是五花八门,以下的命名也是会遇见的:
串口时钟:
SCLK:SCK
主输出--->从输入(MOSI):
SIMO,MTSR - 对应主设备和从设备上的MOSI,相互连接
SDI,DI,DIN,SI - 在从设备上; 连接到主设备上的MOSI,或连接到下面的连接
SDO,DO,DOUT,SO - 在主设备上; 连接到从站上的MOSI,或连接到上面的连接
主输入<---从输出(MISO):
SOMI,MRST - 对应主设备和从设备上的MISO,相互连接
SDO,DO,DOUT,SO - 在从设备上; 连接到主设备上的MISO,或连接到下面的连接
SDI,DI,DIN,SI - 主设备; 连接到奴隶上的MISO或上面的连接
从机选择:
SS:SSEL,CS,CE,nSS,/ SS,SS#
以上容易让人混淆的名字是SDO、SDI、DOUT、DIN等,这些都需要看具体印在主设备还是从设备上单独讨论。但是一般的还是尽量写清写规范,这样不容易产生歧义。
SPI作为同步串行接口,可以认为有两个同步信号,第一个是从机选择SS信号,告知被选中的从机,准备开始进行SPI通信,第二个是同步时钟信号SCLK,收发双方进行数据的交互时,都是基于SCLK的跳变进行逐bit输出和采样的。
四根信号线并非全部都需要,根据工作模式,可以配置成两线、三线。
在STM32CubeMX工具的配置页面,可以很清楚看到,配置不同的工作模式时,对应被使能的芯片管脚有何不同:
对比发现,全双工的四线和三线的区别是从机选择信号NSS。这种情况一般是因为SPI总线上只有一主一从的通信架构,从机的NSS信号一直接低电平,不需要做从机选择。