讀取 STM32H5 Data Flash 觸發 NMI 的問題解析 LAT1544

關鍵字:STM32H5, data flash, high-cycle data, NMI

問題描述

客戶反饋,使用 STM32H563 的 data flash(high-cycle data flash),在還沒有寫入任何數據之前去讀取 data flash, 會觸發 hardfault 異常。

1. 問題分析

我們嘗試在 NUCLEO-H563ZI 板上重現問題,直接使用 CubeH5 包內的示例工程 :
STM32Cube_FW_H5_V1.4.0\Projects\NUCLEO-H563ZI\Examples\FLASH\FLASH_EDATA_EraseProgram
此示例代碼的大體流程如下 :

1> 系統啟動后,初始化系統時鐘。

2> 配置 OB, 將 FLASH bank1 的最末尾的 8 個 sector 配置為 high-cycle flash.如下紅框所示 :

圖1. 配置末尾 8 個 sector 為 data flash

3> 擦除所有 8 個 high-cycle data flash 扇區

4> 往 8 個 data flash 扇區寫入數據 0xAA55(半字).

5> 最后讀出 8 個 data flash 扇區的數據進行檢查

這里有一個細節,每次編程只寫半字數據,為什么是半字呢?那是因為 data flash 區域每16bit 對應一個 6 位的 ECC 校驗。當然你要是寫一個 32bit 的字也是可以的。

為了模擬客戶的問題,我們將第 4>步驟跳過,即在擦除扇區后,直接讀取扇區內數據。最終重現了問題 :

圖2. 觸發了 NMI 異常

此時查看 FLASH 的 FLASH_ECCDETR 寄存器 :

圖3. FLASH_ECCDETR 寄存器

從寄存器內容可看出,此時觸發了 EDATA_ECC double error 錯誤。剛擦除了 data flash不能立即讀取嗎?于是在參考手冊上找到如下對應內容:

如上圖參考手冊內容所描述,當 data flash 為 virgin word 時(比如剛擦除完,還未寫入任何數據), 此時若去訪問它,當觸發 ECC 錯誤,只有編程后(no more virgin), ECC 錯誤才會消失。

至于讀取 data flash 時,觸發 ECC 錯誤時,寄存器中顯示的內容為什么是 0xf000? 這個在參考手冊中也能找到對應內容:

可見,FLASH_ECCDETR 寄存器的 ADDR_ECC 中顯示的地址并不是簡單地將 flash 地址直接顯示,而是有一定的規則。代碼中訪問的是 0x09000000U 位置就觸發了 data flash ECCD 錯誤,它對應的是 Data area sector 7 的起始位置,如上表所示,對應 0xF000, 此扇區對 ECC?錯誤記錄范圍為 0xF000~0xF1FF.

2. 解決方法

知道了原因,再去解決就比較容易了。解決方法有兩個:

1> 確保代碼中每次讀取 data flash 之前必須先寫入數據。

2> 屏蔽 ECC 錯誤

在讀取 data flash 之前,執行如下代碼:
__HAL_RCC_SBS_CLK_ENABLE();
? ? ? ? HAL_SBS_FLASH_DisableECCNMI();

如此一來,雖 ECC 錯誤仍然存在(已忽略),但不再觸發 NMI 中斷。

3. 其它

與 data flash 具體類似特性的還有 OTP, 它也是若寫任何數據前就去讀取其內容也會觸發 ECCD 錯誤,從而導致 NMI 異常。

另外,對于 data flash,訪問它要關閉其對應的緩存屬性。這個在示例中也有相關代碼,比如:

若不如此做,則當訪問 data flash 時,將觸發 hardfault 中斷。

圖4. 若不關閉緩存屬性,訪問 data flash 將觸發 hardfault

與這個類似的還有 OTP, 和 readonly data(比如芯片 UID). 若對應地址沒關閉緩存直接讀取也會觸發 hardfault.

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

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

相關文章

學云計算還是網絡,選哪個好?

云計算工程師和網絡工程師,都是IT界香餑餑,但方向差很大!選錯路后悔3年!今天極限二選一,幫你徹底搞懂工作職責 網絡工程師:網絡世界的交警工程師!主要管物理網絡和邏輯連接。負責設計、搭建、維…

Matlab使用——開發上位機APP,通過串口顯示來自單片機的電壓電流曲線,實現光伏I-V特性監測的設計

預覽此處的測試數據的采集頻率和曲線變化是通過更換電阻來測試的,所以電壓電流曲線顯示并不是很平滑,圖中可以看到每一個采集點的數值。這個設計是福州大學第三十期SRTP的一個校級的項目,打算通過分布式的在線掃描電路低成本的單片機&#xf…

云原生 JVM 必殺技:3 招讓容器性能飛躍 90%

