This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM3352:缓存无效过程

Guru**** 2609955 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/651014/am3352-cache-invalidate-procedure

器件型号:AM3352

你好!

我想将 AM355x 处理器用作应用的“裸机”。 我启用 MMU 和高速缓存。

当 DMA 传输数据时、缓存缓冲区出现问题。 有时(大约每两小时一次错误)如果我使用 DMA 读取外设、我会从外设获取错误数据(在高速缓存边界上对齐、缓冲器的总大小超过1KB)。

建议我、请在哪里阅读有关使用 DMA 和高速缓存的操作读/写操作顺序的建议。 我的订单:

1. TX 数据:写入缓冲区;清理缓冲区;DSB (或 DMB?);DMA 写入缓冲区中的数据。

RX 数据:通过 DMA 将数据读取到缓冲区;使缓冲区无效;DSB (或 DMB?);读取数据。

 

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    工厂团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alex、您如何为缓冲区使用的存储器区域设置 MMU? 这些区域的存储器属性是什么? 如果您不想在每次访问缓冲区时进行清理或使其无效、则可以将该区域设置为不可缓存、但这可能会影响您的性能。
    我认为您的操作顺序通常是正确的。 如果 ARM 内核写入缓冲区、则必须在 DMA 访问缓冲区之前执行清理、相反、如果 ARM 内核从缓冲区读取、则必须在读取之前使缓存无效。
    您是否确保 DMA 操作和高速缓存维护操作不重叠? 这可能会导致您经常看到的问题。

    此致、
    James
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 James!
    我的天!
    

    在执行以下步骤后,我的问题消失了:

    已对齐高速缓存行绑定上的所有缓冲区。 
    2.对齐缓存行上的缓冲区大小。 
    3.清洁 EDMA 之前的缓冲器。 
    使 EDMA 之前的缓冲区无效。 

    Alex。