🌱 Bootloader - Hướng Dẫn Thao Tác Bộ Nhớ FLASH Trên STM32

🌱 Bootloader - Hướng Dẫn Thao Tác Bộ Nhớ FLASH Trên STM32

    Bộ nhớ FLASH là phần không thể thiếu trong các ứng dụng Bootloader trên vi điều khiển STM32. Việc nắm vững cách đọc, ghi, xóa bộ nhớ FLASH không chỉ giúp bạn thực hiện các tác vụ cơ bản mà còn hỗ trợ xử lý các tình huống phức tạp hơn như nạp chương trình hoặc lưu trữ dữ liệu quan trọng.

1️⃣ Tại sao cần thao tác với bộ nhớ FLASH?

    Trong ứng dụng Bootloader, chúng ta cần thực hiện các thao tác ghi dữ liệu từ file HEX vào bộ nhớ FLASH theo địa chỉ đã được chỉ định. Khác với việc nạp code thông qua phần mềm IDE, bạn phải tự viết code xử lý các tác vụ này.

2️⃣ Các thao tác chính với bộ nhớ FLASH

Unlock & Lock FLASH

    Bộ nhớ FLASH được bảo vệ sau khi reset để tránh các thao tác không mong muốn. Bạn cần mở khóa (Unlock) trước khi ghi hoặc xóa và khóa lại (Lock) sau khi thao tác xong.


// Unlock FLASH
FLASH->KEYR = 0x45670123;
FLASH->KEYR = 0xCDEF89AB;

// Lock FLASH
FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK;
      

Erase FLASH

    Bộ nhớ FLASH hỗ trợ xóa theo từng Sector. Các bước thực hiện như sau:

  1. Kiểm tra trạng thái bộ nhớ FLASH có sẵn sàng không (bit BSY)
  2. Set bit SER và chọn Sector cần xóa
  3. Set bit STRT để bắt đầu xóa
  4. Đợi quá trình xóa hoàn tất
while (FLASH->SR & FLASH_SR_BSY);  // Chờ Flash rảnh
FLASH->CR |= FLASH_CR_SER;         // Cho phép xóa Sector
FLASH->CR |= (sector_num << 3);    // Chọn Sector
FLASH->CR |= FLASH_CR_STRT;        // Bắt đầu xóa
while (FLASH->SR & FLASH_SR_BSY);  // Đợi quá trình xóa hoàn tất
FLASH->CR &= ~FLASH_CR_SER;        // Tắt chế độ xóa Sector

Write FLASH

    Dữ liệu được ghi vào bộ nhớ FLASH theo từng Word (4 byte). Các bước thực hiện như sau:

while (FLASH->SR & FLASH_SR_BSY);  // Chờ Flash rảnh
FLASH->CR |= FLASH_CR_PG;          // Cho phép ghi
*(volatile uint32_t*)address = data; // Ghi data vào địa chỉ
while (FLASH->SR & FLASH_SR_BSY);  // Đợi quá trình ghi hoàn tất
FLASH->CR &= ~FLASH_CR_PG;         // Tắt chế độ ghi

3️⃣ Một số lưu ý khi thao tác với bộ nhớ FLASH

  1. Thao tác theo thứ tự: Các bước Unlock, Erase, Write cần được thực hiện đúng trình tự.
  2. Tối ưu thời gian chờ: Sử dụng vòng lặp kiểm tra bit BSY thay vì delay cố định.
  3. Tham khảo tài liệu chính thức: Đọc kỹ Reference Manual để nắm rõ cấu trúc thanh ghi FLASH.

4️⃣ Tài liệu tham khảo

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

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn