Title Image

Blog Logo

🌱 Bootloader 3 - Tổ chức bộ nhớ STM32

🌱 Bootloader 3 - Tổ chức bộ nhớ STM32

    Hiểu được tổ chức bộ nhớ của vi điều khiển STM32 là một điều rất quan trọng khi tìm hiểu về Bootloader. Chúng ta cần phải nắm được chương trình Boot của chúng ta nằm ở địa chỉ nào, chương trình ứng dụng nằm ở địa chỉ nào, và cách phân chia sector của bộ nhớ Flash.

    👉 Như mình đã giới thiệu trong bài viết về Memory Map, bộ nhớ trong vi điều khiển STM có 2 phần cần được quan tâm chính là bộ nhớ chương trình và bộ nhớ dữ liệu: 

  • Vùng nhớ Code - 0.5GB: Có thể là bộ nhớ Flash, EEPROM, ROM, OTP, … dùng để lưu code và các lệnh của chương trình. 
  • Vùng nhớ SRAM - 512MB: Chủ yếu sử dụng để kết nối SRAM trên chip, dùng để lưu trữ dữ liệu tạm thời khi run-time.

Bootloader

    👉 Địa chỉ bộ nhớ Flash bắt đầu từ 0x0000.0000, nhưng trong Vi điều khiển STM32, vùng nhớ code được lưu từ địa chỉ 0x0800.0000, khi chúng ta nạp xuống, nó sẽ mặc định nạp chương trình từ địa chỉ này, với MSP - Main Stack Pointer ở địa chỉ 0x0800.0000 và Vector Table bắt đầu từ địa chỉ 0x0800.0004 (Reset_Handler).

    Vi điều khiển STM32F401 cung cấp 512KB bộ nhớ Flash, ngoài lưu trữ MSP, Vector Table, bộ nhớ Flash sẽ lưu trữ vùng nhớ chương trình ứng dụng của chúng ta, cùng với đó là vùng data (bao gồm read-only data, và vùng nhớ .data - Xem Linker Script File).

    👉 Cụ thể, để thao tác với bộ nhớ hiệu quả, bộ nhớ Flash trong STM32 được chia thành các Sector. 

Bootloader

    Bộ nhớ Flash có thể được thao tác ghi trên từng Word (4 bytes), nhưng lại chỉ có thể xóa theo từng Sector. Vì vậy để tiết kiệm số lần ghi/xóa (ảnh hưởng tới tuổi thọ của Flash) cũng như để dễ quản lý, bộ nhớ Flash trong STM32 được chia nhỏ thành các sector, với những sector đầu có kích thước nhỏ, và những sector sau có kích thước lớn dần. 

    Vì vậy chúng ta có thể thực hiện Bootloader bằng cách đặt chương trình Bootloader ở một Sector nào đó, chẳng hạn Sector 0. Và cùng lúc đặt Firmware application 1 vào Sector 1, Firmware application 2 vào Sector 2.

     ⇨ Vậy các Firmware sẽ được phân bố và hoạt động như thế nào?

FOTA

    👉 Có thể thấy chúng ta sẽ bắt đầu với chương trình Bootloader, được đặt tại địa chỉ 0x8000.0000. Ngoài ra, chúng ta nhìn thấy sự xuất hiện của 3 Firmware khác:

  • Factory Firmware: Là phiên bản đầu tiên của Firmware mà nhà sản xuất cung cấp cho người dùng.
  • Current Firmware: Là phiên bản hiện tại của Firmware đang chạy trên Vi điều khiển, được chúng ta lưu trên 1 sector nào đó (chẳng hạn sector 1).
  • FOTA Firmware: Là phiên bản cập nhật mới của Firmware. Ở bài toán này, khi chương trình đang chạy với Current Firmware, chúng ta sẽ thực hiện quá trình boot để cập nhật chương trình FOTA mới này.
    👉 Sau khi Reset, CPU sẽ gọi chương trình Bootloader, nó làm một số công việc, và sau đó lựa chọn xem sẽ chạy Firmware nào? Tùy thuộc vào cách chúng ta lập trình. 
  • Ở đây, khi đang chạy Current Firmware, khi chúng ta thực hiện boot bằng một cách nào đó (chẳng hạn một bấm nút được quy định trước để chuyển qua quá trình boot).
  • Vi điều khiển sẽ bị reset, sau đó thực hiện chương trình Bootloader Firmware.
  • Bootloader sẽ chọn Firmware thực hiện là FOTA Firmware và chuyển sang thực hiện FOTA Firmware.

>>>= Follow ngay =<<<

Để 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 😊

                                        

Đăng nhận xét

1 Nhận xét