主頁 > 軟體設計 > 《STM32從零開始學習歷程》——SPI物理層及FLASH芯片介紹

《STM32從零開始學習歷程》——SPI物理層及FLASH芯片介紹

2021-04-16 12:18:06 軟體設計

《STM32從零開始學習歷程》@EnzoReventon

SPI物理層及FLASH芯片介紹

相關鏈接:
SPI協議層
SPI特性及架構
SPI韌體庫

參考資料:
[野火EmbedFire]《STM32庫開發實戰指南——基于野火霸天虎開發板》
[正點原子]STM32F4開發指南-庫函式版本_V1.2
[ST]《STM32F4xx中文參考手冊》
SPI協議及總線協議介紹
W25Q128產品資料手冊

SPI協議介紹

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

物理層介紹

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
**加粗樣式**

SS: 從設備選擇信號線,常稱為片選信號線,也稱為NSS,CS,

  • 每個從設備都有獨立的這一條SS信號線,本信號線獨占主機的一個引腳,即有多少個從設備,就有多少條片選信號線,I2C協議中通過設備地址來尋址、選中總線上的某個設備并與其進行通訊;
  • 而SPI協議中沒有設備地址,它使用SS信號線來尋址,當主機要選擇從設備時,把該從設備的SS信號線設定為低電平,該從設備即被選中,即片選有效,接著主機開始與被選中的從設備進行SPI通訊,
  • 所以SPI通訊以SS線置低電平為開始信號,以SS線被拉高作為結束信號,

SCK: 時鐘信號線,用于通訊資料同步,

  • 它由通訊主機產生,決定了通訊的速率,不同的設備支持的最高時鐘頻率不一樣,如STM32的SPI時鐘頻率最大為fpclk/2(選APB1或APB2,最大為42MHz或者21MHz),兩個設備之間通訊時**,通訊速率受限于低速設備**,

MOSI:(Master Output,Slave Input) 主設備輸出/從設備輸入引腳,

  • 主機的資料從這條信號線輸出,從機由這條信號線讀入主機發送的資料,即這條線上資料的方向為主機到從機,

MISO:(Master Input,Slave Output) 主設備輸入/從設備輸出引腳,

  • 主機從這條信號線讀入資料,從機的資料由這條信號線輸出到主機,即在這條線上資料的方向為從機到主機,

WP:

  • 寫保護,低電平有效,

HOLD:

  • 暫停功能,處理比當前任務更重要的任務時,把當前任務暫停,保持當前狀態,先處理另一個任務,

W25Q128產品資料手冊解讀

W25Q128產品資料手冊

The W25Q128FV (128M-bit) Serial Flash memory provides a storage solution for systems with limited space, pins and power. The 25Q series offers flexibility and performance well beyond ordinary Serial Flash devices. They are ideal for code shadowing to RAM, executing code directly from Dual/Quad SPI (XIP) and storing voice, text and data. The device operates on a single 2.7V to 3.6V power supply with current consumption as low as 4mA active and 1μA for power-down. All devices are offered in space-saving packages.

W25Q128FV(128M位,16兆位元組)串行閃存為空間、引腳和電源有限的系統提供存盤解決方案,25Q系列提供的靈活性和性能遠遠超過普通串行閃存設備,它們非常適合于將代碼存盤到RAM中,直接從雙/四SPI(XIP)執行代碼并存盤語音、文本和資料(NOR FLASH),該裝置采用2.7V至3.6V的單電源供電,電流消耗低至4mA,斷電時為1μa,所有設備均采用節省空間的包裝,
ps:F407芯片內部有一個1MB的NOR FLASH用來存盤程式,且不支持將程式存盤到外部的NOR FLASH中,

The W25Q128FV array is organized into 65,536 programmable pages of 256-bytes each. Up to 256 bytes can be programmed at a time. Pages can be erased in groups of 16 (4KB sector erase), groups of 128 (32KB block erase), groups of 256 (64KB block erase) or the entire chip (chip erase). The W25Q128FV has 4,096 erasable sectors and 256 erasable blocks respectively. The small 4KB sectors allow for greater flexibility in applications that require data and parameter storage.

W25Q128FV陣列被組織成65536個可編程頁,每個頁256位元組,一次最多可編程256位元組,頁面可以按16組(4KB扇區擦除)、128組(32KB塊擦除)、256組(64KB塊擦除)或整個芯片(芯片擦除)擦除(可以按頁、位元組寫入擦除的最小單位為扇區 4096位元組),W25Q128FV分別有4096個可擦除扇區和256個可擦除塊,小的4KB扇區允許在需要資料和引數存盤的應用程式中具有更大的靈活性,

The W25Q128FV support the standard Serial Peripheral Interface (SPI), Dual/Quad I/O SPI as well as 2-clocks instruction cycle Quad Peripheral Interface (QPI): Serial Clock, Chip Select, Serial Data I/O0 (DI), I/O1 (DO), I/O2 (/WP), and I/O3 (/HOLD). SPI clock frequencies of up to 104MHz are supported allowing equivalent clock rates of 208MHz (104MHz x 2) for Dual I/O and 416MHz (104MHz x 4) for Quad I/O when using the Fast Read Dual/Quad I/O and QPI instructions. These transfer rates can outperform standard Asynchronous 8 and 16-bit Parallel Flash memories. The Continuous Read Mode allows for efficient memory access with as few as 8-clocks of instruction-overhead to read a 24-bit address, allowing true XIP (execute in place) operation.

