SPI是由Motorola公司提出的一種同步串行外圍接口;它在速度要求不高,低功耗,需要保存少量參數的智能化傳感系統中得到了廣泛應用;
SPI是一個全雙工的同步串行接口,在數據傳輸過程中,總線上只能是一個主機和一個從機進行通信;
通信四種模式:
1、MISO(Master In Slave Out)
主機輸入,從機輸出;
2、MOSI(Master Out Slave In)
主機輸出,從機輸入;
3、SCK(Serial Clock)
串行時鍾信號
4、SS(Slave Select)
從機選擇信號,低電平有效;(即作從機時,該位置低)
SPI總線可在軟件的控制下構成各種系統
SPI總線與多從機連接
SPI的基本結構相當於兩個8位移位寄存器的首尾相接,構成16位的環形移位寄存器,從而實現了主機與從機的數據交換;
SPI接口的基本結構圖
SPI主從模式
設置MSTR(主設備選擇)和SPE位(使能位)來選擇是否工作在主模式還是從模式;
stm32強大之處:因為從機NSS位必須接0,而主機NSS位接1;stm32可以有軟件來設置相應的主從位;
SPI下時鍾信號的相位和極性(設置由與之通信的具體芯片來設定)
SPI接口可由CPOL和CPHA設定4種不同傳輸格式的時序;
CPOL決定時鍾脈沖SCK的有效脈沖方式(正脈沖、負脈沖)。CPHA決定數據線MOSI什么時候輸出數據或采集數據;
根據CPOL和CPHA的組合數目,一共四種設置情況;
數據圖分析:
數據幀的格式
根據SPI_CR1寄存器中的LSBFIRST位,輸出數據位時可以MSB(高位先傳)在先也可以是LSB(低位先傳),根據SPI_CR1寄存器的DFF位,每個數據幀可以是8位或者16位,所選擇的數據幀格式對發送/接收都有效;
SPI通信配置步驟:(在主模式下,串行時鍾在SCK腳產生)
1、通過SPI_CR1寄存器的BR[2:0]位定義串行時鍾波特率;
2、選擇CPOL和CPHA位,定義數據傳輸和串行時鍾間的相位關系;
3、設置DFF位來定義8/16位數據幀格式;
4、配置SPI_CR1寄存器的LSBFIRST位定義幀格式;
5、如果NSS引腳需要工作在輸入模式,硬件模式中在整個數據幀傳輸期間應把NSS腳連接到高電平;在軟件模式中,需要設置SPI_CR1寄存器的SSM和SSI位,如果NSS引腳工作在輸出模式,則只需設置SSOE位;
6、必須設置MSTR和SPE位(只當NSS被連到高電平,這些位才能保存置位)。
在這個配置中,MOSI腳是數據輸出,而MISO腳是數據輸入;
SPI通信過程: