SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是串列外圍裝置介面。SPI,是一種高速的,全雙工系統,同步的通訊匯流排,並且在晶片的管腳上只佔用四根線,節約了晶片的管腳,同時為PCB的布局上節省空間的,提供方便,正是出於這種簡單易用的特性,現在越來越多的晶片整合了這種通訊協定,比如P89LPC900.
SPI是一個環形匯流排結構,由ss(cs)、sck、sdi、sdo構成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行資料交換。
假設下面的8位寄存器裝的是待發送的資料10101010,上升沿發送、下降沿接收、高位先發送。
那麼第一個上升沿來的時候 資料將會是sdo=1;寄存器=0101010x。下降沿到來的時候,sdi上的電平將所存到寄存器中去,那麼這時寄存器=0101010sdi,這樣在8個時鐘脈衝以後,兩個寄存器的內容互相交換一次。這樣就完成裡一個spi時序。
例子:
假設主機和從機初始化就緒:並且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個刻度的資料情況示範一遍:假設上升沿發送資料
| 脈衝 |
主機sbuff |
從機sbuff |
sdi |
sdo |
| 0 |
10101010 |
01010101 |
0 |
0 |
| 1上 |
0101010x |
1010101x |
0 |
1 |
| 1下 |
01010100 |
10101011 |
0 |
1 |
| 2上 |
1010100x |
0101011x |
1 |
0 |
| 2下 |
10101001 |
01010110 |
1 |
0 |
| 3上 |
0101001x |
1010110x |
0 |
1 |
| 3下 |
01010010 |
10101101 |
0 |
1 |
| 4上 |
1010010x |
0101101x |
1 |
0 |
| 4下 |
10100101 |
01011010 |
1 |
0 |
| 5上 |
0100101x |
1011010x |
0 |
1 |
| 5下 |
01001010 |
10110101 |
0 |
1 |
| 6上 |
1001010x |
0110101x |
1 |
0 |
| 6下 |
10010101 |
01101010 |
1 |
0 |
| 7上 |
0010101x |
1101010x |
0 |
1 |
| 7下 |
00101010 |
11010101 |
0 |
1 |
| 8上 |
0101010x |
1010101x |
1 |
0 |
| 8下 |
01010101 |
10101010 |
1 |
0 |
這樣就完成了兩個寄存器8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對於主機而言的。其中ss引腳作為主機的時候,從機可以把它拉底被動選為從機,作為從機的是時候,可以作為片選腳用。根據以上分析,一個完整的傳送周期是16位,即兩個位元組,因為,首先主機要發送命令過去,然後從機根據主機的名準備資料,主機在下一個8位刻度才把資料讀回來