0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

stm32案例分享之使D-CACHE時FMC外設運行不正常原因

STM32單片機 ? 來源:互聯(lián)網 ? 作者:佚名 ? 2017-10-30 15:45 ? 次閱讀

前言

前段時間某客戶反饋,在使用STM32H7的FMC時,如果使能了D-CACHE就運行不正常。數(shù)據(jù)沒有寫到FMC外部的存儲器里,F(xiàn)MC接口也沒有波形。而不使能D-CACHE是工作則是正常的。

其實對于這個問題,如果了解STM32H7的架構的話,就很容易理解了。下面我們就來看一看到底是什么原因讓客戶覺得使能DCACHE后FMC就工作不正常了。

STM32H7的架構

下面是STM32H7架構圖中和FMC相關的部分。從圖中可以看到,STM32H7是基于Cortex-M7內核,在內部的Cortex-M7內核里帶有一個16KB的D-CACHE和一個16KB的I-CACHE。內核通過AXIM總線連接到64位的AXI總線矩陣,再經過這個總線矩陣連接到FMC接口實現(xiàn)對外部存儲器的訪問。這里,當D-CACHE使能的時候,對FMC接口上的存儲器的操作會用到內核的緩存(CACHE)的。

使能了CACHE的好處就是可以提高內核訪問存儲器的速度。為什么使用緩存能提高速度呢?是因為在操作可以被緩存的存儲器的時候,內核不是每次都去直接操作這些存儲器,而是從緩存里讀取數(shù)據(jù),或者將數(shù)據(jù)先寫到緩存里??吹竭@里,是不是覺得和前面客戶說的現(xiàn)象有點聯(lián)系了。

Cache的操作

簡單的說緩存工作時有兩種方式:回寫和透寫。

回寫【write back】就是數(shù)據(jù)平時只寫到緩存【cache】,必要時才同步到下一級存儲器中。

透寫【write through】就是數(shù)據(jù)每次都同時寫到緩存和下一級存儲器中。這種方式可以解決數(shù)據(jù)不一致的問題,但同時也會消耗更多的總線訪問時間。

緩存的操作方式,在啟用緩存后有一個默認的設置 。也就是下面這張表:

請參考AN4839了解更多的關于Cache的使用說明。

問題分析及解決

客戶是通過FMC的NOR存儲控制器外接一個FPGA。映射的地址范圍是0x60000000~0x7FFFFFFF。從上圖可以看到,它默認的緩存操作方式是WBWA(回寫寫分配)。也就是說,當打開DCACHE后,所有對該地址范圍的操作都會先到緩存。這也解釋了為什么客戶發(fā)現(xiàn)數(shù)據(jù)沒有真正寫到外部存儲器中??蛻舻臄?shù)據(jù)需要實時寫到FPGA中進行計算。所以對這個應用場景,回寫的設置就不合適了。

對于客戶的這個應用,可以通過MPU來進行配置,將0x60000000~0x7FFFFFFF范圍地址的CACHE設置為透寫的方式,這樣數(shù)據(jù)就會實時的寫到FPGA中去了。所以,針對這種情況,我們可以通過MPU合理配置來解決。

通過MPU,可以配置不同存儲器空間的訪問權限和Cache策略。HAL庫里面提供了對應的函數(shù)和例程,參照例程用下面這段代碼就可以解決客戶的問題了。數(shù)據(jù)每次都是直接寫到FPGA中,而不是緩存到內核的DCACHE中。

總結

D-CACHE的使用可以幫我們提高程序運行的性能,但也會帶來緩存和二級存儲器數(shù)據(jù)不一致和緩沖不擊中帶來的程序執(zhí)行的時間不確定的情況,需要客戶根據(jù)實際的應用來進行選擇。對于實時性要求高的數(shù)據(jù),可以像前面一樣使用MPU配置成透寫的方式,或者將數(shù)據(jù)放到DTCM RAM中。另外,在本文中只用MPU配置了FMC映射的部分存儲區(qū)域。在實際使用中,應該對所有用到的存儲空間(比如Flash, SRAM區(qū))的屬性根據(jù)實際情況進行合理配置,以免引起其它的問題。詳情請參考AN4838.

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • D-CACHE
    +關注

    關注

    0

    文章

    1

    瀏覽量

    1051

