面試遭打擊了-----之SPI總線(搜集於網絡)


今天接到面試電話,很是激動,bulabulabulabula說了一堆,開始面試了,問了一些問題,都答上來了,然后說什么應聘嵌入式硬件工程師,我說軟件工程師,然后就開始問軟件了,就問了spi(泥煤,半年多都沒怎么寫軟件程序了,立馬答不上來了,bulabu又是一會,對不起你面試不通過),哎,沒通過也就算了,突然覺得備受打擊,其實也凸顯自身的不足,軟件放下那么久,好多都忘了,要慢慢再撿起來了,下面就復習一下SPI了。

串行外設接口 (SPI) 總線是一種運行於全雙工模式下的同步串行數據鏈路。用於在單個主節點和一個或多個從節點之間交換數據。

SPI 總線實施簡單,僅使用四條數據信號線和控制信號線(請參見圖 1)。

圖 1 基本的 SPI 總線

盡管表 1 中的引腳名稱取自 Motorola 公司的 SPI 標准,但特殊集成電路的 SPI 端口名稱通常與圖 1 中所標示的名稱有所不同。

表 1 SPI 引腳名稱分配

SPI 數據速率通常介於 1 到 70 MHz 之間,字節長度范圍從 8 位和 12 位到這些數值的倍數位。

數據傳輸通常會包含一次數據交換。當主節點向從節點發送數據時,從節點也會向主節點發送數據。為此,主節點的內部移位寄存器和從節點被設置成環形(請參見圖 2)。

圖 2 兩個移位寄存器形成一個內部芯片環形緩沖器

在數據交換之前,主節點和從節點使其內部移位寄存器加載存儲器數據。產生時鍾信號時,主節點會通過 MOSI 線同步輸出其移位寄存器。同時,從節點在 SIMO 處從主節點讀取第一位,並將其存儲到存儲器中,然后通過 SOMI 輸出 MSB。主節點會在 MISO 處讀取從節點的第一位,並將其存儲到存儲器中以待稍后處理。整個過程將一直持續,直至交換完所有數據位,然后主節點使時鍾空閑並通過 /SS 禁用從節點。

除設置時鍾頻率之外,主節點還會配置相對於數據的時鍾極性和時鍾相位。這兩個選項分別稱作 CPOL 和 CPHA,能夠允許時鍾信號實現 180 度相移且數據延遲半個時鍾周期。圖 3 顯示了相應的時序圖。

圖 3 時鍾極性和相位的時序圖

CPOL = 0 時,時鍾在邏輯 0 處空閑:

  • 如果 CPHA = 0,數據會在 SCK 的上升沿上讀取,在下降沿上變化。
  • 如果 CPHA = 1,數據會在 SCK 的下降沿上讀取,在上升沿上變化。

CPOL = 1時,時鍾在邏輯高電平處空閑:

  • 如果 CPHA = 0,數據會在 SCK的下降沿上讀取,在上升沿上變化。
  • 如果 CPHA = 1,數據會在 SCK 的上升沿上讀取,在下降沿上變化。

圖 4 主節點與獨立從節點(左)以及菊花鏈式從節點(右)進行通信

從節點獨立尋址時,主節點必須提供多個從選擇信號。該結構一般用在數據采集系統中,其中的多個模數轉換器 (ADC) 和數模轉換器 (DAC) 都必須單獨接入。

SPI總線協議介紹(詳見http://blog.csdn.net/ce123_zhouwei/article/details/6897293

一、技術性能
        SPI接口是Motorola 首先提出的全雙工三線同步串行外圍接口,采用主從模式(Master Slave)架構;支持多slave模式應用,一般僅支持單Master。時鍾由Master控制,在時鍾移位脈沖下,數據按位傳輸,高位在前,低位在后(MSB first);SPI接口有2根單向數據線,為全雙工通信,目前應用中的數據速率可達幾Mbps的水平。總線結構如下圖所示。

二、接口定義
        SPI接口共有4根信號線,分別是:設備選擇線、時鍾線、串行輸出數據線、串行輸入數據線。

(1)MOSI:主器件數據輸出,從器件數據輸入
(2)MISO:主器件數據輸入,從器件數據輸出
(3)SCLK :時鍾信號,由主器件產生
(4)/SS:從器件使能信號,由主器件控制
三、內部結構

四、 時鍾極性和時鍾相位
        在SPI操作中,最重要的兩項設置就是時鍾極性(CPOL或UCCKPL)和時鍾相位(CPHA或UCCKPH)。時鍾極性設置時鍾空閑時的電平,時鍾相位設置讀取數據和發送數據的時鍾沿。
主機和從機的發送數據是同時完成的,兩者的接收數據也是同時完成的。所以為了保證主從機正確通信,應使得它們的SPI具有相同的時鍾極性和時鍾相位。

          SPI接口時鍾配置心得:在主設備這邊配置SPI接口時鍾的時候一定要弄清楚從設備的時鍾要求,因為主設備這邊的時鍾極性和相位都是以從設備為基准的。因此在時鍾極性的配置上一定要搞清楚從設備是在時鍾的上升沿還是下降沿接收數據,是在時鍾的下降沿還是上升沿輸出數據。

 
五、傳輸時序
        SPI接口在內部硬件實際上是兩個簡單的移位寄存器,傳輸的數據為8位,在主器件產生的從器件使能信號和移位脈沖下,按位傳輸,高位在前,低位在后。如下圖所示,在SCLK的下降沿上數據改變,上升沿一位數據被存入移位寄存器。

五、數據傳輸
       在一個SPI時鍾周期內,會完成如下操作:
1) 主機通過MOSI線發送1位數據,從機通過該線讀取這1位數據;
2) 從機通過MISO線發送1位數據,主機通過該線讀取這1位數據。
這是通過移位寄存器來實現的。如下圖所示,主機和從機各有一個移位寄存器,且二者連接成環。隨着時鍾脈沖,數據按照從高位到低位的方式依次移出主機寄存器和從機寄存器,並且依次移入從機寄存器和主機寄存器。當寄存器中的內容全部移出時,相當於完成了兩個寄存器內容的交換。

