Title Image

Blog Logo

MPU in ARM Cortex-M4

🌱 MPU in ARM Cortex-M4

    bài viết trước mình đã giới thiệu tổng quan về MPU là gì, và công dụng cũng như một số đặc điểm cơ bản của MPU trong các ứng dụng nhúng. Bài viết này sẽ giới thiệu cụ thể hơn về ngoại vi MPU sử dụng trong lõi Cortex M4, cùng với các thanh ghi sử dụng để cấu hình ngoại vi MPU.

    👉 Đặc điểm của MPU trong Cortex M4

    Như đã giới thiệu ở bài viết trước, MPU sẽ chia memory map thành các region, với vị trí, kích thước, quyền truy cập, và các thuộc tính xác định. MPU hỗ trợ: 

  • Setup các thuộc tính của từng vùng một cách độc lập.
  • Các Region có thể Overlap lên nhau.
  • Có 8 Region riêng biệt (0-7) với Cortex M4.
  • Một Background Region là Region 0.

    Đặc điểm tiếp theo của MPU là Tính ưu tiên của các Region. Khi các Region Overlap - Chồng lên nhau, thì vùng memory chung đó sẽ có thuộc tính của Region có mức ưu tiên cao hơn. Đối với Cortex M4, Region 7 là vùng có mức độ ưu tiên cao nhất, và giảm dần xuống Region 0. 

     Các đặc điểm, thuộc tính, quyền truy cập của các region sẽ được mình giới thiệu ở bên giới khi nói về các thanh ghi cấu hình MPU.

    👉 Các thanh ghi cấu hình MPU

    Mình tham khảo các thanh ghi này trong tài liệu Cortex-M4 Devices Generic User Guide của ARM. 

    🔻 Thanh ghi MPU_CTRL

    Thanh ghi điều khiển các hoạt động quan trọng của MPU.

  • Bit 2 - PRIVDEFENA: Cho phép truy cập vào default memory map ở chế độ Privileged. Default memory map chính là vùng nhớ mà không được cấu hình bởi MPU.
     

  • Bit 1 - HFNMIENA: Cho phép MPU hoạt động trong Hardfault hay Memfault. Đôi khi chúng ta truy cập vào "vùng nhớ cấm", chương trình nhảy vào Fault, và cần thay đổi cấu hình MPU hoặc disable MPU ở trong Fault. 
    1 = Enable MPU trong Fault.
    0 = Disable MPU trong Fault.
  • Bit 0 - ENABLE: Enable MPU (=1).

    🔻 Thanh ghi MPU_RNR - MPU Region Number Register

  • Bit [7:0] - REGION: Các bit này chứa Region được tham chiếu bởi 2 thanh ghi MPU_RBAR va thanh ghi MPU_RASR. Tức là chúng ta sẽ ghi giá trị Region vào thanh ghi MPU_RNR, và từ đó có thể cấu hình Region đó bằng các thanh ghi khác.

    🔻 Thanh ghi MPU_RBAR - Region Base Address Register

    Thanh ghi này định nghĩa địa chỉ base của Region được chứa trong thanh ghi MPU_RNR. Ngoài ra, bản thân thanh ghi MPU_RBAR còn có thể update lại giá trị của thanh ghi MPU_RNR.

  • Bit [31:N] - ADDR: Chứa Base Address của Region. 
                                     N = Log2(Region Size in Bytes)
  • Bit 4 - VALID: Bit này để xác định thanh ghi chứa Region Number 
    0 = Xác định Region bằng thanh ghi MPU_RNR.
    1 = Update thanh ghi RNR bằng trường REGION trong thanh ghi RBAR.
  • Bit [3:0] - REGION: Trường này chứa giá trị Region Number để Update cho thanh ghi RNR nếu bit VALID = 1.

    🔻 Thanh ghi MPU_RASR - Region Attribute & Size Register

    Thanh ghi này define region size & memory attributes của Region chứa trong thanh ghi MPU_RNR, enable region và subregion. 

  • Bit 28 - XN: Bit disable Instruction Access.
    0 = instruction fetch enabled
    1 = instruction fetch disabled
  • Bit [26-24] - AP: Access Permission Field, cho biết quyền truy cập vào Region.



  • Bit [21:19, 17, 16] - TEX, C, B: Memory Access Attribute, chứa các thuộc tính khác của Region như Memory Type, Shareability, ...



  • Bit 18 - S: Shareable Bit, là bit cho phép share vùng nhớ trong các ứng dụng Multicore.
  • Bit [5:1] - SIZE: Kích thước của Region, min = 0b00010 = 3.
                                Region Size in Bytes = 2 ^ (SIZE + 1)
  • Bit 0 - ENABLE: Bit Enable Region.

    👉 Sử dụng MPU cho Vi điều khiển

    Để tránh các lỗi không mong muốn trong quá trình cấu hình, chúng ta nên disable các ngắt trước khi update các thuộc tính của MPU.

    Đối với Vi điều khiển, ARM cung cấp một số ví dụ điển hình để các bạn có thể cấu hình MPU cho các ứng dụng của mình, đặc biệt là bộ nhớ Flash trong các ứng dụng chạy dài ngày, cần ngăn việc truy cập bộ nhớ trái phép.


    Trên đây là một ví dụ điển hình với MPU cho vi điều khiển. Cụ thể về cách setup MPU, driver cho MPU và ví dụ về các ứng dụng, mình sẽ tiếp tục giới thiệu ở các bài sau!

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

    Chúc các bạn học tập tốt 😊 

Xem Bài MPU 1                         Xem Bài MPU 3

Đăng nhận xét

0 Nhận xét