SPI协议的介绍
學習內容:
學習SPI協議記錄
學習清單:
提示:這里可以添加要學的內容
例如:
學習詳細內容:
1.SPI協議的介紹
SPI是串口外設接口(Serial Peripheral Interface)的縮寫,是一種高速的,全雙工,同步的通信總線,并且只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出于這種簡單易用的特性,越來越多的芯片集成了這種通信協議。
2.三根線還是四根線
SPI一般都是默認4線制Motorola SPI協議,即有四根線,分別是:SCLK、MOSI、MISO和CS共4根數據線,標準4線制的好處是可以實現數據的全雙工傳輸,當只有一個主機和一個從設備時,只需要一個CS、多個從機需要多個CS。(CS片選信號有的也叫做SS線),多從機模式,通常每個從機需要一條單獨的SS線,如下圖所示:
CS是chip select,即從設備使能信號,由主設備控制。當總線上有多個從設備時,主設備如果需要和某個從設備通信,就將該設備的片選引腳拉低使能。
即通過指定使能NSS,就能與對應的從機進行通信。
以上圖中的4根線分別是:
- SCLK:Synchronous CLock,同步時鐘信號,時鐘頻率即SPI速率,和SPI模式有關
- MOSI:Master output slave input,主設備數據輸出,從設備數據輸入
- MISO:Master input slave output,主設備數據輸入,從設備數據輸出
- CS:chip select,從機設備選擇,低電平有效
3線制SPI,根據不同的應用場景,主要有以下2中類型:
- 只有3根線:SCLK,MOSI和CS,沒有MISO數據線,適用于單工通訊,主機只發送或只接收從機的數據
- 只有3根線:SCLK,SDIO和CS,這里的SDIO作為雙向端口,適用于半雙工通訊,比如ADI的多款ADC芯片都支持雙向傳輸。
3.兩個概念四種模式
既然是要進行數據的傳輸,雙方就要明確從機在什么時刻去采樣主機發出的數據,主機在什么時刻去讀取從機發來的數據。
CPOL(Clock Polarity)時鐘的極性,規約了SPI總線在空閑時,時鐘信號是高電平還是低電平;
- CPOL=0 表示時鐘空閑時為低電平
- CPOL=1 表示時鐘空閑時為高電平
CPHA(Clock Phase)時鐘的相位,規約SPI設備是在時鐘上升沿還是下降沿觸發數據采樣。
- CPHA=0 表示數據在SCLK時鐘上升沿被采樣,在SCLK時鐘下降沿切換(有的說法叫“在時鐘信號SCLK的第一個跳變沿采樣”)
- CPHA=1表示數據在SCLK時鐘下降沿被采樣,在SCLK時鐘上升沿切換(有的說法叫“在時鐘信號SCLK的第二個跳變沿采樣”)
時鐘極性和時鐘相位的不同組合,所以有了SPI總線傳輸的4種模式
模式1:CPOL=0,CPHA=0
模式1的示例圖:即時鐘空閑時為低電平,在時鐘的上升沿被采樣,下降沿切換
模式2:CPOL=0,CPHA=1
模式3:CPOL=1,CPHA=0
模式4:CPOL=1,CPHA=1
其余三個模式也是同理
4.SPI時序圖
當以模式1為工作模式時:
先是將CS片選信號拉低,選中要通信的從設備,然后通過MOSI和MISO這兩根數據線進行通信,MOSI數據線發出了0xD2這個數據給從設備,同時從設備也通過MISO線給主設備返回了0x66這個數據。由于SPI是全雙工的,所以讀寫時序可以一起完成。
5.SPI的優缺點
SPI的優勢
- 全雙工串行通信
- 高速數據傳輸速率
- 簡單的軟件配置
- 及其靈活的數據傳輸,不限于8位,它可以是任意大小的字
- 非常簡單的硬件結構,從站不需要唯一地址(與IIC不同),從機使用主機時鐘,不需要精密時鐘振蕩器/晶振(與UART不同),不需要收發器(與CAN不同)
SPI的缺點
- 沒有硬件從機應答信號(主機可能在不知情的情況下無處發送)
- 通常僅支持一個主設備
- 需要更多的引腳(與IIC不同)
- 沒有定義硬件級別的錯誤檢查協議
- 與RS-232與CAN總線相比,只能支持非常短的距離
6.SPI和IIC的對比
- SPI是全雙工,而IIC是半雙工
- IIC支持多主機多從機,SPI只能有一個主機
- 從GPIO占用上來看,IIC占用更少的GPIO,更節省資源
- SPI的數據位寬更靈活,可以根據需要選擇多位數數據寬度
- SPI協議沒有響應機制,主機無法得知從機是否接收到所發的數據,如果不采用一些方法的話可能會導致數據丟幀
- 正是因為沒有復雜的響應機制,SPI協議可以做到非常高的速率,每一個SCLK都可以進行數據的傳輸,通過引入CRC校驗等校驗方法,可以即高速傳輸數據,又能保持數據的準確度。
- IIC通過期間地址來選擇從機,從機數量的增加不會導致GPIO的增加,而SPI通過CS片選信號選擇從機,每增加一個從機就要多占用一個GPIO,當然也可以通過加入譯碼器來實現多從機控制
- 兩者大多數都應用與板內器件短距離通訊
學習資料:
參考資料1
參考資料2
參考資料3
總結
- 上一篇: 阿里云部署django项目流程【cent
- 下一篇: Hive的基本操作总结