原文標題:使能D-CACHE時FMC外設運行不正常的案例

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    stm32H747在M4內核使用AXI SRAM不正常原因?

    ,斷電重啟之后也不正常。不正常的現(xiàn)象是2個內核里面的點燈程序都無法運行,感覺是哪里死掉了一樣。在M7內核里已經配置了MPU和cache。在map文件看到數(shù)組開辟的起始地址確實是0x24
    發(fā)表于 03-28 09:20

    STM32串口發(fā)送不正常原因?如何解決?

    STM32串口發(fā)送不正常原因?如何解決?
    發(fā)表于 12-09 07:50

    啟用D-Cache的TouchGFX 4.16.1發(fā)生硬故障如何處理

    你好,我有一個帶有 stm32h743 的自定義板...我設計了一個帶有 touchGFX 的圖形頁面,當啟用 D-cache 時,系統(tǒng)檢測到一些硬故障,特別是當我觸摸一個按鈕來更改屏幕時,有時它可以工作,有時卻不能,當我禁用 D-ca
    發(fā)表于 12-26 09:45

    不正常自行放電原因

    不正常自行放電原因         極板材料或電解液有雜質,這樣雜質與極板或不同雜質間就會產生電位差,形成閉合的“局部電池”而產
    發(fā)表于 11-10 15:21 ?642次閱讀

    自架電子郵件系統(tǒng)收發(fā)不正常的幾種原因

    自架電子郵件系統(tǒng)收發(fā)不正常的幾種原因 1.DNS 服務器的設置不對。   2.DNS 服務器不正常工作。   3.MX 記錄不對或者沒有刷新
    發(fā)表于 01-29 11:10 ?715次閱讀

    STemWin_Library_V1.1.1 中 STM324x9IEVAL 的 RTOS 工程顯示不正常的問題

    STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程顯示不正常問題
    發(fā)表于 12-14 16:02 ?0次下載

    不正常關電腦會怎樣

    本視頻主要詳細介紹了不正常關電腦會怎樣,分別有硬件損壞、系統(tǒng)影響、損壞磁盤、導致數(shù)據(jù)丟失。
    的頭像 發(fā)表于 03-12 16:29 ?3897次閱讀

    交流接觸器吸合不正常原因有哪些

    交流接觸器吸合不正常,是指交流接觸器吸合過于緩慢,觸頭不能完全閉合,鐵芯發(fā)出異常噪聲等不正常現(xiàn)象。交流接觸器吸合不正常,可能是以下幾個原因
    的頭像 發(fā)表于 04-11 11:21 ?1.7w次閱讀

    激光切割機復位不正常帶來的危害和四大原因

    激光切割機是現(xiàn)代常用的加工設備,在加工時,總會出現(xiàn)些讓人頭疼的問題,遇到這些情況的時候,我們應該怎么去處理呢?下面就簡單的分析下激光切割機復位不正常原因。
    的頭像 發(fā)表于 09-15 16:19 ?6060次閱讀

    STM32上電復位不正常 手動復位正常原因資料下載

    電子發(fā)燒友網為你提供STM32上電復位不正常 手動復位正常原因資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,
    發(fā)表于 04-25 08:42 ?38次下載
    <b class='flag-5'>STM32</b>上電復位<b class='flag-5'>不正常</b> 手動復位<b class='flag-5'>正常</b>的<b class='flag-5'>原因</b>資料下載

    STM32H7的FMC外設D_Cache使能的情況下運行不正常

    STM32H7的FMC外設D_Cache使能的情況下運行
    發(fā)表于 08-04 18:19 ?13次下載
    <b class='flag-5'>STM32</b>H7的<b class='flag-5'>FMC</b><b class='flag-5'>外設</b>在<b class='flag-5'>D_Cache</b><b class='flag-5'>使</b>能的情況下<b class='flag-5'>運行</b><b class='flag-5'>不正常</b>

    關于STM32串口燒錄后程序正常運行,但是掉電或復位后程序不正常運行的可能解決方法。

    關于STM32串口燒錄后程序正常運行,但是掉電或復位后程序不正常運行的可能解決方法。 BOOT0 BOOT1
    發(fā)表于 12-14 18:52 ?21次下載
    關于<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>的可能解決方法。

    常見電機由機械故障引起的不正常聲音有哪些

    首先應判斷是機械還是電氣的原因引起的? 方法是:接上電源,有不正常的聲音存在,切斷電源,不正常聲音仍存在,則為機械故障;否則為電氣方面故障。
    發(fā)表于 02-17 10:35 ?2056次閱讀

    自舉電路不正常工作

    電路不正常工作可能會表現(xiàn)為無法正確啟動設備,也可能會導致設備啟動后運行不穩(wěn)定,甚至直接崩潰。針對這種情況,我們需要仔細排查問題,找到原因并進行修復。下面就讓我們一起詳細地了解一下自舉電路不正常
    的頭像 發(fā)表于 09-17 09:44 ?954次閱讀

    伺服電機振動不正常原因和維修及案例分析

    。本文將深入探討伺服電機振動不正常原因,并提供相應的維修建議,以幫助技術人員快速定位和解決問題。 ? ? ? 一、伺服電機振動不正常原因 ? ? ? 1. 機械
    的頭像 發(fā)表于 12-18 09:22 ?156次閱讀
    伺服電機振動<b class='flag-5'>不正常</b><b class='flag-5'>原因</b>和維修及案例分析