1.SPI接口原理
串行外圍設備接口(Serial Peripheral Interface,SPI),用來在微控制器和外圍設備芯片之間提供一個低成本、易使用的接口(SPI有時候也被稱為4線接口)。這種接口可以用來連接存儲器(存儲數據)、A/D轉換器、D/A轉換器、實時時鐘日歷、LCD驅動器、傳感器等等。
SPI主要使用四個信號:主機輸出/從機輸入(MOSI)、主機輸入/從機輸出(MISO)、串行SCLK或SCK、外設芯片(CS)。有些處理器有SPI接口專用的芯片選擇,稱為從機選擇SS。
MOSI信號由主機產生,從機接受。在有些芯片上,MOSI只被簡單地標為串行輸入(SI),或者串行數據輸入SDI。MISO信號由從機產生,不過還是在主機的控制下產生的。在一些芯片上,MISO有時被稱為串行輸出(SO),或者串行數據輸出(SDO)。外設片選信號通常只是由主機的備用I/O引腳產生。
與標準的串行接口接口不同,SPI是一個同步協議接口,所有的傳輸都參照一個共同的時鐘,這個同步時鐘信號由主機產生,接收數據的外設使用時鐘來對串行比特流的接受進行同步化。可以將多個具有SPI接口的芯片連到主機的同一個SPI接口上,主機通過控制從設備的片選輸入引腳來選擇接受數據的從設備。
2.SPI傳輸過程
主機和外設都包含一個串行移位寄存器,主機通過它的SPI串行寄存器寫入一個字節來發起一次傳輸。寄存器是通過MOSI信號線將字節傳送給外設,外設也將自己的移位寄存器中的內容通過MISO信號線返回給主機。這樣,兩個移位寄存器中的內容就被交換了。外設的寫操作和讀操作是同步完成的,因此SPI成為一個很有效的協議。
如果只是進行寫操作,主機只需忽略收到的字節;反過來,如果主機要讀取外設的一個字節,就必須發送一個空字節來引發從機的傳輸。
當主機發送一個連續的數據流時,有些外設能夠進行多字節傳輸。許多擁有SPI接口的存儲器芯片都以這種方式工作。在這種傳輸方式下,SPI外設的芯片選擇端必須在整個傳輸過程中保持低電平。比如,存儲器芯片會希望在一個“寫“命令之后緊接著收到的是四個地址字節(起始地址),這樣,后面接受到的數據就可以存儲到該地址。一次傳輸可能會涉及千字節的移位或更多信息。
其他外設只需要一個單字節(比如一個發給A/D轉換器的命令),有些甚至還支持菊花鏈連接,菊花鏈連接三臺SPI設備,如下圖:
主機處理器從其SPI接口發送三個字節的數據。第一個字節發送給外設A,當第二個字節發送給外設A的時候,第一個字節已移出了A,而傳送給了B。同樣,主機想要從外設A讀取一個結果,它必須再發送一個3字節(空字節)的序列,這樣就可以把A中的數據移到B中,然后再移到C中,最后送回到主機。在這個過程中,主機還依次從B和C接受到字節。
注意,菊花鏈連接不一定適用于所有的SPI設備,特別是要求多字節傳輸的設備(比如存儲器芯片),有的外設芯片也不支持菊花鏈連接。
根據時鐘極性和時鐘相位的不同,SPI有四個工作模式:
時鐘極性CPOL有高、低兩極;時鐘極性為低電平時,空閑時時鐘(SCK)處于低電平,傳輸時跳到高電平;時鐘極性為高電平時,空閑時時鐘處于高電平,傳輸時跳到低電平。
時鐘相位CPHA有兩個:時鐘相位0和時鐘相位1。當時鐘相位為0時,時鐘周期的前一邊緣采集數據;當時鐘相位為1時,時鐘周期的后一邊緣采集數據。
評論
查看更多