SPI總線之CPOL CPHA
最近在看關于Silicon Labs的C8051F347的某個驅動中,關于SPI部分初始化的代碼,看到其對于SPI的設置為CPOL=1,CPHA=0,對于CPOL及CPHA的含義不了解,想要搞懂,這兩個參數(shù)到底是什么意思,以及為何要這么設置。所以才去找了SPI的極性和相位的相關資料,整理如下。
本文引用地址:http://www.biyoush.com/article/201612/330521.htm【SPI基礎知識簡介】
設備與設備之間通過某種硬件接口通訊,目前存在很多種接口,SPI接口是其中的一種。
SPI中分Master主設備和Slave從設備,數(shù)據(jù)發(fā)送都是由Master控制。
一個master可以接一個或多個slave。
常見用法是一個Master接一個slave,只需要4根線:
SCLK:Serial Clock,(串行)時鐘
MISO:Master In Slave Out,主設備輸入,從設備輸出
MOSI:Master Out
SS:
SPI由于接口相對簡單(只需要4根線),用途算是比較廣泛,主要應用在 EEPROM,F(xiàn)LASH,實時時鐘,AD轉換器,還有數(shù)字信號處理器和數(shù)字信號解碼器之間。
即一個SPI的Master通過SPI與一個從設備,即上述的那些Flash,ADC等,進行通訊。
而主從設備之間通過SPI進行通訊,首先要保證兩者之間時鐘SCLK要一致,互相要商量好了,要匹配,否則,就沒法正常通訊了,即保證時序上的一致才可正常訊。
而這里的SPI中的時鐘和相位,指的就是SCLk時鐘的特性,即保證主從設備兩者的時鐘的特性一致了,以保證兩者可以正常實現(xiàn)SPI通訊。
【SPI相關的縮寫或說法】
先簡單說一下,關于SPI中一些常見的說法:
SPI的極性Polarity和相位Phase,最常見的寫法是CPOL和CPHA,不過也有一些其他寫法,簡單總結如下:
(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (時鐘)極性
(2) CKPHA (Clock Phase)
(3) SCK=SCLK=SPI的時鐘
(4) Edge=邊沿,即時鐘電平變化的時刻,即上升沿(rising edge)或者下降沿(falling edge)
對于一個時鐘周期內,有兩個edge,分別稱為:
Leading edge=前一個邊沿=第一個邊沿,對于開始電壓是1,那么就是1變成0的時候,對于開始電壓是0,那么就是0變成1的時候;
Trailing edge=后一個邊沿=第二個邊沿,對于開始電壓是1,那么就是0變成1的時候(即在第一次1變成0之后,才可能有后面的0變成1),對于開始電壓是0,那么就是1變成0的時候;
本文采用如下用法:
極性=CPOL
相位=CPHA
SCLK=時鐘
第一個邊沿和第二個邊沿
【SPI的相位和極性】
CPOL和CPHA,分別都可以是0或時1,對應的四種組合就是:
Mode 0 | CPOL=0, CPHA=0 |
Mode 1 | CPOL=0, CPHA=1 |
Mode 2 | CPOL=1, CPHA=0 |
Mode 3 | CPOL=1, CPHA=1 |
單獨看這張圖,的確很難明白具體含義,所以下面會有更詳細的解釋。
【 CPOL極性】
先說什么是SCLK時鐘的空閑時刻,其就是當SCLK在數(shù)發(fā)送8個bit比特數(shù)據(jù)之前和之后的狀態(tài),于此對應的,SCLK在發(fā)送數(shù)據(jù)的時候,就是正常的工作的時候,有效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;
評論