QSPI、OSPI與FSMC的區別與內存映射分析

QSPI、OSPI與FSMC的區別與內存映射分析

基本概念與區別

1. FSMC (靈活靜態存儲控制器)

  • 接口類型:并行接口,通常8/16位數據總線
  • 總線標準:傳統并行總線協議
  • 速度:相對較低,通常最高約100MHz
  • 應用場景:SRAM、NOR Flash、PSRAM、LCD等并行接口外設

2. QSPI (四線串行外設接口)

  • 接口類型:串行接口,1/2/4線數據傳輸
  • 總線標準:SPI協議的擴展
  • 速度:中等,通常最高約108MHz,有效帶寬達到50MBytes/s (4線x108MHz/8位)
  • 應用場景:Serial NOR Flash、EEPROM等

3. OSPI (八線串行外設接口)

  • 接口類型:串行接口,1/2/4/8線數據傳輸
  • 總線標準:QSPI的擴展,兼容QSPI
  • 速度:較高,通常最高約200MHz,有效帶寬可達到200MBytes/s (8線x200MHz/8位)
  • 應用場景:高速Serial NOR Flash、Hyperflash、Hyper RAM

內存映射功能對比

FSMC內存映射

  • 直接映射:FSMC直接將外部存儲設備映射到CPU的地址空間
  • 訪問方式:CPU直接通過地址訪問,無需專用命令
  • 優勢:實現簡單,無需特殊初始化序列
  • 延遲:相對較低,通常1-2個時鐘周期
  • 地址范圍:STM32上通常映射到0x6000 0000 - 0x6FFF FFFF

QSPI內存映射

  • 間接映射:通過QSPI控制器將閃存內容映射到系統地址空間
  • 訪問流程
    1. 控制器發送特定命令(通常是0x0B/0xEB)
    2. 發送地址
    3. 插入可選的虛擬周期
    4. 連續讀取數據
  • 映射機制:QSPI控制器自動處理命令序列
  • 地址范圍:典型映射到0x9000 0000 - 0x9FFF FFFF

OSPI內存映射

  • 增強型映射:支持QSPI的所有功能,并增加了8線模式支持
  • 訪問流程:與QSPI相似,但可以使用8線傳輸
  • 高級特性
    1. 支持更復雜的命令序列
    2. 雙閃存同時訪問(STM32H7系列)
    3. 內存映射期間支持XIP緩存
  • 地址范圍:類似QSPI,但可能有所擴展

XIP (執行時位置)實現方式

FSMC-XIP實現

// FSMC配置NOR Flash映射
void FSMC_NOR_Init(void) {FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef p;// 配置基本時序p.FSMC_AddressSetupTime = 0x06;p.FSMC_AddressHoldTime = 0x00;p.FSMC_DataSetupTime = 0x0B;// ...其他時序配置// 配置NOR控制器FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;// ...其他控制器配置FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);// 映射后可直接訪問和執行,無需額外步驟
}// 代碼執行示例
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
void ExecuteFromNOR(void) {// 直接跳轉到NOR Flash中的代碼Jump_To_Application = (pFunction)(0x60000000 + 0x1000); // 示例地址Jump_To_Application();
}

QSPI-XIP實現

// QSPI內存映射模式配置
void QSPI_MemoryMapped_Init(void) {QSPI_CommandTypeDef s_command;QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;// 配置讀取命令s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; // 通常是0xEBs_command.AddressMode = QSPI_ADDRESS_4_LINES;s_command.AddressSize = QSPI_ADDRESS_24_BITS;s_command.DataMode = QSPI_DATA_4_LINES;// ...其他命令配置// 配置內存映射參數s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;// 啟用內存映射模式HAL_QSPI_MemoryMapped(&hqspi, &s_command, &s_mem_mapped_cfg);// 此時Flash已映射到地址空間,可以執行代碼
}// 代碼執行示例
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
void ExecuteFromQSPI(void) {// 使能Cache以提高XIP性能SCB_EnableICache();SCB_EnableDCache();// 跳轉到QSPI映射區域的代碼Jump_To_Application = (pFunction)(0x90000000 + 0x1000); // 示例地址Jump_To_Application();
}

OSPI-XIP實現

