arm 精準總線錯誤與非精準總線錯誤

一、總線錯誤

1.1 arm總線設計

要了解什么是總線錯誤,就要先了解arm的總線設計。

AMBA(Advanced Micro-Controller Bus Architecture)是由ARM Limited公司推出的On-Chip Bus片上總線規范,是目前芯片總線的主流標準(該標準在不斷演進),常用的總線:高性能總線(AdvancedHigh Performance Bus,AHB)、系統總線(AdvancedSystem Bus,ASB)和外設總線(Advanced PeripheralBus,APB)。

ARM 處理器內核系列典型內核型號AMBA 版本主要總線協議應用場景
Cortex-M0/M0+Cortex-M0, Cortex-M0+AMBA 2.0AHB-Lite, APB低功耗、低成本微控制器
Cortex-M3/M4/M7Cortex-M3, Cortex-M4, M7AMBA 3.0AHB-Lite, APB主流嵌入式應用
Cortex-M23/M33/M55Cortex-M23, Cortex-M33, M55AMBA 4.0AXI4, APB安全關鍵型應用、IoT
Cortex-A 系列(早期)Cortex-A5, A7, A9AMBA 3.0AHB, AXI3智能手機、平板電腦
Cortex-A 系列(現代)Cortex-A15, A53, A57, A72AMBA 4.0AXI4, ACE, ACE-Lite高性能移動設備、服務器
Cortex-A 系列(最新)Cortex-A76, A78, X1AMBA 5.0CHI, AXI5旗艦手機、數據中心
Cortex-R 系列Cortex-R4, R5, R7, R8AMBA 3.0/4.0AXI3, AXI4汽車電子、工業控制(實時應用)
ARM7/ARM9 系列(經典內核)ARM7TDMI, ARM926EJ-SAMBA 2.0AHB, ASB, APB傳統嵌入式系統
Neoverse 系列(服務器)Neoverse N1, E1, V1AMBA 5.0CHI, AXI5云計算、數據中心

ARM 系統總線BUS從 CPU 內核開始。這是在 MMU 和 CPU?緩存單元之后,它連接到外圍設備。此 CPU 總線由主時鐘?(fclk) 運行。這與高頻時鐘是同一個概念。對于內存和低速外圍設備來說,這個時鐘非常高。因此,有一個橋bridge將時鐘除以 4 倍(hclk),這用于高速外設。此總線也稱為?AHB 或 ARM 高速總線。內存和圖形外設(Memory and Graphics peripherals)應連接到此總線。同樣,這個 AHB 進入一個橋,以進一步將時鐘除以 2。這用于低速外圍設備。這稱為 APB。ARM 外設總線 (APB)。低速外設(Low speed peripherals),如串行端口、I2C、SPI。

動圖

M0采用馮諾依曼結構,而M3,M4采用哈佛結構,具有獨立的數據總線和指令總線。這種將數據總線和指令總線分開的結構,可以大大提高總線的數據存儲量,消除瓶頸效應。
在上圖中,對應總線矩陣(Bus Matrix), 總線矩陣中還有其他總線。需要注意的是,雖然M3,M4的數據總線和指令總線分開,兩者的存儲并沒有分開。以M4內核為例,從官方參考手冊(Documentation – Arm Developer)上可以看出:

I-Code 總線
I-Code的作用是取指令&執行指令,只和指令有關,I-Code 總線是一條基于 AHB-Lite 總線協議的 32 位總線,負責在 0x0000_0000 – 0x1FFF_FFFF 之間的取指操作。取指以字(32位)的長度執行,即使是對于 16 位指令也如此。因此 CPU 內核可以一次取出兩條 16 位 Thumb 指令。

D-Code 總線
D-Code 的作用是對數據讀寫訪問,只和數據有關,D-Code 總線也是一條基于 AHB-Lite 總線協議的 32 位總線,負責在 0x0000_0000 – 0x1FFF_FFFF(與I-Code相同)之間的數據訪問操作。盡管 CM3 支持非對齊訪問,但你絕不會在該總線上看到任何非對齊的地址,這是因為處理器的總線接口會把非對齊的數據傳送都轉換成對齊的數據傳送。因此,連接到 D-Code總線上的任何設備都只需支持 AHB-Lite 的對齊訪問,不需要支持非對齊訪問。

