Các thao tác đọc, ghi và xóa bộ nhớ Flash trên MCU STM32F103C8T6

Trong rất nhiều ứng dụng, bộ nhớ Flash được sử dụng để lưu trữ dữ liệu mà khi mất điện, dữ liệu vẫn không bị mất đi. Việc đưa dữ liệu vào bộ nhớ có thể thông qua các phương thức giao tiếp được hỗ trợ bởi VĐK như I/Os, USB, CAN, UART, I2C, SPI,.. Hoặc chức năng In-application programming (IAP) cho phép người dùng lập trình lại bộ nhớ Flash trong khi chương trình đang chạy.

[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]

Tổ chức của bộ nhớ Flash:

– Bộ nhớ Flash được tổ chức như là 1 khối chính (main block) lên đến 64 Kb (hoặc 128 Kb) chia thành 128 pages, mỗi page 1 Kbytes (medium-density devices) và 1 khối thông tin (information block). Bắt đầu từ địa chỉ 0x0800 0000, bộ nhớ chương trình sẽ được lưu ở đây. Tùy vào kích cỡ chương trình mà người dùng chọn địa chỉ bắt đầu của việc ghi dữ liệu vào bộ nhớ flash (Ví dụ page 127). 

Đọc và ghi bộ nhớ Flash:

– Xoá dữ liệu trong bộ nhớ Flash:

  1. Trước khi thực hiện việc ghi dữ liệu vào bộ nhớ Flash ta phải xóa hết dữ liệu toàn bộ của 1 page, sau đó ghi lại data vào page vừa xóa. Hoạt động xóa page được mô tả như sau:

+ Kiểm tra xem có hoạt động của bộ nhớ Flash nào đang diễn ra không bằng cách kiểm tra bit BSY trong thanh ghi FLASH_CR

+ Set bit PER (Page Erase) trong thanh ghi FLASH_CR

+ Chọn một page để xóa bằng cách thiết lập giá trị cho thanh ghi FLASH_AR

+ Set STRT trong thanh ghi FLASH_CR

+ Đợi đến khi bit BSY được reset

+ Có thể kiểm tra hoạt động xóa page có thành công hay không bằng cách đọc giá trị tại địa chỉ vừa cho xóa.

  • Lệnh Mass Erase có thể được sử dụng để xóa hoàn toàn các trang trong bộ nhớ Flash:

+ Kiểm tra xem có hoạt động của bộ nhớ Flash nào đang diễn ra không bằng cách kiểm tra bit BSY trong thanh ghi FLASH_CR

+ Set bit MER (Mass Erase) trong thanh ghi FLASH_CR

+ Set STRT trong thanh ghi FLASH_CR

+ Đợi đến khi bit BSY được reset

+ Có thể kiểm tra hoạt động xóa có thành công hay không bằng cách đọc giá trị tại tất cả các trang.

– Ghi dữ liệu vào bộ nhớ Flash:

+ Hầu hết tất cả việc thực thi bộ nhớ FLASH hoạt động trên các trang, trường header của mỗi trang chiếm 16 bit đầu tiên, cho biết trạng thái trang.

+ Mỗi biến được xác định bởi một địa chỉ ảo và một giá trị được lưu trữ trong bộ nhớ Flash để truy xuất hoặc cập nhật (cả địa chỉ ảo và dữ liệu đều dài 16 bit).

– Đọc dữ liệu bộ nhớ Flash.

  • Các bước thực hiện chương trình đọc/ghi bộ nhớ Flash:

Bước 1:

Bước 2:

Bước 3:

Bước 4: Thêm file flash.h vào thư mục Inc

Bước 5: Thêm file flash.c vào thư mục Src

Bước 6: Chương trình ghi chuỗi bất kì vào bộ nhớ Flash

Kết quả:

Tham khảo giá trị các thanh ghi Flash ở đây

Tải thư viện flash ở đây.

Xem thêm: Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32 tại đây.

Nhóm TAPIT – ARM R&D