// OSPI內存映射模式配置 (STM32H7系列示例)
void OSPI_MemoryMapped_Init(void) {OSPI_RegularCmdTypeDef sCommand;OSPI_MemoryMappedTypeDef sMemMappedCfg;// 配置讀取命令 (8線模式)sCommand.OperationType = HAL_OSPI_OPTYPE_READ_CFG;sCommand.FlashId = HAL_OSPI_FLASH_ID_1;sCommand.Instruction = OCTO_READ_CMD; // 例如0x8B/0xECsCommand.InstructionMode = HAL_OSPI_INSTRUCTION_8_LINES;sCommand.InstructionSize = HAL_OSPI_INSTRUCTION_8_BITS;sCommand.AddressMode = HAL_OSPI_ADDRESS_8_LINES;sCommand.AddressSize = HAL_OSPI_ADDRESS_32_BITS;sCommand.DataMode = HAL_OSPI_DATA_8_LINES;// ...其他命令配置// 配置內存映射參數sMemMappedCfg.TimeOutActivation = HAL_OSPI_TIMEOUT_COUNTER_DISABLE;// 啟用OSPI內存映射模式HAL_OSPI_MemoryMapped(&hospi, &sCommand, &sMemMappedCfg);// 此時可以直接執行映射區域的代碼
}// 代碼執行示例
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
void ExecuteFromOSPI(void) {// 使能Cache以提高XIP性能SCB_EnableICache();SCB_EnableDCache();// 跳轉到OSPI映射區域的代碼Jump_To_Application = (pFunction)(0x90000000 + 0x1000); // 示例地址Jump_To_Application();
}

性能與應用對比

XIP性能對比

  1. 訪問延遲

    • FSMC: 低延遲,但總體帶寬受限
    • QSPI: 首次訪問延遲高,但連續讀取性能好
    • OSPI: 首次訪問延遲較高,但連續讀取性能最佳
  2. 緩存影響

    • 三種接口都受益于CPU緩存
    • 對于QSPI/OSPI,緩存幾乎是必需的
    • STM32H7還為QSPI/OSPI提供了專用的ART加速器
  3. 代碼執行速度

    • FSMC: ~15-30MB/s
    • QSPI: ~30-50MB/s
    • OSPI: ~80-200MB/s

適用場景

  • FSMC:

    • 需要兼容舊設備
    • 需要簡單直接的訪問方式
    • 接口引腳數量不受限
  • QSPI:

    • 需要節省PCB空間(較少引腳)
    • 中等執行性能要求
    • 大多數現代系統選擇
  • OSPI:

    • 高性能應用
    • 運行復雜應用程序
    • 需要支持大容量閃存

總結

FSMC、QSPI和OSPI代表了嵌入式系統外部存儲接口的發展歷程:從并行到串行,從單線到多線。在內存映射和XIP方面,三種接口都支持,但實現復雜度和性能各不相同。對于現代STM32應用,QSPI和OSPI因其更好的性能/空間比和靈活性而成為更流行的選擇,特別是對于需要執行復雜代碼的應用程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87986.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87986.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87986.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

系統思考與心智模式探索

成長的真正障礙,不是能力的不足,而是看待問題的局限。 在復雜多變的商業環境中,我們往往習慣于解決“眼前”的問題,卻忽視了深藏背后的系統性障礙。我們看到的只是表面的“癥狀”,而真正的根源,卻往往隱藏…

物聯網技術的關鍵技術與區塊鏈發展趨勢的深度融合分析

