🌱 Bootloader - Tổ chức bộ nhớ trên Vi điều khiển STM32
Hiểu rõ tổ chức bộ nhớ của vi điều khiển STM32 là nền tảng quan trọng để triển khai Bootloader. Bạn cần biết:
- Chương trình Bootloader sẽ nằm ở đâu.
- Chương trình ứng dụng sẽ được đặt tại vị trí nào.
- Cách phân chia sector trong bộ nhớ Flash để quản lý hiệu quả việc ghi/xóa.
👉 1. Tổ chức bộ nhớ trong STM32
Trong STM32, bộ nhớ được chia làm 2 thành phần chính <Tổ chức bộ nhớ>
1.1. Vùng nhớ chương trình (Program Memory):
- Dung lượng: 0.5GB.
- Mục đích: Lưu trữ mã lệnh (code) và dữ liệu chỉ đọc (read-only data).
- Loại bộ nhớ: Flash, EEPROM, ROM, hoặc OTP.
1.2. Vùng nhớ SRAM (Static RAM):
- Dung lượng: 512MB.
- Mục đích: Lưu trữ dữ liệu tạm thời trong quá trình thực thi chương trình (run-time).
👉 2. Địa chỉ bộ nhớ Flash trong STM32
- Flash Memory Base Address:
0x0800.0000
. - Khi bạn nạp chương trình qua debugger, nó sẽ mặc định ghi dữ liệu từ địa chỉ này.
Main Stack Pointer (MSP)
- Địa chỉ MSP:
0x0800.0000
. - Đây là nơi lưu trữ con trỏ Stack chính (Main Stack Pointer) của chương trình.
Vector Table (Interrupt Table)
- Địa chỉ Vector Table:
0x0800.0004
. - Chứa danh sách các vector (entry points) cho các xử lý ngắt, bắt đầu từ Reset_Handler.
👉 3. Phân chia bộ nhớ Flash theo Sector
STM32F401 có 512KB Flash Memory, được chia thành các sector với kích thước khác nhau:
- Sector nhỏ: Thích hợp để lưu trữ dữ liệu nhỏ như Bootloader.
- Sector lớn: Thích hợp để lưu các chương trình ứng dụng lớn hơn.
➤ Ghi và xóa trong Flash
- Ghi: Có thể ghi dữ liệu từng word (4 bytes).
- Xóa: Chỉ có thể xóa theo từng sector.
- Lưu ý: Số lần ghi/xóa giới hạn (khoảng 10,000 đến 100,000 lần), vì vậy cần quản lý hợp lý để kéo dài tuổi thọ Flash.
👉 4. Cấu trúc bộ nhớ Bootloader và Firmware
➤ Cách phân bổ bộ nhớ
- Sector 0: Lưu trữ chương trình Bootloader.
- Sector 1: Lưu Firmware ứng dụng 1 (Current Firmware).
- Sector 2: Lưu Firmware ứng dụng 2 (FOTA Firmware - bản cập nhật mới).
➤ Chức năng
- Factory Firmware: Firmware gốc được nhà sản xuất cung cấp ban đầu, đảm bảo hệ thống hoạt động cơ bản.
- Current Firmware: Firmware hiện tại mà thiết bị đang chạy.
- FOTA Firmware: Firmware được cập nhật mới, lưu trên Flash trước khi chuyển đổi.
👉 5. Quy trình cập nhật Firmware (FOTA)
-
Chương trình Bootloader
- Đặt tại Sector 0, bắt đầu từ địa chỉ
0x0800.0000
. - Sau khi reset, CPU sẽ thực thi Bootloader trước tiên.
- Đặt tại Sector 0, bắt đầu từ địa chỉ
-
Firmware ứng dụng (Current Firmware)
- Lưu tại Sector 1, Bootloader sẽ kiểm tra và khởi động từ đây nếu không có yêu cầu cập nhật.
-
Quá trình cập nhật FOTA
- Khi đang chạy Current Firmware, nếu người dùng yêu cầu cập nhật (ví dụ: nhấn nút), vi điều khiển sẽ:
- Ghi dữ liệu của FOTA Firmware vào Sector 2.
- Reset hệ thống, chuyển về Bootloader.
- Khi đang chạy Current Firmware, nếu người dùng yêu cầu cập nhật (ví dụ: nhấn nút), vi điều khiển sẽ:
-
Bootloader sau khi reset
- Kiểm tra tính hợp lệ của FOTA Firmware (checksum, CRC).
- Nếu hợp lệ, chuyển quyền điều khiển sang FOTA Firmware.
- Nếu không hợp lệ, giữ nguyên Current Firmware để đảm bảo hệ thống ổn định.
💡 Kết luận
Tổ chức bộ nhớ hợp lý là yếu tố cốt lõi để xây dựng một Bootloader hoạt động hiệu quả. Trong bài tiếp theo, mình sẽ hướng dẫn bạn cách lập trình cụ thể để:
- Xây dựng Bootloader cho STM32.
- Chuyển đổi giữa các Firmware (Current và FOTA).
- Kiểm tra tính hợp lệ của Firmware trước khi chuyển đổi.
ok
Trả lờiXóa