系統總線
系統總線也是一條基于 AHB-Lite 總線協議的 32 位總線,負責在 0x2000_0000 – 0xDFFF_FFFF 和0xE010_0000 – 0xFFFF_FFFF 之間的所有數據傳送,取指和數據訪問都算上。和 D-Code 總線一樣,所有的數據傳送都是對齊的

外設總線
這是一條基于 APB 總線協議的 32 位總線。此總線來負責 0xE004_0000 – 0xE00F_FFFF 之間的私有外設訪問。但是,由于此 APB 存儲空間的一部分已經被 TPIU、 ETM 以及 ROM 表用掉了,就只留下了 0xE004_2000-E00F_F000 這個區間用于配接附加的(私有)外設。

調試訪問端口總線
調試訪問端口總線接口是一條基于“增強型 APB 規格”的 32 位總線,它專用于掛接調試接口,例如 SWJ-DP 和 SW-DP。

1.2?總線錯誤

當 AHB 接口上正在傳送數據時,如果回復了一個錯誤信號(error response),則會產生總線 faults,產生的場合可以是:
  • 取指,通常被稱作“預取流產”(prefetch abort)
  • 數據讀/寫,通常被稱作“數據流產”(data abort)

哪些因素會導致 AHB 回復一個錯誤信號??

  1. 企圖訪問無效的存儲器 region。常見于訪問的地址沒有相對應的存儲器。
  2. 設備還沒有作好傳送數據的準備。比如,在尚未初始化 SDRAM 控制器的時候試圖訪問 SDRAM。?
  3. 在企圖啟動一次數據傳送時,傳送的尺寸不能為目標設備所支持。例如,某設備只接受字型數據,卻試圖送給它字節型數據。?
  4. 因為某些原因,設備不能接受數據傳送。例如,某些設備只有在特權級下才允許訪問,可當前卻是用戶級。

二、非精準總線錯誤的由來

非精準總線錯誤(Imprecise Bus Fault)的存在主要源于現代處理器為提高性能而采用的異步內存訪問機制硬件優化設計。這類錯誤的核心特點是:內存訪問失敗與異常觸發之間存在時間差,導致處理器無法精確定位錯誤發生點。以下是具體原因和場景分析:

1. 寫緩沖(Write Buffer)機制

  • 原理:處理器為加速內存寫入操作,會將寫請求暫存到寫緩沖中,繼續執行后續指令而不必等待內存寫入完成。若寫緩沖在后續刷新到內存時失敗(如地址未映射、總線斷開),則觸發非精準錯誤。

2. DMA(直接內存訪問)操作

  • 原理:DMA 控制器直接訪問系統總線進行數據傳輸,與處理器并行工作。若 DMA 訪問內存失敗(如地址沖突、外設故障),處理器無法立即感知,需等待 DMA 完成或錯誤檢測機制觸發。
  • 示例
    // 啟動DMA傳輸(從外設到內存)
    DMA_StartTransfer(src_addr, dst_addr, size);// 處理器繼續執行其他代碼(不等待DMA完成)
    do_something_else();
    
    若 DMA 傳輸過程中dst_addr無效,錯誤會在 DMA 操作后期被檢測到,此時處理器可能已執行多條指令。

3. 緩存(Cache)與預取(Prefetch)機制

  • 緩存失效:若緩存行失效后需要從主存重新加載數據,但主存地址不可訪問,可能觸發非精準錯誤。
  • 指令預取失敗:處理器預取指令時若發生內存訪問錯誤,可能繼續執行已預取的后續指令,導致錯誤報告延遲。

4. 多周期內存訪問

  • 突發傳輸(Burst Transfer):處理器進行連續內存訪問時(如讀取數組),可能采用突發模式。若傳輸過程中某地址出錯,整個突發操作可能完成后才報告錯誤。
  • 示例
    // 連續讀取數組(可能觸發突發傳輸)
    for (int i = 0; i < 1000; i++) {sum += array[i];
    }
    
    array[500]地址無效,錯誤可能在循環結束后才被檢測到。

5. 外設總線異步錯誤

  • 外設通信失敗:如 SPI、I2C 等外設訪問共享內存時發生錯誤,可能通過中斷或狀態標志異步通知處理器,導致錯誤與處理不同步。
  • 示例
    // 向外設發送數據(通過內存映射寄存器)
    PERIPHERAL_DATA_REG = data;// 繼續執行其他代碼(外設可能在后臺處理數據)
    

    若外設訪問內存時出錯,處理器可能已執行到后續代碼。

三、小結

特性精準的總線錯誤非精準的總線錯誤
錯誤發生與處理的關系同步:指令執行立即暫停,異常立即觸發異步:指令繼續執行,異常在后續階段觸發
錯誤定位精確性精確:BFAR 寄存器保存錯誤地址不精確:BFAR 通常無效,無法準確定位錯誤
LR 寄存器(鏈接寄存器)值指向引發錯誤的指令指向錯誤檢測點之后的指令
BFAR 寄存器有效性SCB->HFSR.BFARVALID = 1(有效)SCB->HFSR.BFARVALID = 0(無效)
典型觸發場景指令直接訪問內存失敗(如訪問未映射地址)外設或 DMA 異步操作導致的內存訪問失敗

觸發條件對比

精準的總線錯誤
  • 內存訪問未映射地址:例如訪問0xFFFFFFFF
  • 內存訪問權限沖突:如向只讀區域寫入數據。
  • 非對齊訪問:例如在不支持非對齊訪問的架構上執行非對齊的字訪問。
  • 指令預取失敗:取指階段訪問指令存儲器失敗。
非精準的總線錯誤
  • DMA 操作錯誤:直接內存訪問過程中發生總線故障。
  • 外設異步錯誤:如 SPI/I2C 傳輸時的 FIFO 溢出。
  • 緩存或寫緩沖錯誤:寫緩沖刷新到內存時失敗。
  • 多周期內存訪問:如突發傳輸(burst transfer)過程中出錯。

四、調試與排查建議

場景精準錯誤排查方法非精準錯誤排查方法
錯誤地址定位讀取SCB->BFAR分析上下文,檢查 DMA / 外設操作
寄存器檢查SCB->HFSR.BFARVALID == 1SCB->HFSR.BFARVALID == 0
典型代碼問題野指針、數組越界、錯誤的內存映射DMA 配置錯誤、外設中斷處理不當

ref:

HardFault錯誤信息分析定位_hardfault定位問題-CSDN博客

https://mbb.eet-china.com/forum/topic/114149_1_1.html

HardFault全解析:從寄存器診斷到精準定位-CSDN博客

Documentation – Arm Developer

《ARMv7-M Architecture Reference Manual》

C 總線錯誤 (bus error) - 段錯誤 (segmentation fault)-CSDN博客

ARM異常處理(3):Bus faults、Memory management faults、Usage faults、Hard faults詳解-CSDN博客

Cortex‐M3 權威指南》 ,第七章,總線 Faults

AMBA – Arm?

?ARM bus hierarchy - ARM highspeed bus/AHB and ARM peripheral bus/APB

AMBA Specifications – Arm?

嵌入式調試必修課11_MCU總線接口深度解析(Part I):I-Code/D-Code/S-Bus的工作原理_嗶哩嗶哩_bilibili

Cortex-M3 I-Code,D-Code,系統總線及其他總線接口_m3 編譯區分 如何d總線,s總線-CSDN博客?

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

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

相關文章

Unity UGUI的Canvas以及內部元素之間遮擋關系調整

調UI遮擋關系有三種思路&#xff1a; 調Sorting Layer&#xff0c;層級越后渲染到越前面調Order in Layer&#xff0c;數字越大渲染到越前面修改UI材質調RenderQueue&#xff0c;數字越大越后渲染 對前兩種比較陌生的同學可以看一下我以前寫的這篇&#xff0c;不看也沒事&…

SpringCloud系列(46)--SpringCloud Bus實現動態刷新全局廣播

前言&#xff1a;上一節中我們簡單的介紹了什么是SpringCloud Bus&#xff0c;SpringCloud Bus的用處&#xff0c;而本節內容則是使用SpringCloud Bus來實現動態刷新全局廣播。 實現動態刷新全局廣播的設計思想的架構圖 注&#xff1a;在實現SpringCloud Bus動態刷新全局廣播前…

Java+Vue開發的電子招投標管理系統,實現全流程線上操作,高效規范,助力招投標活動透明公正開展

前言&#xff1a; 在數字化浪潮席卷全球的當下&#xff0c;傳統招投標模式面臨著效率低下、信息不透明、管理成本高等諸多挑戰。電子招投標管理系統應運而生&#xff0c;它借助先進的互聯網技術和信息化手段&#xff0c;實現了招投標全流程的電子化、自動化和智能化管理。該系…

MyBatisPlus-02-核心功能

文章目錄【README】【1】MyBatis-plus常見注解【2】MyBatis-Plus常見配置【2.1】MyBatis-Plus配置示例【3】MyBatisPlus核心內容【3.1】條件構造器【3.1.1】業務場景1-帶多字段條件的查詢-使用QueryWrapper【3.1.2】業務場景2-帶條件的更新-使用QueryWrapper【3.1.3】業務場景3…

ZYNQ MPSOC GTH aurora8b10b IP的修改與仿真

