MICROCHIP-标志

MICROCHIP TB3308 使用缓存维护处理运行时缓存一致性问题

MICROCHIP-TB3308 使用缓存维护处理运行时缓存一致性问题产品

介绍

对于运行在具有可缓存内存区域的微控制器 (MCU) 上的应用程序,缓存一致性问题不可避免,这些应用程序使用直接内存访问 (DMA) 进行数据传输操作。这是因为 CPU 从缓存执行读/写操作,而 DMA 在外设和物理内存之间传输数据。
处理缓存一致性的方法之一是要求应用程序在运行时使用缓存维护操作来管理缓存。MPLAB® Harmony v3 为 PIC32MZ 设备提供了缓存维护应用程序编程接口 (API)。
本文档解释了应用程序如何使用 MPLAB Harmony v3 下的缓存管理 API 在运行时管理缓存一致性问题。
笔记:  本文档中讨论的概念适用于所有 PIC32MZ MCU。PIC32MZ EF 用作示例amp来讨论这些概念。

描述

下图说明了 DMA 从 PIC32MZ EF MCU 上的 SRAM 读取时观察到的缓存一致性问题。

图 1-1。 内存到外设的传输(DMA 从 SRAM 读取)MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 1

应用程序提交请求将数据缓冲区 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)MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 2

应用程序提交请求,从外设接收 RxBuffer 中的值为“12345678”的数据。DMA 在 SRAM 中用值“12345678”填充 RxBuffer。但是,数据缓存未更新,并且继续保存以前的数据。当 CPU 读取 RxBuffer 时,它最终将缓冲区中包含的先前值读取为“ABCDEFGH”。

处理缓存一致性
处理缓存一致性问题的两种方法在“内存到外设传输(DMA 从 SRAM 读取)”和“外设到内存传输(DMA 写入 SRAM)”中进行了说明。这些方法涉及应用程序在运行时使用维护操作管理缓存。这些操作包括执行以下操作的能力:
使缓存无效: 将缓存行标记为无效。后续访问会强制将数据从主内存复制到缓存。
清理缓存: 将标记为脏的缓存行写回到主存储器。为了处理在“内存到外设传输(DMA 从 SRAM 读取)”中讨论的缓存一致性,请执行以下操作:

  1. 应用程序用值“ABCEDFGH”填充写入数据缓冲区(TxBuffer)。由于默认的缓存策略(Write Back 和 Write Allocate),写入的数据可能在缓存中。
    图 1-3. 填充写入缓冲区MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 3
  2. 通过调用清理缓存 API 将值为“ABCDEFGH”的写入数据缓冲区(TxBuffer)刷新到主存储器。
    图 1-4. 刷新写入缓冲区MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 4
  3. 应用程序提交一个请求,将数据从值为“ABCDEFGH”的TxBuffer传输到外围设备。
    图 1-5. 写入外设MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 5

要处理外设到内存传输(DMA 写入 SRAM)中讨论的缓存一致性,请按照以下步骤操作:

  1. 应用程序调用 Invalidate 缓存 API 将缓存行标记为无效。
    图 1-6. 使缓存无效MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 6
  2. 应用程序提交一个请求,从外围设备接收RxBuffer中值为‘12345678’的数据。
  3. DMA 在 SRAM 中用值“12345678”填充 RxBuffer。
  4. 由于 RxBuffer 对应的缓存行处于无效状态,CPU 的读访问会导致 RxBuffer 从主内存复制到数据缓存中。
    图 1-7. 处理外设到内存传输缓存一致性MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 7

执行

配置
在 PIC3 MZ EF 的 MPLAB Harmony v32 项目中,缓存维护操作由 MPLAB Harmony v3 配置器 (MHC) 或 MPLAB 代码配置器 (MCC) 启用。在 MHC 或 MCC 中,可以在项目图 > 系统 > MIPS 配置 > 缓存下找到配置设置。
图 2-1. MHC 缓存配置MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 8

数据缓存维护 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) 写回并使数据缓存中的地址范围无效。

笔记: 

  1. MCU 特定数据和指令缓存维护 API 可用作外设库 (PLIB) plib_cache.c。请参阅 PLIB 应用程序示例amp乐在:
    https://github.com/Microchip-MPLAB-Harmony/csp_apps_pic32mz_ef/tree/master/apps/cache/cache_maintenance.
  2. 使用缓存清理和按地址使缓存无效的 API 时:
    • 地址: 必须与缓存行大小边界对齐。这意味着 DMA 缓冲区地址必须与 16 字节边界对齐。
    • 尺寸: 必须是缓存行大小的倍数。这意味着 DMA 缓冲区大小必须是 16 字节的倍数。

Example
以下代码例如amp该文件演示了如何使用数据缓存维护 API 以及 MPLAB Harmony v3 DMA 外设库 API 通过 UART 接口读取和写入数据。MICROCHIP-TB3308-使用缓存维护处理运行时缓存一致性问题-FIG 9

详细源代码请参考PLIB应用示例amp乐在:
https://github.com/Microchip-MPLAB-Harmony/csp_apps_pic32mz_ef/tree/master/apps/cache/cache_maintenance.
笔记:  上面讨论的缓存一致性问题也可以在链接时通过使用争用数据缓冲区的一致性变量属性来处理。
无符号整数 __attribute__((coherent))缓冲区[1024];
在此代码中,编译器(在链接时)在非可缓存内存区域 KSEG1024 中分配 1 个元素。

参考

以下文档列为资源。有关缓存一致性和相关 Microchip 产品的更多信息,请参阅 Microchip Web网站,或联系当地的 Microchip 销售代表。

  • 在 PIC1MZ 器件上使用 L32 缓存
  • PIC32MZ EF 缓存维护 PLIB Example
  • MPLAB Harmony v3 Quick Docs 软件包为用户提供了独立的帮助页面,帮助他们开始在 Microchip 的 32 位 SAM 和 PIC32 MCU 上开发应用程序。下载 quick_docs 存储库并从 index.html 开始 file 可在文档文件夹中找到。
    在线版本可从以下网址获取: microchip-mplab-harmony.github.io/quick_docs/.
  • MPLAB Harmony v3 登陆 web 页: www.microchip.com/mplab/mplab-harmony

微芯片 Web地点

Microchip 通过以下方式提供在线支持 web网站 www.microchip.com/。 这 web网站用于制作 files 和信息易于客户获取。可用的内容包括:

  • 产品支持 – 数据表和勘误表、应用笔记和 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 徽标、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 Germany 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,使用缓存维护处理运行时缓存一致性问题,运行时使用缓存维护,缓存维护

参考

发表评论

您的电子邮件地址不会被公开。 必填字段已标记 *