新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SPI總線CPOL CPHA

        SPI總線CPOL CPHA

        作者: 時間:2016-12-15 來源:網絡 收藏
        【背景】

        最近在看關于Silicon Labs的C8051F347的某個驅動中,關于SPI部分初始化的代碼,看到其對于SPI的設置為CPOL=1,CPHA=0,對于CPOL及CPHA的含義不了解,想要搞懂,這兩個參數到底是什么意思,以及為何要這么設置。所以才去找了SPI的極性和相位的相關資料,整理如下。

        本文引用地址:http://www.104case.com/article/201612/330357.htm

        【SPI基礎知識簡介】

        設備與設備之間通過某種硬件接口通訊,目前存在很多種接口,SPI接口是其中的一種。

        SPI中分Master主設備和Slave從設備,數據發送都是由Master控制。

        一個master可以接一個或多個slave。

        常見用法是一個Master接一個slave,只需要4根線:

        SCLK:Serial Clock,(串行)時鐘

        MISO:Master In Slave Out,主設備輸入,從設備輸出

        MOSI:Master OutSlave In,主設備輸出,從設備輸入

        SS:Slave Select,選中從設備,片選


        SPI由于接口相對簡單(只需要4根線),用途算是比較廣泛,主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。
        即一個SPI的Master通過SPI與一個從設備,即上述的那些Flash,ADC等,進行通訊。
        而主從設備之間通過SPI進行通訊,首先要保證兩者之間時鐘SCLK要一致,互相要商量好了,要匹配,否則,就沒法正常通訊了,即保證時序上的一致才可正常訊。
        而這里的SPI中的時鐘和相位,指的就是SCLk時鐘的特性,即保證主從設備兩者的時鐘的特性一致了,以保證兩者可以正常實現SPI通訊。

        【SPI相關的縮寫或說法】

        先簡單說一下,關于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,分別稱為:

        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 0CPOL=0, CPHA=0
        Mode 1CPOL=0, CPHA=1
        Mode 2CPOL=1, CPHA=0
        Mode 3CPOL=1, CPHA=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;


        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時候的是高電平,第一個邊沿就是從低變到高,所以是上升沿;



        用圖文形式表示,更加容易看懂:

        此處,再多解釋一下可能會遇到的CKP和CKE,其是Microchip的PIC系列芯片中的說法。

        (1)CKP是Clock Polarity Select,就是極性=CPOL:

        CKP,雖然名字和CPOL不一樣,但是都是指時鐘相位的選擇,定義也一樣:

        CKP: Clock Polarity Select bit

        1 = Idle state for clock (CK) is a high level

        0 = Idle state for clock (CK) is a low level

        所以不多解釋。

        (2)CKE是Clock Edge Select,就是相位=CPHA:

        CKE: SPI Clock Edge Select bit

        1 = Transmit occurs on transition from active to Idle clock state

        0 = Transmit occurs on transition from Idle to active clock state

        意思是

        1 =(數據)傳輸發生在時鐘從有效狀態轉到空閑狀態的那一時刻

        0 =(數據)傳輸發生在時鐘從空閑狀態轉到有效狀態的那一時刻


        其中,數據傳輸的時刻,即圖中標出的“數據transmit傳輸的時刻”,很明顯,該時刻是一個時鐘和下一個時鐘之間交界的地方,對應的不論是上升沿還是下降沿,都與我們前面提到的CPHA=數據采樣的時刻,的邊沿方向所相反。

        所以,此處的CKE,正好與CPHA相反。


        上一頁 1 2 下一頁

        關鍵詞: PI總線CPOLCPH

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 界首市| 上思县| 兴义市| 舟山市| 阿鲁科尔沁旗| 罗平县| 科尔| 鱼台县| 商南县| 齐齐哈尔市| 乐业县| 蕉岭县| 陇南市| 阿坝| 郯城县| 土默特右旗| 上犹县| 西林县| 清流县| 双辽市| 顺义区| 二手房| 珲春市| 大竹县| 奉节县| 平邑县| 阿合奇县| 达孜县| 西峡县| 白水县| 威远县| 集贤县| 陇川县| 巴彦淖尔市| 石景山区| 正阳县| 乐山市| 南溪县| 昌江| 磴口县| 湘潭县|