詳解SPI中的極性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的時候;
本博文采用如下用法:
- 極性=CPOL
- 相位=CPHA
- SCLK=時鐘
- 第一個邊沿和第二個邊沿
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;
CPHA相位
首先說明一點,capturestrobe = latch = read =sample,都是表示數據採樣,數據有效的時刻。相位,對應着數據採樣是在第幾個邊沿(edge),是第一個邊沿還是第二個邊沿,0對應着第一個邊沿,1對應着第二個邊沿。對於:
CPHA=0,表示第一個邊沿:
對於CPOL=0,idle時候的是低電平,第一個邊沿就是從低變到高,所以是上升沿;
對於CPOL=1,idle時候的是高電平,第一個邊沿就是從高變到低,所以是下降沿;
CPHA=1,表示第二個邊沿:
對於CPOL=0,idle時候的是低電平,第二個邊沿就是從高變到低,所以是下降沿;
對於CPOL=1,idle時候的是高電平,第一個邊沿就是從低變到高,所以是上升沿;
如何判斷CPOL和CPHA
(2)如何判斷CPHA:而數據採樣時刻對應着的SCLK的電平,是第一個邊沿還是第二個邊沿,對應着CPHA爲0還是1。