Brise
STM32F7(Cortex-M7) 캐시 Invalidate 본문
Cortex-M7 프로세서 기반의 MCU인 STM32F7 프로세서에는 I/D Cache(데이터, 명령어) 캐시가 포함되어 있다.
일반적으로 MCU 레벨의 응용에서는 별도의 명령어를 자체 생성하지는 않기 때문에 명령어 캐시에 대한 일관성(Coherency)을 맞추기 위한 노력은 필요하지 않지만, 데이터에 대해서는 CPU Core 뿐만 아니라 DMA 코어 또한 데이터에 접근할 수 있기 때문에 CPU가 인식하지 못하는 상태에서 데이터가 변경되는 경우 데이터 일관성에 대하여 고려하여야 한다.
이를 위하여 사용자가 데이터 일관성을 맞출 수 있는 방법은 크게 두 가지 방법이 있다.
첫번째, MPU를 이용하는 방법이 있다. MPU를 이용하면 접근하는 메모리 영역에 대하여(실제로는 ARM MCU가 메모리맵 I/O 방식을 이용하기 때문에 접근하는 모든 장치를 의미할 수 있다.) 캐시정책과 접근정책, 공유정책을 설정할 수 있다. 물론 설정 상에 어느정도 제한 사항을 가질 수 있지만 설정이 어느정도 간결하다.
두번째, DMA동작에 대하여 특정 조건에서 데이터 일관성을 맞추기 위한 코드를 삽입하는 방식이 있다. CPU 코어와 DMA 장치 사이에서 데이터 일관성을 맞추기 위해서는 두 가지 위치에 코드를 삽입하여야 한다.
CPU가 데이터를 메모리에 쓰고 DMA 동작을 수행하기 이전
DMA 동작이 완료되고 CPU가 데이터를 메모리로부터 읽기 이전
데이터를 조작하는 특성에 따라 해당 위치에 캐시 내용을 clear하는(pending된 write내용을 push하거나, memory에 갱신된 내용을 받을 수 있도록 기존 내용을 invalidate하는) 동작을 삽입하여야 코드가 정상적으로 동작한다.Reference :
ST Community - https://community.st.com/s/question/0D50X00009XkhUW/hint-dma-and-cache-coherency
AN4839 - https://www.st.com/content/ccc/resource/technical/document/application_note/group0/08/dd/25/9c/4d/83/43/12/DM00272913/files/DM00272913.pdf/jcr:content/translations/en.DM00272913.pdf
(Microchip; Cortex-M7 Cache coherency) - http://ww1.microchip.com/downloads/en/DeviceDoc/Managing-Cache-Coherency-on-Cortex-M7-Based-MCUs-DS90003195A.pdf
'MCU' 카테고리의 다른 글
STM32 LwIP 구조 - 3 (0) | 2020.10.18 |
---|---|
STM32 LwIP 구조 - 2 (0) | 2020.10.18 |
STM32 LwIP 구조 - 1 (0) | 2020.10.18 |
원리부터 실무까지 쉽고 명확한 Arm 프로그래밍(Cortex-A9 중심으로) (0) | 2020.08.21 |
STM32F4 온도 센서 코드 (0) | 2020.03.15 |
STM32 + FreeRTOS 이용시 printf를 수행하면 hardfault가 생기는 경우 (0) | 2020.02.15 |
USB ASP (0) | 2018.06.03 |