一、物聯網技術的核心架構與關鍵技術 物聯網技術體系由感知層、網絡層、平臺層、應用層和安全層構成,各層技術協同工作,實現物理世界與數字世界的深度融合。 感知層:物聯網的“感官” 傳感器技術:包括環境傳感器(溫度…

針對Exhcnage Server的攻擊防范措施

一、背景介紹最近,安全研究人員揭露了一個名為 NightEagle(又名 APT-Q-95) 的高級持續性威脅(APT)組織。這個組織被觀察到利用 Microsoft Exchange 服務器中的零日漏洞鏈 進行攻擊,其主要目標是中國政府、國…

編程基礎:繼承

能幫到你的話,就給個贊吧 😘 文章目錄繼承:使用基類成員:前提——派生類必須同樣支持基類成員(組件和功能)示例:動物Animal 有 鰓 和 會飛。則 鳥Bird 不是 Animal,因為Bird雖會飛,卻沒有鰓。魚…

TMC4361A 使用(未驗證)

prompt 我用STM32F103C8T6 來控制 TMC4361A 運動控制芯片 ,我配置 STM32F103C8T6 的 SPI1 與 TMC4361A 進行通信,配置 PA4 作為片選線,配置 PA8 作為 RCC_MCO 輸入時鐘輸入到 TMC4361A, 并將其連接到TMC4361A的CLK_EXT引腳。我想控制 TMC4361…

深度剖析:如何解決Node.js中mysqld_stmt_execute參數錯誤

在Node.js后端開發中,使用mysql2等數據庫驅動與MySQL/MariaDB交互時,Incorrect arguments to mysqld_stmt_execute 是一個令人頭疼的錯誤。它通常意味著你傳遞給SQL預處理語句的參數數量與SQL字符串中問號(?)占位符的數量不匹配。…

Vue3 學習教程,從入門到精通,Vue 3 安裝指南及語法知識點詳解(2)

Vue 3 安裝指南及語法知識點詳解 本文將詳細介紹 Vue 3 的所有安裝方式,并深入講解 Vue 3 的語法知識點。此外,還將提供一些綜合性案例,展示如何綜合運用 Vue 3 的各項功能。一、安裝 Vue 3 的所有方式 Vue 3 提供了多種安裝方式,…

C++基礎復習筆記

一、數組定義 在C中,數組初始化有多種方式,以下是常見的幾種方法: 默認初始化 數組元素未顯式初始化時,內置類型(如int、float)的元素值未定義(垃圾值),類類型調用默認構…

手機和PC遠控安全深度測評:TeamViewer/ToDesk/向日葵安全防線對比

聲明:本測試報告系作者基于個人興趣及使用場景開展的非專業測評,測試過程中所涉及的方法、數據及結論均為個人觀點,不代表任何官方立場或行業標準。 一、引言 當下遠程控制技術已深度融入大眾的工作與生活,無論是上班族在家操…

Windows 11的開始菜單調整為左下角布局

1.桌面右鍵個性化 2.個性化中任務欄 3.任務欄選擇任務欄行為 4.任務欄行為中 任務欄對齊方式選擇靠左即可

Go語言項目工程化 — 常見開發工具與 CI/CD 支持

在Go語言的項目工程化實踐中,常見開發工具與 CI/CD 支持是保障團隊協作、高效交付與項目質量的關鍵。以下是第 68 章的詳細內容。一、開發輔助工具Go語言生態為開發者提供了豐富的工具,以提高代碼質量與開發效率。1. 格式化與靜態檢查工具說明gofmt標準格…

OpenCV人臉分析------繪制面部關鍵點函數drawFacemarks()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數用于在圖像上繪制面部關鍵點(facial landmarks),例如使用 FacemarkLBF, FacemarkKazemi 等算法檢測到的…

Linux內核ext4 extent:解決大文件存儲難題的關鍵

在Linux 操作系統的龐大生態中,文件系統猶如一座城市的基礎設施,支撐著數據的有序存儲與高效訪問。而 ext4 文件系統,作為 Linux 文件系統家族中的重要一員,自誕生起便憑借諸多先進特性備受矚目。其中,extent 機制堪稱…

reactnative頁面適配UI設計尺寸px轉dp的完美解決方案px2dp精要篇

你的 px2dp 函數基本思路是正確的,但可以進一步優化以確保更精確的適配。以下是改進后的完美精確方案: 完美精確的適配方案 import { Dimensions, PixelRatio, Platform, ScaledSize } from react-native;// 獲取屏幕尺寸(考慮橫豎屏&#…

【世紀龍科技】汽車鈑金虛擬仿真教學實訓軟件

在汽車后市場人才緊缺的當下,職業院校汽車鈑金教學卻長期面臨“三難困境”:實訓設備昂貴且損耗快、學生實操機會稀缺、教學評價依賴主觀經驗。江蘇世紀龍科技公司以十余年汽車教育數字化積淀為基石,推出《汽車鈑金教學軟件》,通過…

Fiddler中文版抓包工具在后端API調試與Mock中的巧用

在現代開發中,前后端往往分屬不同小組甚至不同公司,接口聯調變得至關重要。尤其是在多團隊合作、后端接口尚未完成或頻繁變動的項目中,前端開發進度容易被阻礙。此時,通過靈活運用 Fiddler抓包工具,前端可以在后端接口…

基于 Flask框架開發的輕量級招聘網站

簡單的招聘網站示例 這是一個基于 Flask 框架開發的輕量級招聘網站示例,采用 Jinja2 模板引擎和 Bootstrap 前端框架,模仿 拉勾網 風格,實現了招聘平臺的核心功能。系統支持 個人用戶 和 企業用戶 兩種角色,個人用戶可以瀏覽職位、…

2025 年使用大模型進行軟件工程:現實檢驗

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

如何使用單例模式保證全局唯一實例(復雜版本)

/// <summary> /// 登錄管理類&#xff08;單例模式&#xff09;&#xff0c;負責用戶登錄、注銷及用戶信息管理 /// </summary> public class LoginMananger {// 用于線程同步的鎖對象static object _lockObj new object();// 單例實例&#xff08;延遲初始化&am…

瑞斯拜考研詞匯課筆記

學習視頻鏈接&#xff1a;瑞斯拜考研詞匯系統課-外刊50篇- 第一講_嗶哩嗶哩_bilibili Text 1 1.氣候危機讓普通人經歷了額外六周的高溫天氣。 The climate crisis caused the average person to experience six extra weeks of hot days. 2.碳排放是全球變暖的重要原因之一。 C…