1、SPI協議簡介
- 摩托羅拉提出的通訊協議,即外圍設備接口
- 是一種高速全雙工的通訊總線
- 被廣泛用於ADC、LCD等設備與MCU間要求通訊速率較高的場合
2、SPI物理層
SPI通訊使用3條總線及片選線,3條總線分別為SCK、MOSI、MISO,片選線為SS,它們的作用如下:
(1) SS ( Slave Select): 從設備選擇信號線,常稱為片選信號線,也稱為NSS、CS,以下用NSS表示。當有多個SPI從設備與SPI主機相連時,設備的其它信號線SCK、MOSI及MISO同時並聯到相同的SPI總線上,即無論有多少個從設備,都共同只使用這3條總線;而每個從設備都有獨立的這一- 條NSS信號線,本信號線獨占主機的-一個引腳,即有多少個從設備,就有多少條片選信號線。2C協議中通過設備地址來尋址、選中總線上的某個設備並與其進行通訊;而SPI協議中沒有設備地址,它使用NSS信號線來尋址,當主機要選擇從設備時,把該從設備的NSS信號線設置為低電平,該從設備即被選中,即片選有效,接着主機開始與被選中的從設備進行SPI 通訊。所以SPI通訊以NSS線置低電平為開始信號,以NSS線被拉高作為結束信號。
(2) SCK (Serial Clock):時鍾信號線,用於通訊數據同步。它由通訊主機產生,決定了通訊的速率,不同的設備支持的最高時鍾頻率不一樣,如STM32的SPI時鍾頻率最大為fopc/2,兩個設備之間通訊時,通訊速率受限於低速設備。
(3) MOSI (Master Output, Slave Input):主設備輸出/從設備輸入引腳。主機的數據從這條信號線輸出,從機由這條信號線讀入主機發送的數據,即這條線上數據的方向為主機到從機。
(4) MISO(Master Input,Slave Output):主設備輸入/從設備輸出引腳。主機從這條信號線讀入數據,從機的數據由這條信號線輸出到主機,即在這條線上數據的方向為從機到主機。
3、SPI協議層
這是一個主機的通訊時序。 NSS、 SCK、 MOSI 信號都由主機控制產生,而 MISO 的信號由從機產生,主機通過該信號線讀取從機的數據。 MOSI 與 MISO 的信號只在 NSS 為低電平的時候才有效,在 SCK 的每個時鍾周期 MOSI 和 MISO 傳輸一位數據。
4、SPI的四種通訊模式
5、SPI架構剖析
SPI 的 MOSI 及 MISO 都連接到數據移位寄存器上,數據移位寄存器的數據來源及目標接收、發送緩沖區以及 MISO、 MOSI 線。當向外發送數據的時候,數據移位寄存器以“發送緩沖區”為數據源,把數據一位一位地通過數據線發送出去;當從外部接收數據的時候,數據移位寄存器把數據線采樣到的數據一位一位地存儲到“接收緩沖區”中。通過寫 SPI的“數據寄存器 DR”把數據填充到發送 F 緩沖區中,通訊讀“數據寄存器 DR”,可以獲 取接收緩沖區中的內容。其中數據幀長度可以通過“控制寄存器 CR1”的“DFF 位”配置成 8 位及 16 位模式;配置“LSBFIRST 位”可選擇 MSB 先行還是 LSB 先行。
6、Flash的硬件設計
FLASH 芯片(型號: W25Q64)是一種使用 SPI 通訊協議的 NOR FLASH存 儲 器 ,
- CS/CLK/DIO/DO 引 腳 分 別 連 接 到 了 STM32 對 應 的 SPI 引 腳NSS/SCK/MOSI/MISO 上
- STM32 的 NSS 引腳是一個普通的 GPIO,不是 SPI 的專用NSS 引腳,所以程序中我們要使用軟件控制的方式。
- WP 引腳可控制寫保護功能,當該引腳為低電平時,禁止寫入數據。我們直接接電源,不使用寫保護功能。
- HOLD 引腳可用於暫停通訊,該引腳為低電平時,通訊暫停,數據輸出引腳輸出高阻抗狀態,時鍾和數據輸入引腳無效。我們直接接電源,不使用通訊暫停功能
7、軟件設計
(1)初始化通訊使用的目標引腳及端口時鍾; (2)使能SPI外設的時鍾; (3)配置SPI外設的模式、地址、速率等參數並使能SPI外設; (4)編寫基本SPI按字節收發的函數; (5)編寫對FLASH擦除及讀寫操作的的函數; (6) 編寫測試程序,對讀寫數據進行校驗。