SPI—讀寫串行 FLASH


SPI協議簡介
SPI 協議是由摩托羅拉公司提出的通訊協議(Serial Peripheral Interface),即串行外圍設
備接口,是一種高速全雙工的通信總線。它被廣泛地使用在 ADCLCD 等設備與 MCU 間,
要求通訊速率較高的場合。

 

 

標號1處, NSS信號線由高變低,是SPI通訊的起始信號。 NSS是每個從機各
自獨占的信號線,當從機檢在自己的NSS線檢測到起始信號后,就知道自己
被主機選中了,開始准備與主機通訊。
在圖中的標號6處, NSS信號由低變高,是SPI通訊的停止信號,表示本次通
訊結束,從機的選中狀態被取消。

 為什么MOSI,MISO信號線是兩根交叉呢?因為這樣可以在采樣時傳遞0或者1兩種選擇,而選擇切換時就在觸發情況下進行切換(交叉處),所以spi的通訊,到底屬於4種模式中的哪種模式很重要。

• CS(NSS)信號線在空閑狀態為低電平時, CPOL=0;空閑狀態為高電平時, CPOL=1
• CPHA=0MOSIMISO數據線的有效信號在SCK的奇數邊沿保持不變,數據信號將在SCK奇數邊沿時被采樣,在非采樣時刻, MOSIMISO的有效信號才發生切換。

• CS(NSS)信號線在空閑狀態為低電平時, CPOL=0;空閑狀態為高電平時, CPOL=1
• CPHA=1MOSIMISO數據線的有效信號在SCK的偶數邊沿保持不變,數據信號將在SCK偶數邊沿時被采樣,在非采樣時刻, MOSIMISO的有效信號才發生切換。 


 

 

 

 

 

 

 

 

 

 

編程要點:

 

上面的MISO,按照正常情況來說,這個引腳應該配置為輸入模式,但是在SPI引腳復用的時候,配置成輸出模式,也可以接收數據。

 

在復用模式的時候,配置成推挽或者開漏輸出,也可以對輸入數據寄存器訪問,這樣的復用情況下,可以輸出也可以輸入。但是要是你想配置成輸入模式也具有輸出功能,那就不切實際了,沒有配置輸出,肯定沒有輸出,沒有配置輸入,可我外部有輸入時,在復用情況下,是可以接收輸入的。

還要注意與MCU通信的SPI芯片手冊對於SPI模式的描述,有的直接給出了模式,有的支持好幾種,有的壓根就不說,要你自己去看手冊的時序圖並自己判斷。

比如:W25Q128 和ADS1256,都是SPI通信的,但是W25Q128的芯片手冊比較人性化:

直接給出了支持模式0和模式3,而且我們知道,通信速率取決於速度更慢的一方,W25Q128也給出了:

但是,TI的ADS1256可沒有那么人性化:

英文文檔沒有介紹關於4種模式的,只有通過時序,我們可以的知道是模式一。同樣,速率也不是以時鍾多少兆體現的,而是

SPS:每秒采樣次數,sample per second。

經過這次項目對ADS1256的調試,對spi認識更加清楚了。

 接收和發送函數在同一個函數中:

SPI是全雙工的,所以可以在發送的時候接收,也可以在接收的時候發送。但是,我們的通信都是先寫發送,再寫接收,我在想可不可以先寫接收,再寫發送呢?這樣去想為什么是很好的學習方式,但是經過思考之后,應該是不可行的,必須先寫發送再寫接收,因為你要通過SPI通信,作為SPI通信發起者,應該先發送,再接收。經測試,也確實如此。(這里是我的推論,如果沒有更改,證明測試之后如我預期)。



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM