SPI(Serial Peripheral Interface)串行外設接口
1 SPI時鍾信號的相位與極性
SPI接口由CPOL和CPHA設置四種不同傳輸格式的時序。其中:
CPOL(Clock Polarity)時鍾極性
CPHA(Clock Phase)時鍾相位
CPOL決定時鍾信號SCK的有效脈沖方式 0:表示空閑狀態時,SCK保持低電平;1:表示空閑狀態時,SCK保持高電平;
CPHA決定數據線MOSI、MISO什么時候輸出數據或什么時候采集數據 0:表示數據采樣從第一個時鍾邊沿開始;1:表示數據采樣從第二個時鍾邊沿開始。
一 (CP0L=0;CPHA=0):
此方式下,空閑狀態SCK處於低電平;數據采樣是在第1個邊沿,也就是SCK電平到高電平的跳變,由圖可以看出每一個上升沿到來之前數據已經准備好,所以上升沿進行數據采集;同時可以看出SCK從高電平向低電平跳變時進行數據發送,即下降沿進行數據發送。
二 (CPOL=1;CPHA=0):
此方式下,空閑狀態SCK處於高電平;數據采樣是在第1個邊沿,也就是SCK電平到低電平的跳變,由圖可以看出每一個下降沿到來之前數據已經准備好,所以下降沿進行數據采集;同時可以看出SCK從低電平向高電平跳變時進行數據發送,即上升沿進行數據發送。
三 (CPOL=0;CPHA=1):
此方式下,空閑狀態SCK處於低電平;數據發送是在第一個邊沿,也就是SCK電平到高電平的跳變,由圖可以看出每個上升沿到來之前數據還未准備好,所以上升沿進行數據發送;同時可以看出當下降沿到來時數據已經准備完成,可以進行數據采集,所以下降沿進行數據采集。
四 (CPOL=1;CPHA=1):
此方式下,空閑狀態SCK處於高電平;數據發送是在第一個邊沿,也就是SCK電平到低電平的跳變,由圖可以看出每一個下降沿到來之前數據還未准備好,所以下降沿進行數據發送;同時可以看出當上升沿到來時數據已經准備完成,可以進行數據采集,所以上升沿進行數據采集。
2 總結:數據與時鍾的相位關系表
CPOL/CPHA的設定 | 第一位數據的輸出 | 其它位的輸出 | 數據采樣 |
CPOL=0,CPHA=0 | 在第一個SCK上升沿之前 | SCK下降沿 | SCK上升沿 |
CPOL=1,CPHA=0 | 在第一個SCK下降沿之前 | SCK上升沿 | SCK下降沿 |
CPOL=0,CPHA=1 | 第一個SCK上升沿 | SCK上升沿 | SCK下降沿 |
CPOL=1,CPHA=1 | 第一個SCK下降沿 | SCK下降沿 | SCK上升沿 |
3 數據傳輸分析
主機移位寄存器中的一個數據通過MOSI傳到從機移位寄存器(即寫操作);同時,從機移位寄存器中的一個數據通過MISO傳到主機移位寄存器(即讀操作);讀寫操作同時進行。
1.如果主機只進行寫操作,主機只需忽略接收到的字節
2.如果主機要讀取從機的一個字節,必須先發送一個空字節0xFF,才能使從機中的數據移到主機。
注:所謂的空字節,SPI通信都是由主機發起的,想要從從機讀取數據,就必須給它提供時鍾,而SPI主機產生時鍾的方法,一般都是通過SPI_DR寄存器寫值,這里寫入0xFF表示要發送0xFF這個數據了,SPI就會產生SCK,輸出給從機,從而給從機提供時鍾。