SPI通信協議詳解--CPOL&CPHA

詳解SPI中的極性CPOL和相位CPHA

           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)Leadingedge=前一個邊沿=第一個邊沿,對於開始電壓是1,那麼就是1變成0的時候,對於開始電壓是0,那麼就是0變成1的時候;
(2)Trailingedge=後一個邊沿=第二個邊沿,對於開始電壓是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的時刻了。其英文精簡解釋爲:ClockPolarity = 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相位

           首先說明一點,capturestrobe = 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,結合前面講的理論知識,下面的圖就很好理解啦!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章