SPI是微控制器外設電路中常用的一種通訊方式,適用於近距離通訊,通常用於晶片間的通訊,有四根線。在SPI通訊中匯流排時鐘和匯流排相位也兩個比較重要的概念,一般在使用SPI通訊時都使用預設設定,所以容易把這兩個引數忽略。和大家分享一下SPI通訊、時鐘極性以及時鐘相位的基礎知識。
SPI匯流排的英文全稱為S“Serial Periphral Interface”,意思是序列外設介面,由於通訊距離比較短,適用於晶片級別的短距離通訊。SPI的通訊分為主機和從機,屬於高速全雙工的匯流排通訊方式,SPI有四根線,分別為:
MISO:主裝置輸入與從裝置輸出線;
MOSI:主裝置輸出與從裝置輸入線;
SCK:串行同步時鐘訊號線;
SS:從機片選訊號線,也用CS來表示。
SPI匯流排的主機和從機的系統連線圖如下圖所示。
SPI的時鐘極性用CPOL來表示。SPI匯流排通訊的時基基準是時鐘訊號線SCK,SCK既有高電平,又有低電平,SPI的時鐘極性用來表示時鐘訊號在空閒時是高電平還是低電平。情況說明如下:
當CPOL=1:SCK訊號線在空閒時為高電平;
時鐘的相位用CPHA來表示,用來決定何時進行訊號取樣,在第一個跳變沿還是第二個跳變沿,至於是上升沿還是下降沿則由CPOL相位極性來表示。下面分兩種情況來介紹。如下圖所示。
上圖表示CPHA=1時的情形,即在SCK時鐘的第二個邊沿進行資料的取樣,至於是上升沿取樣還是下降沿取樣取決於時鐘極性CPOL的值。如果CPHA=1,CPOL=1,則在SCK時鐘的第二個邊沿為上升沿時進行資料取樣。如果CPHA=1,CPOL=0,則在SCK時鐘的第二個邊沿為下降沿時進行資料取樣。
CPHA=0時的情形如下圖所示。
上圖表示CPHA=0時的情形,即在SCK時鐘的第一個邊沿進行資料的取樣,至於是上升沿取樣還是下降沿取樣取決於時鐘極性CPOL的值。如果CPHA=0,CPOL=1,則在SCK時鐘的第一個邊沿為下降沿時進行資料取樣。如果CPHA=0,CPOL=0,則在SCK時鐘的第一個邊沿為上升沿時進行資料取樣。
總結一下,SPI的時鐘極性決定了SCK在空閒時是低電平還是高電平;而相位極性則決定了在第一個邊沿還是第二個邊沿進行資料取樣。SPI的時鐘極性CPOL和相位極性CPHA是相互影響相互決定的,以上概念可能很繞口難以理解,但是對SPI進行一次程式設計之後,所有的內容都好理解了。
SPI是微控制器外設電路中常用的一種通訊方式,適用於近距離通訊,通常用於晶片間的通訊,有四根線。在SPI通訊中匯流排時鐘和匯流排相位也兩個比較重要的概念,一般在使用SPI通訊時都使用預設設定,所以容易把這兩個引數忽略。和大家分享一下SPI通訊、時鐘極性以及時鐘相位的基礎知識。
什麼是SPI通訊匯流排SPI匯流排的英文全稱為S“Serial Periphral Interface”,意思是序列外設介面,由於通訊距離比較短,適用於晶片級別的短距離通訊。SPI的通訊分為主機和從機,屬於高速全雙工的匯流排通訊方式,SPI有四根線,分別為:
MISO:主裝置輸入與從裝置輸出線;
MOSI:主裝置輸出與從裝置輸入線;
SCK:串行同步時鐘訊號線;
SS:從機片選訊號線,也用CS來表示。
SPI匯流排的主機和從機的系統連線圖如下圖所示。
SPI匯流排時鐘的極性含義解釋SPI的時鐘極性用CPOL來表示。SPI匯流排通訊的時基基準是時鐘訊號線SCK,SCK既有高電平,又有低電平,SPI的時鐘極性用來表示時鐘訊號在空閒時是高電平還是低電平。情況說明如下:
當CPOL=0:SCK訊號線在空閒時為低電平;當CPOL=1:SCK訊號線在空閒時為高電平;
SPI匯流排時鐘的相位含義解釋時鐘的相位用CPHA來表示,用來決定何時進行訊號取樣,在第一個跳變沿還是第二個跳變沿,至於是上升沿還是下降沿則由CPOL相位極性來表示。下面分兩種情況來介紹。如下圖所示。
上圖表示CPHA=1時的情形,即在SCK時鐘的第二個邊沿進行資料的取樣,至於是上升沿取樣還是下降沿取樣取決於時鐘極性CPOL的值。如果CPHA=1,CPOL=1,則在SCK時鐘的第二個邊沿為上升沿時進行資料取樣。如果CPHA=1,CPOL=0,則在SCK時鐘的第二個邊沿為下降沿時進行資料取樣。
CPHA=0時的情形如下圖所示。
上圖表示CPHA=0時的情形,即在SCK時鐘的第一個邊沿進行資料的取樣,至於是上升沿取樣還是下降沿取樣取決於時鐘極性CPOL的值。如果CPHA=0,CPOL=1,則在SCK時鐘的第一個邊沿為下降沿時進行資料取樣。如果CPHA=0,CPOL=0,則在SCK時鐘的第一個邊沿為上升沿時進行資料取樣。
總結一下,SPI的時鐘極性決定了SCK在空閒時是低電平還是高電平;而相位極性則決定了在第一個邊沿還是第二個邊沿進行資料取樣。SPI的時鐘極性CPOL和相位極性CPHA是相互影響相互決定的,以上概念可能很繞口難以理解,但是對SPI進行一次程式設計之後,所有的內容都好理解了。