前言
前段時間某客戶反饋,在使用STM32H7的FMC時,如果使能了D-CACHE就運行不正常。數據沒有寫到FMC外部的存儲器里,FMC接口也沒有波形。而不使能D-CACHE是工作則是正常的。
其實對于這個問題,如果了解STM32H7的架構的話,就很容易理解了。下面我們就來看一看到底是什么原因讓客戶覺得使能DCACHE后FMC就工作不正常了。
STM32H7的架構
下面是STM32H7架構圖中和FMC相關的部分。從圖中可以看到,STM32H7是基于Cortex-M7內核,在內部的Cortex-M7內核里帶有一個16KB的D-CACHE和一個16KB的I-CACHE。內核通過AXIM總線連接到64位的AXI總線矩陣,再經過這個總線矩陣連接到FMC接口實現對外部存儲器的訪問。這里,當D-CACHE使能的時候,對FMC接口上的存儲器的操作會用到內核的緩存(CACHE)的。
使能了CACHE的好處就是可以提高內核訪問存儲器的速度。為什么使用緩存能提高速度呢?是因為在操作可以被緩存的存儲器的時候,內核不是每次都去直接操作這些存儲器,而是從緩存里讀取數據,或者將數據先寫到緩存里。看到這里,是不是覺得和前面客戶說的現象有點聯系了。
Cache的操作
簡單的說緩存工作時有兩種方式:回寫和透寫。
回寫【write back】就是數據平時只寫到緩存【cache】,必要時才同步到下一級存儲器中。
透寫【write through】就是數據每次都同時寫到緩存和下一級存儲器中。這種方式可以解決數據不一致的問題,但同時也會消耗更多的總線訪問時間。
緩存的操作方式,在啟用緩存后有一個默認的設置 。也就是下面這張表:
請參考AN4839了解更多的關于Cache的使用說明。
問題分析及解決
客戶是通過FMC的NOR存儲控制器外接一個FPGA。映射的地址范圍是0x60000000~0x7FFFFFFF。從上圖可以看到,它默認的緩存操作方式是WBWA(回寫寫分配)。也就是說,當打開DCACHE后,所有對該地址范圍的操作都會先到緩存。這也解釋了為什么客戶發現數據沒有真正寫到外部存儲器中。客戶的數據需要實時寫到FPGA中進行計算。所以對這個應用場景,回寫的設置就不合適了。
對于客戶的這個應用,可以通過MPU來進行配置,將0x60000000~0x7FFFFFFF范圍地址的CACHE設置為透寫的方式,這樣數據就會實時的寫到FPGA中去了。所以,針對這種情況,我們可以通過MPU合理配置來解決。
通過MPU,可以配置不同存儲器空間的訪問權限和Cache策略。HAL庫里面提供了對應的函數和例程,參照例程用下面這段代碼就可以解決客戶的問題了。數據每次都是直接寫到FPGA中,而不是緩存到內核的DCACHE中。
總結
D-CACHE的使用可以幫我們提高程序運行的性能,但也會帶來緩存和二級存儲器數據不一致和緩沖不擊中帶來的程序執行的時間不確定的情況,需要客戶根據實際的應用來進行選擇。對于實時性要求高的數據,可以像前面一樣使用MPU配置成透寫的方式,或者將數據放到DTCM RAM中。另外,在本文中只用MPU配置了FMC映射的部分存儲區域。在實際使用中,應該對所有用到的存儲空間(比如Flash, SRAM區)的屬性根據實際情況進行合理配置,以免引起其它的問題。詳情請參考AN4838.
-
D-CACHE
+關注
關注
0文章
1瀏覽量
1058
原文標題:使能D-CACHE時FMC外設運行不正常的案例
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
stm32H747在M4內核使用AXI SRAM不正常的原因?
啟用D-Cache的TouchGFX 4.16.1發生硬故障如何處理
自架電子郵件系統收發不正常的幾種原因
STemWin_Library_V1.1.1 中 STM324x9IEVAL 的 RTOS 工程顯示不正常的問題
交流接觸器吸合不正常的原因有哪些
激光切割機復位不正常帶來的危害和四大原因
STM32上電復位不正常 手動復位正常的原因資料下載
![<b class='flag-5'>STM32</b>上電復位<b class='flag-5'>不正常</b> 手動復位<b class='flag-5'>正常</b>的<b class='flag-5'>原因</b>資料下載](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
關于STM32串口燒錄后程序正常運行,但是掉電或復位后程序不正常運行的可能解決方法。
![關于<b class='flag-5'>STM32</b>串口燒錄后程序<b class='flag-5'>正常</b><b class='flag-5'>運行</b>,但是掉電或復位后程序<b class='flag-5'>不正常</b><b class='flag-5'>運行</b>的可能解決方法。](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
常見電機由機械故障引起的不正常聲音有哪些
自舉電路不正常工作
伺服電機振動不正常原因和維修及案例分析
![伺服電機振動<b class='flag-5'>不正常</b><b class='flag-5'>原因</b>和維修及案例分析](https://file1.elecfans.com//web3/M00/02/AF/wKgZPGdiDP6AQR0IAANOyk_5eNU554.png)
評論