通信协议(二)——SPI协议
1、基礎知識
1.1 概念
SPI(Serial Peripheral Interface,串行外圍設備接口),是Motorola公司提出的一種同步串行接口技術,是一種高速、全雙工、同步通信總線,在芯片中只占用四根管腳用來控制及數據傳輸,廣泛用于EEPROM、Flash、RTC(實時時鐘)、ADC(數模轉換器)、DSP(數字信號處理器)以及數字信號解碼器上。SPI通信的速度很容易達到好幾兆bps,所以可以用SPI總線傳輸一些未壓縮的音頻以及壓縮的視頻。
特點:
? ? ? ?SPI設備之間通信必須由主設備控制從設備,主設備可通過片選實現控制多個從設備,從設備不能產生或控制時鐘,只可主設備提供。
????????SPI是采用同步方式傳輸數據的。
????????SPI設備之間數據傳輸又稱為數據交換,不管是讀數據還是寫數據都需要發送數據到從設備為其提供時鐘,才能正常進行,在有些設備讀取數據時可能需要先寫入數據,此時一定要記得將寫入時從設備響應的數據也讀出來,后面才可讀出對應需要的數據。
優點:
?? ??? ?支持全雙工操作,操作簡單,數據傳輸速率較高。
缺點:
?? ??? ?需要占用主機較多的口線,只支持單個主機,沒有應答機制確認是否接收到數據,相對于IIC缺點來說是一個大的缺點。
1.2 SPI物理層
????????采用主從模式(Master-Slave)的控制方式,支持單Master多Slave。
????????SPI規定了兩個SPI設備之間通信必須由主設備Master來控制從設備Slave。也就是說,如果FPGA是主機的情況下,不管是FPGA給芯片發送數據還是從芯片中接收數據,寫Verilog邏輯的時候片選信號CS與串行時鐘信號SCK必須由FPGA來產生。同時一個Master可以設置多個片選(Chip Select)來控制多個Slave。SPI協議還規定Slave設備的clock由Master通過SCK管腳提供給Slave,Slave本身不能產生或控制clock,沒有clock則Slave不能正常工作。
?注:一主一從
????????SCK(Serial Clock):SCK是串行時鐘線,作用是Master向Slave傳輸時鐘信號,控制數據交換的時機和速率,它由通訊主機產生,決定了通訊的速率,不同的設備支持的最高時鐘頻率不一樣,兩個設備之間通訊時,通訊速率受限于低速設備。
????????MOSI(Master Out Slave in):在SPI Master上也被稱為Tx-channel,作用是SPI主機給SPI從機發送數據,主機的數據從這條信號線輸出,從機由這條信號線讀入主機發送的數據,即這條線上數據的方向為主機到從機。
????????MISO(Master In Slave Out):在SPI Master上也被稱為Rx-channel,作用是SPI主機接收SPI從機傳輸過來的數據,主機從這條信號線讀入數據,從機的數據由這條信號線輸出到主機,即在這條線上數據的方向為從機到主機。
????????CS/SS(Chip Select/Slave Select):從設備選擇信號線,常稱為片選信號線,也稱為 NSS、SS。SPI 協議中沒有設備地址,它使用 cs 信號線來尋址,當主機要選擇從設備時,把該從設備的 cs 信號線設置為低電平,該從設備即被選中,即片選有效,接著主機開始與被選中的從設備進行 SPI 通訊。所以SPI通訊以 cs 線置低電平為開始信號,以 cs 線被拉高作為結束信號。
?注:一主多從
????????SPI 協議使用 3 條總線及N條片選線,3 條總線分別為 SCLK、MOSI、MISO,片選線為CS,其中3條總線是多個從設備共用的,CS是每一個從機有一條。
1.3 SPI協議層
????????SPI總線在傳輸數據的同時也傳輸了時鐘信號,所以SPI協議是一種同步(Synchronous)傳輸協議。Master會根據將要交換的數據產生相應的時鐘脈沖,組成時鐘信號,時鐘信號通過時鐘極性(CPOL)和時鐘相位(CPHA)控制兩個SPI設備何時交換數據以及何時對接收數據進行采樣,保證數據在兩個設備之間是同步傳輸的。
????????SPI總線傳輸一共有4中模式,這4種模式分別由時鐘極性(CPOL,Clock Polarity)和時鐘相位(CPHA,Clock Phase)來定義,其中CPOL參數規定了SCK時鐘信號空閑狀態的電平,CPHA規定了數據是在SCK時鐘的上升沿被采樣還是下降沿被采樣。
? ? ? ? 時鐘極性 CPOL: 表示SPI 通訊設備處于空閑狀態時,SCK信號線的電平信號(即 SPI 通訊開始前、CS 線為高電平時 SCLK的狀態)。CPOL=0時, SCK在空閑狀態時為低電平,CPOL=1 時,則相反。
? ? ? ? 時鐘相位 CPHA:表示數據采樣的時刻,當 CPHA=0 時,MOSI 或 MISO 數據線上的信號將會在 SCLK 時鐘線的“奇數邊沿”被采樣。當 CPHA=1 時,數據線在 SCLK 的“偶數邊沿”采樣。
????????模式0:CPOL= 0,CPHA=0。SCK串行時鐘線空閑是為低電平,數據在SCK時鐘的上升沿被采樣,數據在SCK時鐘的下降沿切換
模式1:CPOL= 0,CPHA=1。SCK串行時鐘線空閑是為低電平,數據在SCK時鐘的下降沿被采樣,數據在SCK時鐘的上升沿切換
模式2:CPOL= 1,CPHA=0。SCK串行時鐘線空閑是為高電平,數據在SCK時鐘的下降沿被采樣,數據在SCK時鐘的上升沿切換
模式3:CPOL= 1,CPHA=1。SCK串行時鐘線空閑是為高電平,數據在SCK時鐘的上升沿被采樣,數據在SCK時鐘的下降沿切換
| 0 | 0 | 0 | 低電平 | 奇數邊沿 |
| 1 | 0 | 1 | 低電平 | 偶數邊沿 |
| 2 | 1 | 0 | 高電平 | 奇數邊沿 |
| 3 | 1 | 1 | 高電平 | 偶數邊沿 |
?SPI通信過程:
????????SPI總線協議是一種全雙工的串行通信協議,數據傳輸時高位在前,低位在后。SPI協議規定一個SPI設備不能在數據通信過程中僅僅充當一個發送者(Transmitter)或者接受者(Receiver)。在片選信號CS為0的情況下,每個clock周期內,SPI設備都會發送并接收1 bit數據,相當于有1 bit數據被交換了。數據傳輸高位在前,低位在后(MSB first)。SPI主從結構內部數據傳輸示意圖如下圖所示:
????????在對SPI核操作的控制寄存器進行設置之后即可啟動數據傳輸。數據傳輸的啟動是通過向數據寄存器SPDR中寫入數據。對數據寄存器執行寫操作實際上是往一個4項寫隊列中添加數據項。每次寫操作即往隊列中寫入一個字節的數據。當SPI核被使能時,并且寫緩沖區不為空,SPI核就是會自動往發送寫隊列中最舊的數據項。接收數據與發送數據同時進行;每當發送一個字節的數據,同時總會收到一個字節的數據。如果想要的接收一個字節的數據,需要往寫緩沖區寫入一個字節的冗余數據,這樣做是為了讓SPI核啟動數據傳輸,在發送冗余數據的同時接收想要的數據,每完成接收一個字節的數據,這個字節會被移入讀緩沖區。讀緩沖區和寫緩沖區是對立的,是一個獨立的4項隊列。對數據寄存器執行讀操作,便會得到讀隊列中的數據項。
總結
以上是生活随笔為你收集整理的通信协议(二)——SPI协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: REST framework 用户认证源
- 下一篇: curl查看swift状态命令_HTTP