W25Q128FV 支持標準串行外圍介面(SPI)、雙/四I/O SPI 以及2時鐘指令回圈四外圍介面(QPI):串行時鐘、芯片選擇、串行資料I/O0(DI)、I/O1(DO)、I/O2(/WP)和I/O3(/HOLD),支持最多104MHz的SPI時鐘頻率,當使用快速讀取雙/四輸入/四輸入/輸出和QPI指令時,允許雙I/O的等效時鐘速率208MHz(104MHz x 2),四I/O的等效時鐘速率為416MHz(104MHz x 4),這些傳輸速率可以優于標準的異步8位和16位并行閃存,連續讀取模式允許高效的記憶體訪問,只需8個時鐘的指令開銷,即可讀取24位地址,從而允許真正的XIP(就地執行)操作,

====================================================================================

STATUS AND CONFIGURATION REGISTERS
Three Status and Configuration Registers are provided for W25Q128FV. The Read Status Register-
1/2/3 instructions can be used to provide status on the availability of the flash memory array, whether
the device is write enabled or disabled, the state of write protection, Quad SPI setting, Security Register
lock status, Erase/Program Suspend status, output driver strength, power-up and current Address
Mode. The Write Status Register instruction can be used to configure the device write protection features,
Quad SPI setting, Security Register OTP locks, Hold/Reset functions, output driver strength and powerup
Address Mode. Write access to the Status Register is controlled by the state of the non-volatile Status
Register Protect bits (SRP0, SRP1), the Write Enable instruction, and during Standard/Dual SPI
operations, the /WP pin.

狀態和配置暫存器W25Q128FV提供三個狀態和配置暫存器,讀取狀態暫存器-1/2/3指令可用于提供閃存陣列可用性的狀態,無論該設備是寫啟用或禁用,寫保護狀態,四SPI設定,安全暫存器鎖定狀態、擦除/程式掛起狀態、輸出驅動程式強度、通電和當前地址模式,寫狀態暫存器指令可用于配置設備寫保護功能,四SPI設定,安全暫存器OTP鎖,保持/復位功能,輸出驅動器強度和通電地址模式,對狀態暫存器的寫訪問由非易失性狀態的狀態控制暫存器保護位(SRP0、SRP1)、寫啟用指令和標準/雙SPI期間操作,/WP引腳,
在這里插入圖片描述

S0 BUSY 標志位:表示擦除或者寫入操作是否已經完成,(只讀)

BUSY is a read only bit in the status register (S0) that is set to a 1 state when the device is executing a Page Program, Quad Page Program, Sector Erase, Block Erase, Chip Erase, Write Status Register or Erase/Program Security Register instruction. During this time the device will ignore further instructions except for the Read Status Register and Erase/Program Suspend instruction (see tW, tPP, tSE, tBE, and tCE in AC Characteristics). When the program, erase or write status/security register instruction has completed, the BUSY bit will be cleared to a 0 state indicating the device is ready for further instructions.

BUSY是狀態暫存器(S0)中的只讀位,當設備執行頁程式、四頁程式、扇區擦除、塊擦除、芯片擦除、寫狀態暫存器或擦除/程式安全暫存器指令時,該位被設定為1狀態,在此期間,設備將忽略除讀取狀態暫存器和擦除/程式掛起指令外的其他指令(參見AC特性中的tW、tPP、tSE、tBE和tCE),當程式、擦除或寫入狀態/安全暫存器指令完成時,忙位將被清除為0狀態,表示設備已準備好接受進一步指令,

FLASH指令

INSTRUCTIONS
The Standard/Dual/Quad SPI instruction set of the W25Q128FV consists of 45 basic instructions that are fully controlled through the SPI bus (see Instruction Set Table1-2). Instructions are initiated with the falling edge of Chip Select (/CS). The first byte of data clocked into the DI input provides the instruction code. Data on the DI input is sampled on the rising edge of clock with most significant bit (MSB) first.

W25Q128FV的標準/雙/四SPI指令集由45潭訓本指令組成,這些指令通過SPI總線完全控制(見指令集表1-2),指令通過芯片選擇的下降沿(/CS)啟動,進入DI輸入的第一個資料位元組提供指令代碼,DI輸入端上的資料首先在時鐘上升沿進行采樣,最高有效位(MSB),

Instructions vary in length from a single byte to several bytes and may be followed by address bytes, data bytes, dummy bytes (don’t care), and in some cases, a combination. Instructions are completed with the rising edge of edge /CS. Clock relative timing diagrams for each instruction are included in Figures 5 through 57. All read instructions can be completed after any clocked bit. However, all instructions that Write, Program or Erase must complete on a byte boundary (/CS driven high after a full 8-bits have been clocked) otherwise the instruction will be ignored. This feature further protects the device from inadvertent writes. Additionally, while the memory is being programmed or erased, or when the Status Register is being written, all instructions except for Read Status Register will be ignored until the program or erase cycle has completed.

指令的長度從一個位元組到幾個位元組不等,后面可能是地址位元組、資料位元組、偽位元組(不在乎),在某些情況下,還可能是一個組合,指令以edge/CS的上升沿完成,每個指令的時鐘相對時序圖包含在圖5到57中,所有讀取指令都可以在任何時鐘位之后完成,但是,所有寫入、編程或擦除的指令都必須在位元組邊界上完成(/CS在完成8位時鐘后高電平驅動),否則該指令將被忽略,此功能進一步保護設備不受意外寫入的影響,此外,當存盤器被編程或擦除時,或當狀態暫存器被寫入時,除讀取狀態暫存器外的所有指令將被忽略,直到編程或擦除周期完成,

具體指令查閱參考手冊指令表,
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/276742.html

標籤:其他

上一篇:問遍了身邊的大廠面試官朋友,我整理出這份 Java 集合高頻面試題(帶決議)

下一篇:SpringBoot——入門案例之“Hello SpringBoot“

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more