通信接口部分有介紹SPI:【STM32】USART串口協議&串口外設-學習筆記-CSDN博客?
SPI通信協議
SPI通信
- SPI(Serial Peripheral Interface)是由Motorola公司開發的一種通用數據總線
- 四根通信線:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)
- 同步,全雙工
- 支持總線掛載多設備(一主多從)
I2C通信和SPI通信區別:?
I2C 通信優點:使用兩根線(SCL 時鐘線和 SDA 數據線),半雙工通信,布線簡單,占用引腳少,支持多主機多從機模式,具備總線仲裁機制,適用于近距離低速設備間通信。缺點:數據傳輸速率相對較低,一般標準模式下為 100kbps,快速模式下為 400kbps,高速模式下為 3.4Mbps? ,每次通信需要發送起始、停止信號和應答信號,開銷較大,通信效率不高。
SPI 通信優點:數據傳輸速率高,可達幾十 Mbps ,適合高速數據傳輸場景,全雙工通信,主機和從機可同時發送和接收數據,操作簡單,只需 4 根線(SCK 時鐘線、MOSI 主機輸出從機輸入線、MISO 主機輸入從機輸出線、SS 從機選擇線)。缺點:布線復雜,占用引腳較多,只支持單主機多從機模式,沒有總線仲裁機制,若多個主機同時試圖控制總線,可能導致數據沖突,不適用于多主機環境。?
硬件電路?
- 所有SPI設備的SCK、MOSI、MISO分別連在一起
- 主機另外引出多條SS控制線,分別接到各從機的SS引腳
- 輸出引腳配置為推挽輸出,輸入引腳配置為浮空或上拉輸入?
推挽輸出:高低電平均有很強的驅動能力,這將使得SPI的下降沿和上升沿都非常的迅速。得益于推挽輸出的強驅動能力,SPI信號變化快,自然就能達到更高的傳輸速度?。
SPI 沖突點:就是MISO引腳,主機一個輸入,三個從機全是輸出,如果三個從機都是推挽輸出,肯定會產生沖突,所以SPI協議有規定,當SS從機引腳為高電平,就是未被選中時,它的MISO引腳必須切換為高阻態,高阻態就是引腳斷開,不輸出任何電平。這樣就可以防止一條線有多個輸出而導致的沖突問題。當SS為低電平時,MISO才允許變為推挽輸出。?
移位示意圖?
SPI基本收發電路:?
?只想發送不想接收?
仍然調用交換字節的時序,發送同時接收,只是接收到的數據不看他就可以了。
?只想接收不想發送?
同理,仍然調用交換字節的時序,發送同時接收,只是我們會隨便發送有一個數據,來把從機的數據置換過來就可以。一般統一發0x00或者0xFF。
SPI的通信的基礎就是,交換一個字節,?有了交換一個一個字節,就可以實現發送一個字節,接收一個字節,發送并同時接收一個字節的三種功能。
?SPI時序基本單元
- 起始條件:SS從高電平切換到低電平
- 終止條件:SS從低電平切換到高電平?
?模式0用的最多,模式0和模式3都是上升沿采樣輸入;模式1和模式2都是下降沿采樣輸入;
?SPI時序
以本節使用的芯片W25Q64時序進行講解,SPI不像I2C規定那樣,有效數據流的第一個字節是寄存器地址之后依次是讀寫的數據,使用的是讀寫寄存器的模型,在SPI中通常使用的是指令碼加讀寫數據的模型,第一個交換發送給從機的數據叫指令碼。在SPI從機芯片手冊里,都會定義好指令集,什么指令對應什么功能,什么指令后面得跟上什么數據。
發送指令
向SS指定的設備,發送指令(0x06)在W25Q64芯片里0x06表示寫使能?
?模式0
整個時序的功能就是,發送指令,指令碼0x06,從機一比對定義好的指令集,發現是寫使能指令,那從機就控制硬件進行寫使能?。
指定地址寫
- 向SS指定的設備,發送寫指令(0x02)
- 隨后在指定地址(Address[23:0])下,寫入指定數據(Data)
指定地址讀
向SS指定的設備,發送讀指令(0x03)
?隨后在指定地址(Address[23:0])下,讀取從機數據(Data)
?
?W25Q64Flash存儲器芯片
?W25Q64簡介
- W25Qxx系列是一種低成本、小型化、使用簡單的非易失性存儲器,常應用于數據存儲、字庫存儲、固件程序存儲等場景
- 存儲介質:Nor Flash(閃存)Nor Flash 是一種非易失性閃存存儲介質,在嵌入式系統等領域應用廣泛。
- 時鐘頻率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)
- 存儲容量(24位地址):分三個字節?
基本參數
- 存儲容量:W25Q64 的存儲容量為 64Mb(兆比特),也就是 8MB(兆字節)。它被劃分為 128 個塊(Block),每個塊大小為 64KB;每個塊又由 16 個扇區(Sector)組成,每個扇區大小為 4KB。
- 工作電壓:其工作電壓范圍為 2.7V - 3.6V,這使得它能適配多種電源系統。不能直接接5V電壓。
- 通信接口:采用 SPI(Serial Peripheral Interface)通信接口,具有引腳少、通信速率高的特點,只需 SCK(時鐘線)、MOSI(主出從入數據線)、MISO(主入從出數據線)和 CS(片選線)這幾根線就能和主控芯片進行通信。
性能特點
- 讀寫速度快:最高時鐘頻率可達 80MHz,能實現快速的數據讀寫操作,提升系統的數據處理效率。
- 低功耗:在待機和掉電模式下功耗極低,適合對功耗有嚴格要求的應用場景,如電池供電的設備。
- 擦寫次數多:扇區擦除次數可達 10 萬次,數據保存時間長達 20 年,保證了數據的長期可靠性和穩定性。
應用場景
- 消費電子:像智能手機、平板電腦、數碼相機等設備,用于存儲系統固件、用戶數據、圖像和視頻等信息。
- 工業控制:在工業自動化設備、儀器儀表中,可存儲程序代碼、校準數據和運行記錄等。
- 汽車電子:應用于汽車的娛樂系統、儀表盤、導航系統等,存儲地圖數據、音頻文件和系統配置信息。
操作方式
對 W25Q64 進行操作,一般要先通過 SPI 接口發送對應的命令。例如,發送寫使能命令后,才能進行寫操作;擦除操作也需要先發送相應的擦除命令。而且,在進行寫操作前,通常要先對相應的扇區進行擦除。
拓展:Nor Flash 和 NAND Flash的區別
Nor Flash 和 NAND Flash 是兩種常見的閃存技術,它們在多個方面存在明顯區別:
存儲結構
- Nor Flash:其存儲單元結構類似隨機存儲器(RAM),各個存儲單元是獨立的,能夠直接對單個存儲單元進行隨機訪問,這使得它具備字節級別的隨機讀寫能力。
- NAND Flash:存儲單元以頁(Page)和塊(Block)的形式組織。數據的讀寫通常以頁為基本單位,頁的大小一般在幾百字節到幾 KB 不等;而擦除操作則以塊為單位,塊由多個頁組成。
讀寫性能
- 讀取速度:Nor Flash 的讀取速度較快,特別是隨機讀取性能出色,它可以像內存一樣直接執行代碼(XIP),適合頻繁隨機讀取少量數據的場景,如存儲程序代碼。NAND Flash 順序讀取速度也較快,但隨機讀取性能相對較差,不太適合隨機讀取小數據量的操作。
- 寫入和擦除速度:Nor Flash 的寫入和擦除速度較慢,尤其是擦除操作,需要較長時間,而且擦除次數有限。NAND Flash 的寫入和擦除速度相對較快,不過在寫入數據前也需要先進行塊擦除操作。
可靠性
- 位反轉:NAND Flash 更容易出現位反轉現象,即存儲的數據在沒有進行寫入操作的情況下,某些位的值發生了改變。這是由于 NAND Flash 的存儲密度高,相鄰存儲單元之間的干擾較大。因此,NAND Flash 通常需要使用糾錯碼(ECC)來檢測和糾正數據錯誤。Nor Flash 出現位反轉的概率相對較低。
- 擦寫次數:Nor Flash 的擦寫次數一般在 10 萬次左右,而 NAND Flash 根據不同的類型,擦寫次數有所差異,普通的 SLC(單電平單元)NAND Flash 擦寫次數可達 10 萬 - 100 萬次,MLC(多電平單元)和 TLC(三層單元)的擦寫次數相對較少。
成本
- 單位容量成本:NAND Flash 的制造成本較低,單位容量的價格相對 Nor Flash 更便宜,因此在大容量存儲應用中具有明顯的成本優勢。Nor Flash 由于制造工藝和結構的原因,成本較高,特別是大容量的 Nor Flash 價格更為昂貴。
- 系統成本:使用 Nor Flash 時,由于其可以直接執行代碼,不需要額外的內存來加載代碼,在一定程度上可以降低系統的整體成本。而使用 NAND Flash 時,通常需要額外的控制器和糾錯電路來保證數據的可靠性,這會增加系統的成本和復雜度。
應用場景
- Nor Flash:主要用于存儲代碼和少量的關鍵數據,如嵌入式系統的啟動代碼、BIOS、汽車電子中的發動機控制單元程序等,適用于對隨機讀取性能和數據可靠性要求較高的場景。
- NAND Flash:廣泛應用于大容量數據存儲領域,如固態硬盤(SSD)、USB 閃存驅動器、存儲卡、智能手機和平板電腦的內置存儲等,適合順序讀寫大量數據的場景。
常見的非易失性存儲器和易失性存儲器:?
非易失性存儲器
- 閃存(Flash Memory):基于閃存芯片的存儲介質,如常見的 U 盤、固態硬盤(SSD)等。具有掉電后數據不丟失、可多次擦寫、體積小、重量輕、抗震性強等優點,廣泛應用于移動設備、計算機存儲等領域。
- 只讀存儲器(ROM):通常用于存儲計算機系統的啟動程序、BIOS 等重要信息。在制造過程中就將數據固化在芯片中,只能讀取,不能寫入或修改,具有很高的穩定性和可靠性。
- 電可擦除可編程只讀存儲器(EEPROM):可以通過電信號進行擦除和編程的只讀存儲器。與閃存類似,但擦寫操作更加靈活,通常用于存儲一些需要頻繁修改但掉電后又需要保存的數據,如設備的配置信息等。不過,EEPROM 的擦寫次數有限,且寫入速度相對較慢。
- 鐵電存儲器(FRAM):利用鐵電材料的極化特性來存儲數據。具有高速讀寫、低功耗、抗輻射等優點,且擦寫次數幾乎無限,但成本較高,容量相對較小,目前在一些特定領域,如航空航天、工業控制等有一定應用。
易失性存儲器
- 隨機存取存儲器(RAM):計算機中最常用的易失性存儲器,用于暫時存儲正在運行的程序和數據。根據技術和性能的不同,可分為靜態隨機存取存儲器(SRAM)和動態隨機存取存儲器(DRAM)。
- SRAM:速度快,但成本高、集成度低,常用于高速緩存(Cache)等對速度要求極高的場景。
- DRAM:成本低、集成度高,但速度相對較慢,是計算機內存的主要組成部分,用于存儲正在運行的程序和數據。計算機在運行過程中,需要不斷地對 DRAM 中的數據進行刷新操作,以防止數據丟失。
- 高速緩沖存儲器(Cache):位于 CPU 和主存之間的一種高速小容量存儲器,用于存儲 CPU 近期可能會頻繁訪問的數據和指令。Cache 通常采用 SRAM 實現,速度比主存快得多,能有效提高 CPU 訪問數據的速度,減少 CPU 等待數據從主存傳輸的時間,從而提高整個計算機系統的性能。
硬件電路??
?W25Q64框圖
兩個地址鎖存和計數器解釋
框圖重點部分:四點?
Flash操作注意事項?
寫入操作時:
- 寫入操作前,必須先進行寫使能
- 每個數據位只能由1改寫為0,不能由0改寫為1(這個意思就是Flash并沒有像RAM那樣的直接完全覆蓋的改寫能力,而是受到這個規則限制)比如:在某個存儲單元存儲了0xAA,寫入新的0x55,那數據并不會覆蓋為0x55,而是受到限制變為0x00,為了彌補這個缺陷,就用到了擦除的規定
- 寫入數據前必須先擦除,擦除后,所有數據位變為1,擦除有專門的擦除電路,我們只需要發送對應的指令,擦除后,所有的數據為都變為1,也就是16進制的0xFF,這樣就可以彌補第二條的限制。
- 擦除必須按最小擦除單元進行,有最小擦除單元限制,不能指定某一個字節擦除,要一大片的擦除,可以按片擦除,按快擦除或者按扇形擦除,最小的單元就是一個扇區擦除。
- 連續寫入多字節時,最多寫入一頁的數據,超過頁尾位置的數據,會回到頁首覆蓋寫入(意思就是寫入的時候,一次性不能寫太多,一個寫入時序最多寫入一頁的數據,也就是256字節)
- 寫入操作結束后,芯片進入忙狀態,不響應新的讀寫操作,使用讀狀態寄存器指令,看BUSY位是否為0,BUSY為0就是不忙狀態
讀取操作時:
- 直接調用讀取時序,無需使能,無需額外操作,沒有頁的限制,讀取操作結束后不會進入忙狀態,但不能在忙狀態時讀取?
W25Q64數據手冊 (摘取)
控制及狀態寄存器?
指令集?
?