注:本文針對xilinx的zynqMP系列芯片講解SPI驅動
一、引言
SPI接口是Motorola 首先提出的全雙工三線同步串行外圍接口,採用主從模式(Master Slave)架構。支持多slave模式應用,一般僅支持單Master。時鐘由Master控制,在時鐘移位脈衝下,數據按位傳輸,高位在前,低位在後(MSB first)。SPI接口有2根單向數據線,爲全雙工通信,目前應用中的數據速率可達幾Mbps的水平。
二、SPI總線結構
三、SPI接口
SPI接口共有4根信號線,分別是:設備選擇線、時鐘線、串行輸出數據線、串行輸入數據線。
MOSI |
主器件數據輸出,從器件數據輸入 |
MISO |
主器件數據輸入,從器件數據輸出 |
SCLK |
時鐘信號,由主器件產生 |
SS |
從器件使能信號,由主器件控制 |
四、SPI工作原理
SPI接口在內部硬件實際上是兩個簡單的移位寄存器,傳輸的數據爲8位,在主器件產生的從器件使能信號和移位脈衝下,按位傳輸,高位在前,低位在後。如下圖所示,在SCLK的下降沿上數據改變,上升沿一位數據被存入移位寄存器。
在一個SPI時鐘週期內,會完成如下操作:
- 主機通過MOSI線發送1位數據,從機通過該線讀取這1位數據;
- 從機通過MISO線發送1位數據,主機通過該線讀取這1位數據。這是通過移位寄存器來實現的。如下圖所示,主機和從機各有一個移位寄存器,且二者連接成環。隨着時鐘脈衝,數據按照從高位到低位的方式依次移出主機寄存器和從機寄存器,並且依次移入從機寄存器和主機寄存器。當寄存器中的內容全部移出時,相當於完成了兩個寄存器內容的交換。
五、SPI接口的優缺點
- 優點:
- 支持全雙工操作;
- 操作簡單;
- 數據傳輸速率較高(相對的)。
- 缺點:
- 多個spi設備需要佔用主機較多的管腳(每個從機都需要一根片選線);
- 只支持單個主機;
- 沒有指定的流控制,沒有應答機制確認是否接收到數據。
六、SPI工作模式
SPI有四種工作模式,具體由CPOL(Clock Polarity 時鐘極性),CPHA(Clock Phase時鐘相位)決定
MODE0 | CPOL=0,CPHA=0 |
MODE1 | CPOL=0,CPHA=1 |
MODE2 | CPOL=1,CPHA=0 |
MODE3 | CPOL=1,CPHA=1 |
- 當CPOL爲0時,空閒的時候SCLK電平是低電平;
- 當CPOL爲1時,空閒的時候SCLK電平是高電平;
- 當CPHA爲0時,採集數據發生在時鐘週期的前邊緣(第一個邊緣,可能是上升緣也可能是下降緣,由CPOL決定),這同時意味着輸出數據發生在後邊緣;
- 當CPHA爲1時,採集數據發生在時鐘週期的後邊緣(第二個邊緣,可能是上升緣也可能是下降緣,由CPOL決定),這同時意味着輸出數據發生在前邊緣;
摘抄一張網上的圖:
我們編寫spi接口的設備驅動程序的時候,最需要關心的就是spi控制器的部分是spi設備採用的是那種模式,確定模式後,我們得將spi控制器配置成一樣的模式才能正常工作。所以說如何選擇SPI控制器的工作模式,是根據從設備的工作模式來定的,一般從設備是FLASH、eeprom之類的存儲介質,其工作模式是在出廠時就確定的,所以只能通過修改SPI控制器的工作模式,來適應從設備,從而實現SPI通信流程。
二、zynqMP芯片的SPI控制器