最近佳作推薦: Java 大廠面試題 – JVM 與分布式系統的深度融合:實現技術突破(34)(New) Java 大廠面試題 – JVM 新特性深度解讀:緊跟技術前沿(33)(New&#…

你真的了解操作系統嗎?

文章目錄操作系統是什么?操作系統核心功能為什么需要操作系統(目的)?操作系統的下層是什么?上層又是什么?如何理解“管理”?——“先描述,再組織”操作系統是什么? 任何…

從0到1詳解requests接口自動化測試

前言 接口測試是測試系統組件間接口的一種測試。接口測試主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關系等。 1、理解什么是接口 接口一般來說有兩種…

Linux系統操作編程——http

萬維網www萬維網是一個大規模的、聯機式的信息儲藏所 ,實現從一個站點鏈接到另一個站點萬維網服務器后臺標記萬維網數據方式:url:統一資源定位符萬維網客戶端與萬維網服務器的通信方式:HTTP:超文本傳輸協議萬維網客戶端…

Langchian-chatchat私有化部署和踩坑問題以及解決方案[v0.3.1]

文章目錄一 langchain-chatchat項目二 本地私有部署2.1 源碼下載2.2 創建虛擬環境2.3 安裝Poetry2.4 安裝項目依賴2.5 初始化項目2.6 修改配置信息2.7 初始化知識庫2.8 啟動服務三 問題和解決方法3.1 poetry和packaging版本兼容性3.2 Langchain-chatchatPDF加載錯誤分析[win平臺…

Day3--HOT100--42. 接雨水,3. 無重復字符的最長子串,438. 找到字符串中所有字母異位詞

Day3–HOT100–42. 接雨水,3. 無重復字符的最長子串,438. 找到字符串中所有字母異位詞 每日刷題系列。今天的題目是力扣HOT100題單。 雙指針和滑動窗口題目。其中438題踩了坑,很值得看一下。 42. 接雨水 思路: 每個位置i&#x…

Kafka Broker 核心原理全解析:存儲、高可用與數據同步

Kafka Broker 核心原理全解析:存儲、高可用與數據同步 思維導圖正文:Kafka Broker 核心原理深度剖析 Kafka 作為高性能的分布式消息隊列,其 Broker 節點的設計是支撐高吞吐、高可用的核心。本文將從存儲結構、消息清理、高可用選舉、數據同步…

RTTR反射機制示例

1. Person類型頭文件 #ifndef PERSON_H …

計數組合學7.21(有界部分大小的平面分拆)

7.21 有界部分大小的平面分拆 本節的主要目標是在 q1q 1q1 的情況下細化定理 7.20.1,通過限制平面分拆 π∈P(r,c)\pi \in P(r, c)π∈P(r,c) 的最大部分的大小。例如,考慮特殊情況 r1r 1r1,此時 π\piπ 只是一個不超過 ccc 個部分的普通分…

Product Hunt 每日熱榜 | 2025-08-26

1. Trace 標語:人類與人工智能的工作流程自動化 👾 介紹:一個工作流程自動化平臺,將任務分配給合適的處理者——無論是人類還是人工智能。通過連接像Slack、Jira和Notion這樣的工具,Trace能夠拆解現有工作流程&#…

llama.cpp reranking源碼分析

大模型時代,reranker一直是提高RAG有效性的重要工具。相對于初篩階段向量檢索,精排階段的reranker需要query和每個候選document做相關計算。初篩已經將候選documents限制在一個相對較小范圍,但依然要進行大量的相關性計算。 llama.cpp是廣泛…

ruoyi-vue(十二)——定時任務,緩存監控,服務監控以及系統接口

一 定時任務 1、 定時任務使用 1.1 概述 在實際項目開發中Web應用有一類不可缺少的,那就是定時任務。 定時任務的場景可以說非常廣泛,比如某些視頻網站,購買會員后,每天會給會員送成長值,每月會給會員送一些電影券&…

spring如何通過實現BeanPostProcessor接口計算并打印每一個bean的加載耗時

文章目錄實現說明:注意事項:要在Spring中通過BeanPostProcessor接口計算并打印每個Bean的加載耗時,我們可以利用該接口的兩個回調方法記錄Bean初始化前后的時間戳,然后計算時間差。 以下是實現方案: 首先創建一個實現B…

“品種+創新銷售”,恩威醫藥半年度業績翻倍增長

8月25日晚,恩威醫藥發布2025年半年度報告,報告期內,公司實現營業收入4.49億元,同比增長15.73%,歸屬于上市公司股東凈利潤達3834.42萬元,同比增幅113.80%,扣除非經常性損益凈利潤為3527.57萬元&a…

【機器學習】機器學習算法

機器學習1、K-近鄰算法KNN1.1、舉例:電影類型分析1.2、KNN算法流程1.3、Scikit-learn工具1.4、K-近鄰算法API1.5、距離度量1.5.1、歐式距離Euclidean Distance🔥1.5.2、曼哈頓距離Manhattan Distance🔥1.5.3、切比雪夫距離Chebyshev Distance…

python-批量安裝庫

要將當前環境中已安裝的Python庫列表導出為一個可重用的格式(通常為requirements.txt),以便在另一個環境中再現這些庫的安裝,可以使用pip工具提供的功能。以下是具體步驟:### 使用pip freeze1. **打開命令提示符或終端…

創龍3576ububuntu系統設置靜態IP方法

創龍3576ububuntu系統設置靜態IP方法,執行命令進入"/etc/systemd/network/"目錄,請根據實際網絡環境,下面演示修改 eth0.network 網口靜態ip為192.168.1337.200執行:vim /etc/systemd/network/eth0.network 增加一句&am…

MySQL - 視圖,事務和索引

目錄一、視圖1. 問題2. 視圖是什么3. 定義視圖4. 查看視圖5. 使用視圖6. 刪除視圖7. 視圖的作用二、事務1. 定義2. 事務命令1)回滾2)提交3)臟寫、臟讀、不可重復讀和幻讀三、索引1. 定義2. 索引是什么3. 索引目的4. 索引原理5. 索引的使用6. …