Utrzymanie spójności cache (cache maintenance)
Jawne operacje, które firmware musi wywołać, aby cache i kontroler DMA zgadzały się co do zawartości pamięci.
W mikrokontrolerze bez cache DMA zapisuje prosto do RAM-u, a procesor czyta stamtąd. Cortex-M7, który w 2014 roku wprowadził pamięć podręczną danych do świata mikrokontrolerów, to zmienił: kontroler DMA omija cache i żaden sprzęt nie synchronizuje obu stron. Przed wysyłką bufor trzeba wyczyścić (clean), by brudne linie trafiły do RAM-u. Po odbiorze trzeba go unieważnić (invalidate), by procesor przestał czytać nieaktualne kopie.
Pułapką jest 32-bajtowa linia cache. Bufor, który nie zaczyna się i nie kończy na granicy linii, dzieli ją z innymi zmiennymi, a unieważnienie po cichu wyrzuca także ich świeże zapisy. Leniwa alternatywa — oznaczenie przez MPU pamięci DMA jako non-cacheable — kosztuje przepustowość zamiast godzin debugowania, co często jest lepszym interesem.