1 SPI協議
SPI(Serial Peripheral interface)串行外圍設備接口是同步全雙工的通信總線,在芯片的管腳上只占用四根線。
1.1 物理層
SS/NSS/CS:從設備選擇信號線(片選信號線)。由主設備控制,選擇指定的從設備。
當主機要選擇從設備時,把該從設備的SS信號線設置為低電平,該從設備即被選中,即片選有效,接著主機開始與被選中的從設備進行SPI通訊。所以SPI通訊以SS線置低電平為開始信號,以SS線被拉高作為結束信號。
SCK (Serial Clock):時鐘信號線。用于通訊數據同步,只能由主設備產生,兩個設備之間通訊時,通訊速率受限于低速設備
MOSI(Master Output, Slave Input):主設備輸出/從設備輸入引腳。該引腳在主模式下發送數據,在從模式下接收數據。
MISO(Master Input, Slave Output):主設備輸入/從設備輸出引腳。該引腳在從模式下發送數據,在主模式下接收數據。
1.2 協議層
SPI總線內部結構:
結構抽象圖:
在時鐘信號控制下,主機將要發送的數據寫到數據緩存區(Memory),緩存區經過8位移位寄存器shift register,串口移位寄存器通過MOSI信號線將數據一位一位的移到從機,從機將MISO接口收到的數據經過移位寄存器一位一位的移到數據緩存區(Memory)。同時從機也將自己移位寄存器數據通過MOSI發送給主機,兩個移位寄存器數據完成交互,讀寫同時進行。
因此,SPI讀寫操作是同步完成的。如果只進行寫操作,主機只需忽略接收到的字節;若主機要讀取從機的一個字節,就必須發送一個空字節引發從機傳輸。
1.2.1 時鐘極性與時鐘相位
時鐘極性CPOL:指SPI通訊設備處于空閑狀態時,SCK信號線的電平信號(即SPI通訊開始前、 CS片選線為高電平時SCK的狀態)。
CPOL = 0:SCK在空閑狀態時為低電平
CPOL = 1:SCK在空閑狀態時為高電平
時鐘相位CPHA:指數據的采樣的時刻
CPHA = 0:MOSI/MISO數據線上的信號將會在SCK時鐘線的“奇數邊沿”被采樣(第一個跳變沿開始)
CPHA = 1:MOSI/MISO數據線上的信號將會在SCK時鐘線的“偶數邊沿”被采樣(第二個跳變沿開始)
SPI模式 | 時鐘極性CPOL | 時鐘相位CPHA | 空閑時SCK時鐘 | 采樣時刻 |
---|---|---|---|---|
0 | 0 | 0 | 低電平 | 第一個邊沿(奇) |
1 | 0 | 1 | 低電平 | 第二個邊沿(偶) |
2 |