《嵌入式系統原理與應用》 |(十一)SPI知識梳理

 

系列索引:《嵌入式系統原理與應用》 | 嵌入式系統 重點知識梳理


 

目錄

 

SPI的物理層接口及互聯

SPI的時鐘極性及時鐘相位

SPI的數據格式及傳輸速率

STM32中SPI的特性

SPI的工作模式、配置步驟及數據收發過程

SPI的狀態標誌和中斷(兩個重要的:TXE和RXNE)

SPI的常用庫函數(初始化設置、收發數據)


SPI的物理層接口及互聯

SPI(Serial Peripheral Interface,串行外圍設備接口),是由摩托羅拉公司提出的一種高速全雙工串行同步通信接口,首先出現在其M68HC系列處理器中。由於其傳輸速度快、簡單方便成本低

物理層接口

 

主設備和從設備通信之間,主設備片選信號拉高,從設備拉低

互聯

多個並聯,主微控制器花費GPIO引腳作爲片選信號

 

 

SPI的時鐘極性及時鐘相位

SPI時序,與其時鐘極性和時鐘相位有關。

時鐘極性  (CPOL)

時鐘線和時鐘極性同高同低

時鐘相位(CPHA:

0奇數,1偶數

 

SPI的數據格式及傳輸速率

SPI數據格式

SPI數據傳輸也是以幀爲單位,通常可以選擇8位或16位數據幀格式

SPI數據,可以由高位到低位(即MSB在前LSB在後),也可以由低位到高位(即LSB在前MSB在後)依次傳輸。到底採用什麼數據格式,由具體SPI設備指定。

 根據不同的SPI時序(時鐘極性和時鐘相位)和數據格式,SPI數據傳輸實例如下:

SPI時序爲CPOL=0CPHA=0且數據格式爲8位數據幀、低位在前高位在後傳輸:

SPI時序爲CPOL=0CPHA=1且數據格式爲8位數據幀、高位在前低位在後傳輸

SPI時序爲CPOL=1CPHA=0且數據格式爲8位數據幀、低位在前高位在後傳輸

SPI時序爲CPOL=1CPHA=1且數據格式爲8位數據幀、高位在前低位在後傳輸

(UART低位在前,IIC高位在前)

SPI傳輸速率

    SPI具有較高的傳輸速率,它的時鐘SCK最高可達18MHz

 

STM32中SPI的特性

通常,它被配置爲主模式,併爲各個從設備提供通信時鐘SCK。

 

 

SPI的工作模式、配置步驟及數據收發過程

工作模式

主模式和從模式,主模式和從模式下均可由軟件或硬件進行NSS管理,動態改變主∕從操作模式;

收發過程

在STM32F103微控制器使用SPI發送數據前,程序員完成SPI物理層(如引腳)和協議層(時鐘極性、時鐘相位、數據格式和傳輸速率等)的相關配置,並將數據並行地寫入發送緩衝區,進行SPI數據的收發。

在接收時,接收到的數據被存放在一個內部的接收緩衝器中;在發送時,在被髮送之前,數據將首先被存放在一個內部的發送緩衝器中。對SPI_DR寄存器的讀操作,將返回接收緩衝器的內容;寫入SPI_DR寄存器的數據將被寫入發送緩衝器中。   

從模式下開始傳輸 

 ─ 當從設備接收到時鐘信號並且第一個數據位出現在它的MOSI時,數據傳輸開始,隨後的數據位依次移動進入移位寄存器;

 

─ 與此同時,在傳輸第一個數據位時,發送緩衝器中的數據被並行地傳送到8位的移位寄存器,隨後被串行地發送到MISO引腳上。軟件必須保證在SPI主設備開始數據傳輸之前在發送寄存器中寫入要發送的數據。   

主模式下開始傳輸 

─ 當寫入數據到SPI_DR寄存器(發送緩衝器)後,傳輸開始;

─ 在傳送第一位數據的同時,數據被並行地從發送緩衝器傳送到8位的移位寄存器中,然後按順序被串行地移位送到MOSI引腳上;

─ 與此同時,在MISO引腳上接收到的數據,按順序被串行地移位進入8位的移位寄存器中,然後被並行地傳送到SPI_DR寄存器(接收緩衝器)中。   

 

SPI的狀態標誌和中斷(兩個重要的:TXE和RXNE)

狀態標誌:

 

中斷:

不同的SPI,有着不同的中斷向量。而對於同一個SPI,它的各種中斷事件都被連接到同一個中斷向量。

 

SPI的常用庫函數(初始化設置、收發數據)

 

SPI_I2S_DeInit:將SPIx的寄存器恢復爲復位啓動時的默認值。

SPI_Init:根據SPI_InitStruct中指定的參數初始化指定SPI的寄存器。

SPI_Cmd:使能或禁止指定SPI。

SPI_I2S_SendData:通過SPI/I2S發送單個數據。

SPI_I2S_ReceiveData:返回指定SPI/I2S最近接收到的數據。

SPI_I2S_GetFlagStatus:查詢指定SPI/I2S的標誌位狀態。

SPI_I2S_ClearFlag:清除指定SPI/I2S的標誌位(SPI_FLAG_CRCERR)。

SPI_I2S_ITConfig:使能或禁止指定的SPI/I2S中斷。

SPI_I2S_GetITStatus:查詢指定的SPI/I2S中斷是否發生。

SPI_I2S_ClearITPendingBit:清除指定的SPI/I2S中斷掛起位(SPI_IT_CRCERR)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章