spi,uart,iic協議之間的對比:
spi和uart的區別,spi結構上可以實現一主多從進行通信,依靠時鐘進行傳輸數據的同步傳輸模式。
SPI和iic都是一主多從進行通信的,同樣需要依靠時鐘完成數據的同步 傳輸,iic選中從機進行通信依靠發送從機的地址,而spi選中
從機開始通信則是需要主機拉低對應外設的片選信號。
iic與spi的時鐘頻率都是由主機來控制的,Iic實際應用的傳輸速度是10k~400khz,spi的傳輸速遞最大是fclk/2;
但是關於傳輸速度的選擇實際上還是要依靠通信的外部設備決定。
帶控制器的設備uart,spi,can,iic等協議的通信中可以扮演主設備或者從設備的角色,是主設備還是從設備是相對的。
1,物理層
spi的物理連接方式:
SCK:串口時鐘,作爲主設備的輸出,從設備的輸入
MOSI:通常用作主機的輸出引腳(master out slave in),在從模式下接收數據。
MISO:通常用作主機的輸入引腳(master in slave out),在從模式下發送數據。
SSx:片選引腳,使能某個外部設備
在spi的連接圖中可以看出spi通信是全雙工的同步通信,但是在芯片手冊中也規定spi可以採用單工通信的方式僅發送或接收(雙線或單線);
注意,spi 在成功發送數據之前一定要拉低片選線。
SPI能夠以兩種配置工作於單工方式: (文章中對這種模式並不進行分析)
● 1條時鐘線和1條雙向數據線
● 1條時鐘線和1條數據線(雙工模式下只讀方式)
Stm32f103中spi的引腳接線情況:
2,協議層
在協議中可以選擇LSB先行或者MSB先行模式,只要主設備與從設備設置的模式一致即可。
片選信號的使能可以選擇配置爲軟件模式和硬件模式兩種,常用的是軟件模式。
設備可以選擇配置成主模式還是從模式,區別是配置成主模式的設備要配置時鐘。
時鐘的時序圖:
通過設置spi的時鐘時鐘相位和時鐘極型,可以得到四種時序模式。如下圖:
當cpol設置爲0,scl的空閒時的電平是低電平;
當cpol設置爲1,scl的空閒時的電平是高電平;
當cpha設置爲0,在時鐘的奇數邊沿進行數據採樣。
當cpha設置爲1,在時鐘的偶數邊沿進行數據採樣。
上述的協議圖中,常用的時序模式是mode0和mode3;
以mode0的時序爲例:
因爲cpol設置爲0,當scl爲低電平時保持空閒狀態,當cs片選線拉低,scl產生時鐘信號;
因爲cpha設置爲0,當時鍾scl線上產生第一個跳變沿電平(下降沿)時,觸發信號。
3,邏輯框圖
在邏輯框圖中可以看出,
要發送的數據經由地址與數據總線,發送到tx寄存器,轉移到發送移位寄存器通過MISO引腳,發送給外部設備。
接收的數據通過MOSI引腳轉移到接收移位寄存器,控制器通過總線讀取接收數據寄存器,讀出接收到的數據。
在主設備的模式下還需要配置時鐘的頻率,涉及到的相關的寄存器如上圖所示。
4,代碼
spi的初始:
通過spi讀寫一個字節:
注意:用spi協議從設備中讀取一個數據,是需要先向從設備中 發送一個數據,啓動時鐘。
具體其他代碼去看正點歷程或野火的歷程也是很好的選擇呢……因爲要去運動了,剩下的代碼就不貼了.....