Site icon TAPIT

Tìm hiểu Memory Protection Unit (MPU) – vi xử lý ARM Cortex M

Memory Protection Unit (MPU) là một mô-đun ngoại vi của nhiều dòng vi xử lý ARM Cortex-M. MPU có nhiệm vụ thiết lập đặc tính cho các vùng nhớ khác nhau. Ở lõi ARM-Cortex M7 thì MPU hỗ trợ cài đặt thuộc tính cho tối đa 8 hoặc 16 phân vùng khác nhau tùy thuộc vào dòng chip. Đối với vi điều khiển STM32F746NGH6U thì tối đa là 8 vùng nhớ và có thể cài đặt thông qua công cụ cấu hình CubeMX. Khi các quy tắc của MPU bị vi phạm, MemManage Exception sẽ được kích hoạt, các lỗi vi phạm quy tắc MPU có thể không ảnh hưởng đến luồng hoạt động của chương trình, nghĩa là chương trình vẫn có thể chạy bình thường nếu ta tắt MPU đi. 

Hình 1: Các mô-đun phần cứng trong xử lý Cortex-M7

Các đặc tính của 1 vùng nhớ được MPU quản lý
1. Địa chỉ bắt đầu và dung lượng bộ nhớ

2. Cacheable, Bufferable, Shareable, XN (instruction execution permission)

Để hiểu chính xác hơn về các thuộc tính (attribute) và cách dùng chính mời các bạn coi qua video theo link ở phần tham khảo [https://www.youtube.com/watch?v=6IUfxSAFhlw]

3. Đảm bảo tính nhất quán dữ liệu và ảnh hưởng của MPU lên hiệu năng  

Tham khảo một bảng thuộc tính của một số loại vùng nhớ như sau:

Hình 2: Phân loại hành vi đối với các chip nhớ, ngoại vi

Tham khảo bảng cấu hình MPU cho một số loại vùng nhớ cùng với đặc tính của chúng:

Hình 3: Cấu hình MPU cho một số loại vùng nhớ

Dựa vào bảng trên, ta giả sử cần phải khai báo một DMA buffer nằm trong SDRAM thì vì SDRAM thuộc loại Normal và để đảm bảo Cache Coherency, cần disable cache, vậy setting của vùng nhớ sẽ là: Normal, Non-cacheable và Shareable (vì cả Cortex-M7 và DMA đều phải sử dụng vùng nhớ này). MPU cần được cài đặt như dòng 5 trong hình (TEX = 001, C = 0, B = 0, S = 1).

Tham khảo thêm một số cài đặt được recommend bởi ST. Để thuận tiện và dễ hiệu, các bạn coi video sau [https://www.youtube.com/watch?v=6IUfxSAFhlw] ở các đoạn dưới:

Nhóm tác giả
Ng.Q.Phương, Ng.H.Phúc, Ng.H.N.Thương