六、優缺點

       SPI接口具有如下優點:

       1) 支持全雙工操作;

       2) 操作簡單;

       3) 數據傳輸速率較高。

      同時,它也具有如下缺點:

      1) 需要占用主機較多的口線(每個從機都需要一根片選線);

      2) 只支持單個主機。

      3) 沒有指定的流控制,沒有應答機制確認是否接收到數據。

SPI時序詳解(詳見http://blog.csdn.net/ce123_zhouwei/article/details/6895408

              SPI總線是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鍾線SCK,一條數據輸入線MOSI,一條數據輸出線MISO;用於 CPU與各種外圍器件進行全雙工、同步串行通訊。SPI主要特點有:可以同時發出和接收串行數據;可以當作主機或從機工作;提供頻率可編程時鍾;發送結束中斷標志;寫沖突保護;總線競爭保護等。
          SPI總線有四種工作方式(SP0, SP1, SP2, SP3),其中使用的最為廣泛的是SPI0和SPI3方式。SPI模塊為了和外設進行數據交換,根據外設工作要求,其輸出串行同步時鍾極性和相位可以進行配置,時鍾極性(CPOL)對傳輸協議沒有重大的影響。
如果CPOL=0,串行同步時鍾的空閑狀態為低電平; 如果CPOL=1,串行同步時鍾的空閑狀態為高電平。 時鍾相位(CPHA)能夠配置用於選擇兩種不同的傳輸協議之一進行數據傳輸。 如果 CPHA=0,在串行同步時鍾的第一個跳變沿(上升或下降)數據被采樣; 如果CPHA=1,在串行同步時鍾的第二個跳變沿(上升或下降)數據被采樣。 
SPI主模塊和與之通信的外設音時鍾相位和極性應該一致。
         SPI時序詳解---SPI接口在模式0下輸出第一位數據的時刻SPI接口有四種不同的數據傳輸時序,取決於CPOL和CPHL這兩位的組合。圖1中表現了這四種時序,時序與CPOL、CPHL的關系也可以從圖中看出。

圖1
          CPOL是用來決定SCK時鍾信號空閑時的電平,CPOL=0,空閑電平為低電平,CPOL=1時,空閑電平為高電平。CPHA是用來決定采樣時刻的,CPHA=0,在每個周期的第一個時鍾沿采樣,CPHA=1,在每個周期的第二個時鍾沿采樣。由於我使用的器件工作在模式0這種時序(CPOL=0,CPHA=0),所以將圖1簡化為圖2,只關注模式0的時序。

圖2
          我們來關注SCK的第一個時鍾周期,在時鍾的前沿采樣數據(上升沿,第一個時鍾沿),在時鍾的后沿輸出數據(下降沿,第二個時鍾沿)。首先來看主器件,主器件的輸出口(MOSI)輸出的數據bit1,在時鍾的前沿被從器件采樣,那主器件是在何時刻輸出bit1的呢?bit1的輸出時刻實際上在SCK信號有效以前,比SCK的上升沿還要早半個時鍾周期。bit1的輸出時刻與SSEL信號沒有關系。再來看從器件,主器件的輸入口MISO同樣是在時鍾的前沿采樣從器件輸出的bit1的,那從器件又是在何時刻輸出bit1的呢。從器件是在SSEL信號有效后,立即輸出bit1,盡管此時SCK信號還沒有起效。

從這張圖就可以很清楚的看出主從器件的bit1是怎樣輸出的
 

詳解SPI中的極性CPOL和相位CPHA(http://blog.csdn.net/ce123_zhouwei/article/details/6923293

           SPI由於接口相對簡單(只需要4根線),用途算是比較廣泛,主要應用在 EEPROM,FLASH,實時時鍾,AD轉換器,還有數字信號處理器和數字信號解碼器之間。即一個SPI的Master通過SPI與一個從設備,即上述的那些Flash,ADC等,進行通訊。而主從設備之間通過SPI進行通訊,首先要保證兩者之間時鍾SCLK要一致,互相要商量好了,要匹配,否則,就沒法正常通訊了,即保證時序上的一致才可正常訊。而這里的SPI中的時鍾和相位,指的就是SCLk時鍾的特性,即保證主從設備兩者的時鍾的特性一致了,以保證兩者可以正常實現SPI通訊。
 
          SPI的極性Polarity和相位Phase,最常見的寫法是CPOL和CPHA,不過也有一些其他寫法,簡單總結如下:
(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (時鍾)極性
(2) CKPHA (Clock Phase)   = CPHA = PHA = Phase = (時鍾)相位
(3) SCK=SCLK=SPI的時鍾
(4) Edge=邊沿,即時鍾電平變化的時刻,即上升沿(rising edge)或者下降沿(falling edge)
對於一個時鍾周期內,有兩個edge,分別稱為:
(1)Leading edge=前一個邊沿=第一個邊沿,對於開始電壓是1,那么就是1變成0的時候,對於開始電壓是0,那么就是0變成1的時候;
(2)Trailing edge=后一個邊沿=第二個邊沿,對於開始電壓是1,那么就是0變成1的時候(即在第一次1變成0之后,才可能有后面的0變成1),對於開始電壓是0,那么就是1變成0的時候;
本博文采用如下用法:
  1. 極性=CPOL
  2. 相位=CPHA
  3. SCLK=時鍾
  4. 第一個邊沿和第二個邊沿
CPOL和CPHA,分別都可以是0或時1,對應的四種組合就是:

 
下面詳細介紹。

CPOL極性

           先說什么是SCLK時鍾的空閑時刻,其就是當SCLK在發送8個bit比特數據之前和之后的狀態,於此對應的,SCLK在發送數據的時候,就是正常的工作的時候,有效active的時刻了。其英文精簡解釋為:Clock Polarity = IDLE state of SCK。
SPI的CPOL,表示當SCLK空閑idle的時候,其電平的值是低電平0還是高電平1:
CPOL=0,時鍾空閑idle時候的電平是低電平,所以當SCLK有效的時候,就是高電平,就是所謂的active-high;
CPOL=1,時鍾空閑idle時候的電平是高電平,所以當SCLK有效的時候,就是低電平,就是所謂的active-low;

             從上圖中可以看出,(CPOL=0)的SCK 波形,它有(傳輸)8 個脈沖,而在脈沖傳輸前和完成后 都保持在【低電平狀態】。此時的狀態就是時鍾的空閑狀態或無效狀態,因為此時沒有脈沖, 也就不會有數據傳輸。同理得出,(CPOL=)1 的圖,時鍾的空閑狀態或無效狀態時SCK 是保持 【高電平的】。

CPHA相位

           首先說明一點,capture strobe = latch = read = sample,都是表示數據采樣,數據有效的時刻。相位,對應着數據采樣是在第幾個邊沿(edge),是第一個邊沿還是第二個邊沿,0對應着第一個邊沿,1對應着第二個邊沿。
對於:
CPHA=0,表示第一個邊沿:
對於CPOL=0,idle時候的是低電平,第一個邊沿就是從低變到高,所以是上升沿;
對於CPOL=1,idle時候的是高電平,第一個邊沿就是從高變到低,所以是下降沿;
CPHA=1,表示第二個邊沿:
對於CPOL=0,idle時候的是低電平,第二個邊沿就是從高變到低,所以是下降沿;
對於CPOL=1,idle時候的是高電平,第一個邊沿就是從低變到高,所以是上升沿;

            我們看上面的圖,發現數據 SI 是對應 SCK 的第一個時鍾沿,再仔細看,數據是在SCK的第一個時鍾邊沿保持穩定【數據被采樣捕獲】,在下一個邊沿改變【SCK 的下降沿數據改變】因此我們得出結論:該系列FLASH 是【數據在第一個時鍾沿被采樣捕獲】或【數據在SPCK 起始邊沿捕獲,在SPCK 下一個邊沿改變】

如何判斷CPOL和CPHA

            如果起始的SCLK的電平是0,那么CPOL=0,如果是1,那么CPOL=1,然后看數據采樣時刻,即時序圖數據線上的數據那個矩形區域的中間所對應的位置,對應到上面SCLK時鍾的位置,對應着是第一個邊沿或是第二個邊沿,即CPHA是0或1。(對應的是上升沿還是還是下降沿,要根據對應的CPOL的值,才能確定)。
(1)如何判斷CPOL:SCLK的空閑時候的電壓,是0還是1,決定了CPOL是0還是1;
(2)如何判斷CPHA:而數據采樣時刻對應着的SCLK的電平,是第一個邊沿還是第二個邊沿,對應着CPHA為0還是1。
 

SCLK的極性,相位,邊沿之間的內在邏輯
 
最后來看一下S3C2440的SPI的CPOL和CPHA,結合前面講的理論知識,下面的圖就很好理解啦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM