有STM32用戶反饋,他在使用STM32H750VB編寫用戶引導程序【BOOT CODE】和應用程序【APP CODE】。根據數據手冊描述,STM32H750有128K Bytes的片內flash,地址是從0x0800 0000~~0x0801 FFFF。他將用戶bootloader放在0x0800 0000~0x0800 2FFF,應用程序放在0x08003000~0x0801 FFFF。但當他按照這樣的存儲分配設計時,發現總是沒法實現從BOOT區到APP區的跳轉。
基于該用戶的反饋信息,給他做了些提醒,比如中斷矢量表定位問題,客戶都說已經注意到了,代碼應該沒有問題。我這邊就客戶反饋的問題找了塊STM32H743的板做了驗證測試。發現從BOOT區到APP區的跳轉并沒有異常,那么客戶怎么又有問題呢?
再次查看了客戶郵件的反饋信息。他用的默認內部SRAM區為AXI SRAM,地址區間在0x24000000 --0x2407FFFF,即下面表格中的A區,而我使用的默認內部SRAM區是DTCM SRAM,地址區間在0x20000000 -0x2001FFFF,即下面表格中的B區。
難道是這個差別導致跳轉的不同結果?當然,這兩個SRAM區在使用上還是有差異的。
我嘗試著將測試工程的默認SRAM區從TCM RAM也改成AXI SRAM進行測試。果真沒法實現從BOOT區到APP區的跳轉!看來跳轉失敗跟選擇這個默認SRAM區有關系。也就是說當我默認使用DTCM RAM時跳轉正常,如果默認使用AXI SRAM時會跳轉失敗。
我們知道,STM32H7系列芯片支持D-CACHE/I-CACHE。具體到這里,如果使用AXI SRAM往往會用到D-CACHE。我們的工程代碼里也的確開啟了D-CACHE,如果是因為這個原因,如果在做跳轉操作之前關閉D-CACHE應該就能實現正常跳轉。 于是對代碼稍加調整,實際上也就是加了句關閉D-CACHE的代碼。【紅色方框處】
再次進行測試,此時即使使用AXI RAM做為默認內存空間,從用戶BOOT區也能可靠跳轉到APP區,完美實現。
這里涉及到STM32H7系列芯片內部不同存儲區的訪問特性和D-Cache相關知識,細節還是挺多的。有興趣的話,可以自行查看相關技術手冊做進一步的了解和探究。有時間,后續將在這里做進一步交流。此時分享該應用案例,一做應用提醒,二做拋磚引玉。
上一篇:STM32單片機程序編譯及下載配置
下一篇:STM32 wavplayer播放單聲道音頻的處理方法
推薦閱讀最新更新時間:2025-05-04 10:56


設計資源 培訓 開發板 精華推薦
- EVAL-RS485FD8EBZ,用于 ADM1490E 半雙工 RS-485 收發器的評估板,采用 8 引腳 SOIC 封裝
- 松下PAN9026:短距離全方位解決方案
- ADR5045B 5V 負精密基準配置的典型應用
- LT3663HMS8E-5、具有隔離式 3.3V 輸出的 5V 降壓型穩壓器的典型應用
- 基于32U4-MU開發板的USB手柄第二彈
- 電網集中器
- LTC2852、3.3V、20Mbps RS485/RS422收發器典型應用電路
- 用于 LED 照明的 3-LED 通用 LED 驅動器
- LT6654AMPS6-3.3 升壓輸出電流電壓基準的典型應用
- 使用 Analog Devices 的 LTC1775CS 的參考設計
- vs2005 pxa270
- 對嵌入式linux開發的一些疑問
- 嵌入式C語言和通用C語言有什么區別?
- EEWORLD大學堂----驅動物聯網工作的三元素
- ret = RegQueryValueEx(hKEY,TEXT("Name"),0,1,(PBYTE)&dwReg,MAX_PATH);這樣用對嗎?我想
- 新手用TMS320C6000編程,程序無法進入中斷,不明白原因,求幫忙
- E交換試水第一帖|EZ430-RF2500
- 【視頻分享】AFE5805 用于超聲波的 8 通道模擬前端
- 飛思卡爾imx主控,移植uboot的phy芯片lan8710/lan8720
- 關于STM8S003芯片的內部AD掃描問題