MICROCHIP TB3308 使用快取維護在執行時處理快取一致性問題
介紹
對於在具有可快取記憶體區域的微控制器 (MCU) 上運行的應用程式來說,快取一致性問題是不可避免的,這些微控制器使用直接記憶體存取 (DMA) 進行資料傳輸操作。這是因為當 DMA 在外部裝置和實體記憶體之間傳輸資料時,CPU 從快取執行讀取/寫入操作。
處理快取一致性的方法之一要求應用程式使用快取維護操作在運行時管理快取。 MPLAB® Harmony v3 為 PIC32MZ 裝置提供快取維護應用程式介面 (API)。
本文檔介紹了應用程式如何使用 MPLAB Harmony v3 下的快取管理 API 在執行時間管理快取一致性問題。
筆記: 本文檔中討論的概念對於所有 PIC32MZ MCU 都是通用的。 PIC32MZ EF 用作 examp來討論這些概念。
描述
下圖說明了 DMA 從 PIC32MZ EF MCU 上的 SRAM 讀取資料時觀察到的快取一致性問題。
圖 1-1。 記憶體到週邊傳輸(DMA 從 SRAM 讀取)
應用程式提交請求以將資料緩衝區 TxBuffer 值“ABCDEFGH”傳輸到週邊。 CPU 將要寫入週邊裝置的資料「ABCDEFGH」填入 DMA 寫入緩衝區 (TxBuffer)。
但由於設定的快取策略Write Back和Write Allocate,DMA寫緩衝區(TxBuffer)可能無法立即寫入主存,寫入的資料可能會保留在資料快取中。主記憶體中的 DMA 寫入緩衝區 (TxBuffer) 仍包含舊值「12345678」。
當 DMA 被觸發以啟動記憶體到外設的傳輸時,DMA 從主記憶體中讀取緩衝區(TxBuffer)為「12345678」。結果,DMA 最終將過時的資料傳輸到週邊。
下圖說明了 DMA 寫入 SRAM 時觀察到的快取一致性問題。
圖 1-2。週邊到記憶體傳輸(DMA 寫入 SRAM)
應用程式提交請求以從外設接收 RxBuffer 中值為「12345678」的資料。 DMA 使用 SRAM 中的值「12345678」填入 RxBuffer。然而,資料快取並沒有更新,它繼續保存先前的資料。當 CPU 讀取 RxBuffer 時,它最終會讀取緩衝區中包含的先前值作為「ABCDEFGH」。
處理快取一致性
記憶體到週邊傳輸(DMA 從 SRAM 讀取)和周邊到記憶體傳輸(DMA 寫入 SRAM)中說明了處理快取一致性問題的兩種方法。這些方法涉及應用程式使用維護操作在運行時管理快取。這些操作包括執行以下操作的能力:
使緩存無效: 將快取行標記為無效。後續存取會強制將資料從主記憶體複製到快取。
清理快取: 將標記為髒的快取行寫回主記憶體要處理記憶體到週邊傳輸(DMA 從 SRAM 讀取)中討論的快取一致性,請執行以下操作:
- 應用程式以值“ABCEDFGH”填入寫入資料緩衝區(TxBuffer)。由於預設的快取策略(Write Back 和 Write Allocate),寫入的資料可能在快取中。
圖 1-3。填充寫入緩衝區 - 透過呼叫清理快取 API,將值為「ABCDEFGH」的寫入資料緩衝區 (TxBuffer) 刷新到主記憶體。
圖 1-4。刷新寫入緩衝區 - 應用程式提交請求,將值為「ABCDEFGH」的 TxBuffer 資料傳輸到週邊。
圖 1-5。寫入外設
若要處理外設到記憶體傳輸(DMA 寫入 SRAM)中討論的快取一致性,請執行以下步驟:
- 應用程式呼叫無效快取 API 將快取行標記為無效。
圖 1-6。使緩存失效 - 應用程式提交請求以從外設接收 RxBuffer 中值為「12345678」的資料。
- DMA 使用 SRAM 中的值「12345678」填入 RxBuffer。
- 由於RxBuffer對應的快取行處於無效狀態,CPU的讀取存取會導致RxBuffer從主記憶體複製到資料快取中。
圖 1-7。處理外設到記憶體傳輸快取一致性
執行
配置
在 PIC3 MZ EF 的 MPLAB Harmony v32 專案中,快取維護作業由 MPLAB Harmony v3 設定器(MHC)或 MPLAB 程式碼配置器(MCC)啟用。在 MHC 或 MCC 中,可以在專案圖 > 系統 > MIPS 配置 > 快取下找到配置設定。
圖 2-1。 MHC 快取配置
資料快取維護 API
MPLAB Harmony v3 提供以下資料快取維護 API:
表 2-1。資料快取維護 API
姓名 | 描述 |
DCACHE_INVALIDATE(無效) | 在啟用之前使整個資料快取失效。 |
DCACHE_CLEAN_BY_ADDR(uint32_t addr,size_t sz) | 寫回並使資料高速緩存中的位址範圍無效。 |
DCACHE_INVALIDATE_BY_ADDR(uint32_t addr,size_t sz) | 使資料高速緩存中的位址範圍無效。 |
DCACHE_CLEAN_INVALIDATE_BY_ADDR(uint32_t addr,size_t sz) | 寫回並使資料高速緩存中的位址範圍無效。 |
筆記:
- MCU 特定資料和指令快取維護 API 可作為外設庫 (PLIB) plib_cache.c 提供。請參閱 PLIB 應用程式 examp樂在:
https://github.com/Microchip-MPLAB-Harmony/csp_apps_pic32mz_ef/tree/master/apps/cache/cache_maintenance. - 使用透過位址 API 進行快取清理和快取無效時:
- 地址: 必須與快取行大小邊界對齊。這意味著 DMA 緩衝區位址必須與 16 位元組邊界對齊。
- 尺寸: 必須是快取行大小的倍數。這意味著 DMA 緩衝區大小必須是 16 個位元組的倍數。
Example
以下代碼例如amp此檔案示範如何使用資料快取維護 API 以及 MPLAB Harmony v3 DMA 週邊程式庫 API 透過 UART 介面讀寫資料。
詳細原始碼請參考PLIB應用examp樂在:
https://github.com/Microchip-MPLAB-Harmony/csp_apps_pic32mz_ef/tree/master/apps/cache/cache_maintenance.
筆記: 上面討論的高速緩存一致性問題也可以在連結時透過使用爭用資料緩衝區的一致性變數屬性來處理。
無符號 int __attribute__((相干)) 緩衝區[1024];
在此程式碼中,編譯器(在連結時)在不可快取的記憶體區域 KSEG1024 中分配 1 個元素。
參考
以下文件被列為資源。有關快取一致性和相關 Microchip 產品的更多信息,請參閱 Microchip Web網站,或聯繫當地的 Microchip 銷售代表。
- 在 PIC1MZ 裝置上使用 L32 快取
- PIC32MZ EF 快取維護 PLIB Example
- MPLAB Harmony v3 快速文件包提供獨立的幫助頁面,讓使用者開始在 Microchip 32 位元 SAM 和 PIC32 MCU 上開發應用程式。下載quick_docs儲存庫並從index.html開始 file 在 docs 資料夾中可用。
線上版本可在以下位置取得: microchip-mplab-harmony.github.io/quick_docs/. - MPLAB Harmony v3登陸 web 頁: www.microchip.com/mplab/mplab-harmony
微芯片 Web地點
Microchip 透過我們的網站提供線上支持 web站點位於 www.microchip.com/。這 web網站用於製作 file客戶可以輕鬆獲取資訊和資訊。一些可用的內容包括:
- 產品支援 – 數據表和勘誤表、應用筆記和 samp文件程式、設計資源、使用者指南和硬體支援文件、最新軟體版本和存檔軟體
- 一般技術支持 – 常見問題 (FAQ)、技術支持請求、在線討論組、Microchip 設計合作夥伴計劃成員列表
- Microchip 業務 – 產品選擇器和訂購指南、最新的 Microchip 新聞稿、研討會和活動列表、Microchip 銷售辦事處、分銷商和工廠代表列表
產品變更通知服務
Microchip 的產品變更通知服務有助於讓客戶了解 Microchip 產品的最新信息。 每當有與特定產品系列或感興趣的開發工具相關的更改、更新、修訂或勘誤表時,訂閱者都會收到電子郵件通知。
要註冊,請訪問 www.microchip.com/pcn 並依照註冊說明進行操作。
客戶支援
Microchip 產品的使用者可以透過多種管道獲得協助:
- 經銷商或代表
- 當地銷售辦事處
- 嵌入式解決方案工程師 (ESE)
- 技術支援
客戶應聯絡其經銷商、代表或 ESE 尋求支援。當地銷售辦事處也可以為客戶提供協助。本文檔中包含銷售辦事處和地點的清單。
技術支援可透過 web網站位於: www.microchip.com/support
Microchip 設備代碼保護功能
請注意 Microchip 產品上代碼保護功能的以下詳細資訊:
- Microchip 產品符合其特定 Microchip 資料表中所包含的規格。
- Microchip 相信,其產品系列在按預期方式、符合操作規範和正常條件下使用時是安全的。
- Microchip 重視並積極保護其知識產權。 嚴禁嘗試違反 Microchip 產品的代碼保護功能,這可能違反《數字千年版權法》。
- Microchip 或任何其他半導體製造商都無法保證其程式碼的安全性。代碼保護並不意味著我們保證產品「牢不可破」。代碼保護不斷發展。 Microchip 致力於不斷改進我們產品的程式碼保護功能。
法律聲明
本出版物及其信息僅可用於 Microchip 產品,包括設計、測試 Microchip 產品並將其與您的應用程序集成。 以任何其他方式使用此信息均違反這些條款。 有關設備應用程序的信息僅為您提供方便而提供,可能會被更新所取代。 您有責任確保您的應用程序符合您的規範。 如需更多支持,請聯繫您當地的 Microchip 銷售辦事處,或通過以下網址獲取更多支持 www.microchip.com/en-us/support/design-help/client-support-services.
此信息由 MICROCHIP“按原樣”提供。 MICROCHIP 不作任何明示或暗示、書面或口頭、法定的陳述或保證
或者,與信息相關的信息包括但不限於任何關於非侵權、適銷性和特定用途適用性的默示保證,或與其條件、質量或性能相關的保證。
在任何情況下,MICROCHIP 均不對與本資訊或其使用相關的任何類型的間接、特殊、懲罰性、附帶或後果性損失、損壞、成本或費用承擔責任,無論其原因為何,即使 MICROCHIP 已被告知可能性或損害是可以預見的。在法律允許的最大範圍內,MICROCHIP 對與該資訊或其使用相關的任何方式的所有索賠的全部責任不會超過您就該資訊直接向 MICROCHIP 支付的費用金額(如果有)。
在生命維持和/或安全應用中使用 Microchip 設備的風險完全由買方承擔,買方同意為 Microchip 辯護、賠償並使 Microchip 免受因此類使用而造成的任何及所有損害、索賠、訴訟或費用。除非另有說明,否則任何 Microchip 智慧財產權均不會以暗示或其他方式授予任何授權。
商標
Microchip 名稱和徽標、Microchip 徽標、Adaptec、AnyRate、AVR、AVR 徽標、AVR Freaks、BesTime、BitCloud、CryptoMemory、CryptoRF、dsPIC、flexPWR、HELDO、IGLOO、JukeBlox、KeeLoq、Kleer、LANCheck、LinkMD、maXStylus、 maXTouch、MediaLB、megaAVR、Microsemi、Microsemi 徽標、MOST、MOST 徽標、MPLAB、OptoLyzer、PIC、picoPower、PICSTART、PIC32 徽標、PolarFire、Prochip Designer、QTouch、SAM-BA、SenGenuity、SpyNIC、SST、SST 徽標、SuperFlash 、Symmetricom、SyncServer、Tachyon、TimeSource、tinyAVR、UNI/O、Vectron 和 XMEGA 是 Microchip Technology Incorporated 在美國和其他國家的註冊商標。
AgileSwitch、APT、ClockWorks、嵌入式控制解決方案公司、EtherSynch、Flashtec、Hyper Speed Control、HyperLight Load、IntelliMOS、Libero、motorBench、mTouch、Powermite 3、Precision Edge、ProASIC、ProASIC Plus、ProASIC Plus 徽標、Quiet-Wire、 SmartFusion、SyncWorld、Temux、TimeCesium、TimeHub、TimePictra、TimeProvider、TrueTime、WinPath 和 ZL 是 Microchip Technology Incorporated 在美國的註冊商標
相鄰密鑰抑制、AKS、模擬數字時代、任何電容器、AnyIn、AnyOut、增強開關、BlueSky、BodyCom、CodeGuard、CryptoAuthentication、CryptoAutomotive、CryptoCompanion、CryptoController、dsPICDEM、dsPICDEM.net、動態平均匹配、DAM , ECAN, Espresso T1S, EtherGREEN, GridTime, IdealBridge, 在線串行編程, ICSP, INICnet, 智能並行, 芯片間連接, JitterBlocker, Knob-on-Display, maxCrypto, maxView, memBrain, Mindi, MiWi, MPASM, MPF, MPLAB Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach, NVM Express, NVMe, Omniscient Code Generation, PICDEM, PICDEM.net, PICkit, PICtail, PowerSmart, PureSilicon, QMatrix, REAL ICE , Ripple Blocker, RTAX, RTG4, SAM-ICE, Serial Quad I/O, simpleMAP, SimpliPHY, SmartBuffer, SmartHLS, SMART-IS, storClad, SQI, SuperSwitcher, SuperSwitcher II, Switchtec, SynchroPHY, Total Endurance, TSHARC, USBCheck, VariSense、VectorBlox、VeriPHY、 ViewSpan、WiperLock、XpressConnect 和 ZENA 是 Microchip Technology Incorporated 在美國的商標
美國和其他國家。
SQTP 是美國 Microchip Technology Incorporated 的服務商標
Adaptec 徽標、Frequency on Demand、Silicon Storage Technology、Symmcom 和 Trusted Time 是 Microchip Technology Inc. 在其他國家/地區的註冊商標。
GestIC 是 Microchip Technology Inc. 的子公司 Microchip Technology German II GmbH & Co. KG 在其他國家的註冊商標。
本文提及的所有其他商標均為其各自公司的財產。
© 2021,Microchip Technology Incorporated 及其子公司。 版權所有。
ISBN: 978-1-5224-9447-8
品質管理體系
有關 Microchip 品質管理系統的信息,請訪問 www.microchip.com/quality.
全球銷售和服務
美洲
公司辦公室
2355 西錢德勒大道。錢德勒,亞利桑那州 85224-6199 電話: 480-792-7200
傳真: 480-792-7277 技術支援:
www.microchip.com/support
Web 地址:
www.microchip.com
亞特蘭大
喬治亞州德盧斯
電話: 678-957-9614
傳真: 678-957-1455 德州奧斯汀
電話: 512-257-3370 波士頓
馬薩諸塞州韋斯特伯勒
電話: 774-760-0087
傳真: 774-760-0088 芝加哥
伊利諾伊州艾塔斯卡
電話: 630-285-0071
傳真: 630-285-0075 達拉斯
德克薩斯州艾迪生
電話: 972-818-7423
傳真: 972-818-2924 底特律
密西根州諾維
電話: 248-848-4000 德州休士頓
電話: 281-894-5983 印第安納波利斯
印第安納州諾布爾斯維爾
電話: 317-773-8323
傳真: 317-773-5453
電話: 317-536-2380
洛杉磯
加州米申維耶霍
電話: 949-462-9523
傳真: 949-462-9608
電話: 951-273-7800 北卡羅來納州羅利
電話: 919-844-7510
紐約州紐約市
電話: 631-435-6000
加州聖荷西
電話: 408-735-9110
電話: 408-436-4270 加拿大 – 多倫多
電話: 905-695-1980
傳真: 905-695-2078
亞太
澳洲 – 雪梨
電話:61-2-9868-6733 中國 – 北京
電話:86-10-8569-7000 中國 – 成都
電話:86-28-8665-5511 中國-重慶 電話:86-23-8980-9588 中國-東莞
電話:86-769-8702-9880 中國 – 廣州電話:86-20-8755-8029 中國 – 杭州
電話:86-571-8792-8115 中國 - 香港特別行政區電話:852-2943-5100 中國 - 南京
電話:86-25-8473-2460 中國-青島
電話:86-532-8502-7355 中國 – 上海
電話:86-21-3326-8000 中國-沉陽
電話:86-24-2334-2829 中國-深圳
電話:86-755-8864-2200 中國 – 蘇州
電話:86-186-6233-1526 中國 – 武漢
電話:86-27-5980-5300 中國 – 西安
電話:86-29-8833-7252 中國 – 廈門
電話:86-592-2388138 中國-珠海
電話:86-756-3210040
亞太
印度 – 班加羅爾
電話:91-80-3090-4444 印度 – 新德里
電話:91-11-4160-8631 印度 – 浦那
電話:91-20-4121-0141 日本 – 大阪
電話:81-6-6152-7160 日本 – 東京
電話:81-3-6880-3770 韓國 – 大邱
電話:82-53-744-4301 韓國 - 首爾
電話:82-2-554-7200 馬來西亞 – 吉隆坡電話:60-3-7651-7906 馬來西亞 – 檳城
電話:60-4-227-8870 菲律賓 - 馬尼拉電話:63-2-634-9065 新加坡
電話:65-6334-8870 台灣 – 新竹
電話:886-3-577-8366 台灣-高雄電話:886-7-213-7830 台灣-台北
電話:886-2-2508-8600 泰國 – 曼谷電話:66-2-694-1351 越南 – 胡志明市電話:84-28-5448-2100
歐洲
奧地利 - 韋爾斯
電話:43-7242-2244-39 傳真:43-7242-2244-393 丹麥 – 哥本哈根電話:45-4485-5910
傳真:45-4485-2829 芬蘭 – 埃斯波
電話:358-9-4520-820 法國 – 巴黎
電話:33-1-69-53-63-20 傳真:33-1-69-30-90-79 德國 – Garching 電話:49-8931-9700 德國 – Haan
電話:49-2129-3766400 德國 – 海爾布隆 電話:49-7131-72400 德國 – 卡爾斯魯厄 電話:49-721-625370 德國 – 慕尼黑 電話:49-89-627-144-0 傳真:49-89-627-144 -44 德國 – Rosenheim 電話:49-8031-354-560 以色列 – Ra'anana
電話:972-9-744-7705 意大利 - 米蘭
電話:39-0331-742611 傳真:39-0331-466781 意大利 - 帕多瓦
電話:39-049-7625286 荷蘭 – Drunen 電話:31-416-690399 傳真:31-416-690340 挪威 – 特隆赫姆 電話:47-72884388 波蘭 – 華沙
電話:48-22-3325737 羅馬尼亞 – 布加勒斯特電話:40-21-407-87-50 西班牙 – 馬德里
電話:34-91-708-08-90 傳真:34-91-708-08-91 瑞典 – 哥德堡 電話:46-31-704-60-40 瑞典 – 斯德哥爾摩 電話:46-8-5090-4654 英國 –沃金厄姆
Tel: 44-118-921-5800 Fax: 44-118-921-5820
文件/資源
![]() |
MICROCHIP TB3308 使用快取維護在執行時處理快取一致性問題 [pdf] 使用者指南 TB3308 使用快取維護在運行時處理快取一致性問題, TB3308, 使用快取維護在運行時處理快取一致性問題, 運行時使用快取維護, 快取維護 |