spi匯流排協議是一種序列外圍裝置介面,是motorola公司推出的一種三線同步序列接**術,spi是一種高速的、全雙工、同步的通訊匯流排,並且在晶元上的物理介面只需要占用4根線,節約了晶元的管腳。
spi是乙個環形匯流排結構,由sck、cs、mosi、miso構成,時序也很簡單,主要是在sck的控制下,兩個雙向移位暫存器進行資料交換。
spi主要特點有:
可以同時傳送和接收序列資料;
可以當作主機或從機工作;
提供頻率可程式設計時鐘;
傳送結束中斷標誌;
寫衝突保護;
匯流排競爭保護。
物理介面含義:
sck:時鐘線,是由主機產生,主從機根據時鐘傳輸資料;
cs:片選線,多個從機,主機選擇哪乙個從機通訊,從機相對應的片選拉低;
mosi:主機輸出從機輸入線;
miso:主機輸入從機輸出線。
spi通訊主要是在時鐘控制下,上公升沿傳送資料,下降沿接收資料,高位先傳送。
假設主機和從機初始化就緒,並且主機的sbuff=0xaa(10101010),從機的sbuff=0x55(01010101),如表1.1將分步對spi的8個時鐘進行分析(假設上公升沿傳送資料)。
表1.1
這樣就完成了兩個暫存器8位的交換,上面的0-1表示上公升沿,1-0表示下降沿,sdi以及sdo是相對主機而言的,根據以上分析,乙個完整的傳送週期是16位,即兩個位元組,因為首先主機要傳送命令過去,然後從機根據主機的命令準備資料,主機在下乙個8位時鐘週期才把資料讀回來。
spi匯流排有四種工作方式(spi0,spi1,spi2,spi3),其中使用的最廣泛的是spi0和spi3方式,spi模組為了和外設進行資料交換,根據外設工作要求,其輸出序列同步時鐘極性和相位可以進行配置,時鐘極性(cpol)對傳輸協議沒有重大影響,若cpol=0,序列同步時鐘的空閒狀態為低電平,若cpol=1,序列同步時鐘的空閒狀態為高電平。時鐘相位(cpha)能夠配置用於選擇兩種不同的傳輸協議之一進行資料傳輸。若cpha=0,在序列同步時鐘的第乙個跳變沿(上公升沿或下降沿)資料被取樣,若cpha=1,在序列同步時鐘的第二個跳變沿資料被取樣,spi主模組和與之通訊的外設時鐘相位和極性應該一致。
spi介面有四種不同的資料傳輸時序,取決於cpol和cphl這兩個的組合,圖1.1中表現了這四種時序,時序與cpol、cphl的關係也可以從圖中看出。
圖1.1
spi內部結構見圖1.2
圖1.2
spi傳輸時序:
spi介面在內部硬體實際上就是兩個簡單的移位暫存器,傳輸的資料為8位,在主器件產生的從器件使能訊號和移位脈衝下,按位傳輸,高位在前,低位在後,如圖1.3所示,在sclk的下降沿上資料改變,上公升沿一位資料被存入移位暫存器。
圖1.3
spi介面沒有指定的流控制,沒有應答機制確認是否接收到資料。
例程1:硬體spi配置
void spi1_config(void)
uint8_t spi1_sendread_data(uint8_t data)
例程2:lcd屏模擬spi配置
/*******
pb0--->t_sck
pb1--->t_pen
pb2--->t_miso
pf11-->t_mosi
pc13-->t_cs
*******/
void touch_init(void)
uint8_t spi_read_write(uint8_t senddat)
else
t_mosi_ttl(0);
t_sck_ttl(1);
delay_nus(1);
rdat <<=1;
if(t_miso_read)
delay_nus(1);
} return rdat;
}
STM32之間SPI通訊
這幾天實驗室比較忙,所以部落格這邊停了一下,繼續吧。繼串列埠中斷後,大家可以嘗試微控制器間串列埠通訊,這裡就不再多贅述。串列埠完了之後,我接著學的就是spi通訊了,作為hello moto公司推出的這種4線全雙工通訊,很節約pcb布局空間,但缺點就是沒有指定的流控制,沒有應答機制來確定訊號收到與否,...
STM32 快速上手SPI
基本的部分前文 stm32 spi 已經介紹過了,這裡只記怎麼用。stm32f103zet6的三個spi的引腳分別為 spi1在apb1時鐘下,spi2和spi3在apb2時鐘下。void spi i2s deinit spi typedef spix void spi init spi typed...
stm32之spi之NSS管腳訊號
nss管腳及我們熟知的片選訊號,作為主裝置nss管腳為高電平,從裝置nss管腳為低電平。當nss管腳為低電平時,該spi裝置被選中,可以和主裝置進行通訊。在stm32中,每個spi控制器的nss訊號引腳都具有兩種功能,即輸入和輸出。所謂的輸入就是nss管腳的訊號給自己。所謂的輸出就是將nss的訊號送...