1 ip設置好后的頂層模塊接口: 根據自己的開發板修改接口如下: odule gtwizard_ultrascale_0_example_top (// Differential reference clock inputsinput wire mgtrefclk0_x0y1_p,input wire mgtrefclk0_x0y1_n,// Serial data ports for transceiver channel 0input w…

機器學習之線性回歸

主要參考&#xff1a; 機器學習| 算法筆記-線性回歸&#xff08;Linear Regression&#xff09; - 知乎 (zhihu.com) 2-2 線性回歸_嗶哩嗶哩_bilibili Python機器學習實戰&#xff1a;線性回歸模型預測波士頓房價_嗶哩嗶哩_bilibili 回歸分析 在數學和統計學中&#xff0c;回歸…

Boost.Asio學習(2):同步讀寫

Asio 的 buffer 是什么&#xff1f; boost::asio::buffer(...) 是一個函數模板&#xff0c;用于創建一個通用的 buffer 對象&#xff0c;可傳遞給 I/O 函數&#xff08;如 read, write, read_some, write_some 等&#xff09;。 它返回的是 mutable_buffer 或 const_buffer 的…

Java中如何枚舉正則表達式捕獲組的名字

在使用正則表達式在匹配文本時&#xff0c;除了可以通過表達式捕獲命中的文本串外&#xff0c;還可以對捕獲的文本串進行命名。尤其是在解析日志的場景中&#xff0c;經常會被用到。表達式如下&#xff1a; \<(?<pri>\d)\>(?<time>.*) (?<host>\S)…

CentOS 系統高效部署 Dify 全攻略

系列文章目錄 CentOS系統高效部署fastGPT全攻略 文章目錄 系列文章目錄一、前言二、準備工作與系統要求三、安裝 Docker 與 Docker Compose四、部署 Dify 核心服務五、數據庫與存儲配置六、網絡與安全優化七、監控與運維八、升級與擴展九、附錄與資源關鍵命令速查表官方文檔…

xyctf2025第三屆京麒CTF

一.MISC 1.XGCTF 直接ai搜索一遍找到了出題人的博客LamentXU 2024-2025年終總結 - LamentXU - 博客園 知道了原題是ciscn中的 在LamentXU的博客亂逛Patriot CTF 2024 MISC 部分 wp - LamentXU - 博客園 找到了博客網站,讓后搜索ciscn扎到了博客 CISCN華東南WEB-Polluted |…

Python爬蟲 模擬登錄 requests版

前言 網站必須是登錄狀態才能查看網站信息,是最常見的反爬手段,下面我分享一下request模擬登錄狀態進行請求 目錄 模擬登錄的原理 直接復制網站Cookie模擬登錄狀態 通過登錄接口信息破解出Cookie模擬登錄狀態 模擬登錄的原理 網站是使用Cookie和session記錄網站的登錄狀態…

一些改進策略

1.要計算一個神經網絡模型的總參數量、可訓練參數量以及計算量&#xff08;FLOPs&#xff09;&#xff0c;可以使用以下步驟&#xff1a; ### 計算總參數量和可訓練參數量&#xff1a; 1. **逐層計算參數量**&#xff1a; - 對于每一層&#xff0c;確定該層的參數量。這通…

React Native響應式布局實戰:告別媒體查詢,擁抱跨屏適配新時代

前言:當設計師說"這個頁面要適配所有手機和平板…" “什么?React Native不支持CSS媒體查詢?那怎么實現響應式布局?”——這是很多剛接觸React Native的開發者會遇到的靈魂拷問。 但別慌,沒有@media,我們照樣能玩轉多端適配!想象一下:你的App在iPhone SE的小…

[Java惡補day39] 整理模板·考點六【反轉鏈表】

考點六【反轉鏈表】 【考點總結】 1. 206. 【題目】 【核心思路】 【復雜度】 時間復雜度&#xff1a; O ( ) O() O()。 空間復雜度&#xff1a; O ( ) O() O()。 【代碼】 92. 【題目】 【核心思路】 【復雜度】 時間復雜度&#xff1a; O ( ) O() O()。 空間復雜度&a…

7,TCP服務器

1,創建一個工程 文件目錄:

Modbus_TCP_V5 新功能

odbus TCP 服務器指令 MB_SERVER V5.0 新功能概述 如下圖1所示服務器指令 MB_SERVER 從 V5.0 以后增加了三個新功能&#xff0c;分別為&#xff1a; 訪問數據塊中的數據區域&#xff0c;而不是直接訪問 MODBUS 地址過程映像區的讀訪問限制統計變量 NDR_immediate 和 DR_immed…

2-RuoYi-UI管理平臺的啟動

RuoYi-UI是RuoYi后端框架的管理中心(基于 Vue.js 的前端項目)的詳細配置與啟動指南,結合官方文檔和常見實踐整理,涵蓋環境準備、配置修改、啟動流程及問題排查。 ?? 一、環境準備 Node.js 版本要求:≥12.0(推薦 ≥14.0 或 18.18+ 適配 Vue3) 安裝后驗證: node -v …

WPF學習筆記(21)ListBox、ListView與控件模板

ListBox與控件模板 一、 ListBox默認控件模板詳解二、ItemsPresenter集合數據呈現1. 概述2. 示例 三、 ListView默認控件模板詳解1. 概述2. 示例 一、 ListBox默認控件模板詳解 WPF 中的大多數控件都有默認的控件模板。 這些模板定義了控件的默認外觀和行為&#xff0c;包括控…

操作系統【2】【內存管理】【虛擬內存】【參考小林code】

本文完全參考 虛擬內存內存分段內存分頁段頁式內存管理Linux內存管理 一、虛擬內存 1. 單片機的絕對物理地址 以單片機作為引子&#xff0c;它沒有操作系統&#xff0c;每次寫完程序是借助工具將程序燒錄進單片機&#xff0c;程序才能運行。 單片機由于沒有操作系統&#…

【王樹森推薦系統】召回05:矩陣補充、最近鄰查找

概述 這節課和后面幾節課將詳細講述向量召回&#xff0c;矩陣補充是向量召回最簡單的一種方法&#xff0c;不過現在已經不太常用這種方法了本節課的矩陣補充是為了幫助理解下節課的雙塔模型上節課介紹了embedding&#xff0c;它可以把用戶ID和物品ID映射成向量 矩陣補充 模型…