新聞中心

SPI總線CPOL CPHA

作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏

所以,CKP和CKE所對應(yīng)的取值的含義為:

When CKP = 0:

CKE=1 => Data transmitted on rising edge of SCK

CKE=0 => Data transmitted on falling edge of SCK

When CKP = 1:

CKE=1 => Data transmitted on falling edge of SCK

CKE=0 => Data transmitted on rising edge of SCK

下面再列出其他一些地方找到的,常見的SPI的四種模式的時序圖,供參考:

【如何看懂和記憶CPOL和CPHA】

所以,關(guān)于在其他地方介紹的,看似多么復(fù)雜難懂難記憶的CPOL和CPHA,其實經(jīng)過上面解釋,就肯容易看懂了:

去看時序圖,如果起始的始終SCLK的電平是0,那么CPOL=0,如果是1,那么CPOL=1,

然后看數(shù)據(jù)采樣時刻,即時序圖數(shù)據(jù)線上的數(shù)據(jù)那個矩形區(qū)域的中間所對應(yīng)的位置,對應(yīng)到上面SCLK時鐘的位置,對應(yīng)著是第一個邊沿或是第二個邊沿,即CPHA是0或1。(對應(yīng)的是上升沿還是還是下降沿,要根據(jù)對應(yīng)的CPOL的值,才能確定)。

即:

(1)如何判斷CPOL:SCLK的空閑時候的電壓,是0還是1,決定了CPOL是0還是1;

(2)如何判斷CPHA:而數(shù)據(jù)采樣時刻對應(yīng)著的SCLK的電平,是第一個邊沿還是第二個邊沿,對應(yīng)著CPHA為0還是1。

SCLK的極性,相位,邊沿之間的內(nèi)在邏輯關(guān)系

SCLK空閑時刻電壓低電平CPOL = 0
高電平CPOL = 1
數(shù)據(jù)采樣時刻,SCLK的edge是第一個還是第二個第一個邊沿CPHA = 0上升沿(開始的電平是低電壓0,而第一個邊沿,只能是從0變到1,即上升沿)下降沿
第二個邊沿CPHA = 1下降沿上升沿(開始電平是高電平1,第二個邊沿,肯定是從低電平0變到高電平1,因為第一個邊沿肯定是從高電平1,變到低電平0)


【軟件中如何設(shè)置SPI的極性和相位】

SPI分主設(shè)備和從設(shè)備,兩者通過SPI協(xié)議通訊。

而設(shè)置SPI的模式,是從設(shè)備的模式,決定了主設(shè)備的模式。

所以要先去搞懂從設(shè)備的SPI是何種模式,然后再將主設(shè)備的SPI的模式,設(shè)置和從設(shè)備相同的模式,即可正常通訊。

對于從設(shè)備的SPI是什么模式,有兩種:

(1)固定的,有SPI從設(shè)備硬件決定的

SPI從設(shè)備,具體是什么模式,相關(guān)的datasheet中會有描述,需要自己去datasheet中找到相關(guān)的描述,即:

關(guān)于SPI從設(shè)備,在空閑的時候,是高電平還是低電平,即決定了CPOL是0還是1;

然后再找到關(guān)于設(shè)備是在上升沿還是下降沿去采樣數(shù)據(jù),這樣就是,在定了CPOL的值的前提下,對應(yīng)著可以推算出CPHA是0還是1了。

舉例1:

CC2500- Low-Cost Low-Power 2.4 GHz RF Transceiver的datasheet中SPI的時序圖是:

從圖中可以看到,最開始的SCLK和結(jié)束時候的SCLK,即空閑時刻的SCLK,是低電平,推導(dǎo)出CPOL=0,然后可以看到數(shù)據(jù)采樣的時候,即數(shù)據(jù)最中間的那一點,對應(yīng)的是SCLK的第一個邊沿,所以CPHA=0(此時對應(yīng)的是上升沿)。


舉例2:

SSD1289- 240 RGB x 320 TFT LCD Controller Driver的datasheet中提到:

“SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.”

意思是,數(shù)據(jù)是在上升沿采樣,所以可以斷定是CPOL=0,CPHA=0,或者CPOL=1,CPHA=1的模式,但是至于是哪種模式。

按理來說,接下來應(yīng)該再去確定SCLK空閑時候是高電平還是低電平,用以確定CPOL是0還是1,但是datasheet中沒有提到這點。

所以,此處,目前不太確定,是兩種模式都支持,還是需要額外找證據(jù)卻確定CPOL是0還是1.


(2)可配置的,由軟件自己設(shè)定

從設(shè)備也是一個SPI控制器,4種模式都支持,此時只要自己設(shè)置為某種模式即可。

然后知道了從設(shè)備的模式后,再去將SPI主設(shè)備的模式,設(shè)置為和從設(shè)備模式一樣,即可。


對于如何配置SPI的CPOL和CPHA的話,不多細(xì)說,多數(shù)都是直接去寫對應(yīng)的SPI控制器中對應(yīng)寄存器中的CPOL和CPHA那兩位,寫0或?qū)?即可。

舉例:

此處遇到的C8051F347中的SPI就是一個SPI的controller控制器,即支持軟件配置CPOL和CPHA的值,四種模式都支持,此處C8051F347作為SPI從設(shè)備,設(shè)置了CPOL=1,CPHA=0的模式,因此,此處對應(yīng)主芯片Blackfin F537中的SPI控制器,作為Master主設(shè)備,其SPI的模式也要設(shè)置為CPOL=1,CPHA=0。


【待解決問題】

對于軟件去如何設(shè)置主設(shè)備(和從設(shè)備)的CPOL和CPHA的值,是搞懂了,知道兩者要匹配才可以正常通訊,但是對于CPOL和CPHA這四種模式,不同的模式之間,相對來說有何優(yōu)缺點,比如是否哪種模式更穩(wěn)定,數(shù)據(jù)更不容易出錯等等,還是不清楚.



上一頁 1 2 下一頁

關(guān)鍵詞: PI總線CPOLCPH

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