FLASH và EEPROM TRONG STM8S.

FLASH và EEPROM TRONG STM8S.

  1. Cơ Sở Lý Thuyết.
  2. Chào các bạn, Hôm nay mình sẽ tiếp tục một số tìm hiểu về Flash và EEPROM.Chúng là 2 vùng nhớ khác nhau trong STM8S, tuy nhiên về cấu tạo và bản chất thì tương đối giống nhau. Tổng quan về bộ nhớ của của STM8S.

    Bảng thống kê dưới đây sẽ so sánh một số thông tin chung giữa 2 loại:

    Bộ nhớ Flash sử dụng các cổng logic NAND nên giá thành sẽ rẻ hơn, tốc độ truy cập cũng sẽ chậm hơn, bộ nhớ Flash thường truy cập theo khối trong khi EEPROM thì là byte, chức năng tương ứng cũng khác nhau. Ở STM8S003 thì bộ nhớ Flash(8k byte) dùng để lưu trữ chương trình trong khi EEPROM(128 bytes) thì thường dùng để lưu một số thông tin không xóa sau khi Flash hoặc mất điện. Với những thông tin bạn không muốn mất sau khi Flash Firmware mới và tốc độ truy cập cao thì thường chúng ta sẽ sử dụng bộ nhớ EEPROM, ngược lại nhưng thông số thay đổi mỗi lần Flash, tốc độ truy cập thông thường và khối lượng data lớn thì chúng ta sẽ sử dụng bộ nhớ Flash.

  3. Ví dụ với bộ nhớ Flash.
  4. Ví dụ: Ghi data vào 16 byte cuối cùng của bộ nhớ Flash với địa chỉ 0x9FF0 -> 0x9FFF data tương ứng từ 0 -> 15, Sau khi đọc lại data đã ghi, nếu đúng đèn led trên chân PD3 sẽ sáng, ngược lại nếu ghi bị failed hoặc read bị failed thì đèn ở chân PD3 sẽ tắt.

    Cách thức kiểm tra: các bạn sẽ dùng mạch nạp stlink_v2 + phần mềm “ST Visual Programmer” để đọc lại toàn bộ vùng nhớ và kiểm tra data thuộc địa chỉ từ 0x9FF0 -> 0x9FFF.

    1. Config bộ nhớ Flash.
    2. Trước khi thực hiện đọc ghi vào vùng nhớ Flash, chúng ta cần thực hiện một số config quan trọng như: Deinit lại toàn bộ vùng nhớ, Cài đặt thời gian xử lí, đồng thời mở khóa vùng nhớ. “FLASH_MEMTYPE_PROG” tương ứng với việc chọn vùng nhớ Flash để giao tiếp.

    3. Thực thi code giao tiếp với bộ nhớ Flash
    4. Trước tiên chúng ta sẽ ghi data với giá trị từ 0 -> 15 vào địa chỉ bắt đầu từ 0x9FF0 -> 0x9FFF(16 bytes). Đợi 1 khoảng thời gian nhỏ để chắc chắn rằng việc ghi đã thực thi xong, tiếp đến chúng ta sẽ đọc lại và kiểm tra vùng nhớ đã ghi, nếu chỉ cần 1 địa chỉ sai thì sẽ thoát quá trình đọc. Nếu kết quả ghi vào đọc lại giống nhau thì đèn led trên chân PD3 sẽ sang, ngược lại thì tắt.

      Chú ý: Để thao tác với vùng nhớ Flash thì chúng ta cần chú ý rằng code của quá trình biên dịch k được tràn vào vùng nhớ cần đọc/ghi. Ngoài lệnh đọc/ghi thông thường chúng ta có thể sử dụng đọc/ghi các block(IN_RAM trong thư viện) để với mục đích nâng cao tốc độ tương tác khi thao tác với số lượng data lớn.

    5. Kết quả thực thi.
    6. Sau khi dùng stlink_V2 và phần mềm “ST Visual Programmer” để đọc lại toàn bộ vùng nhớ, kết quả sẽ như hình bên dưới.

  5. Ví dụ với bộ nhớ EEPROM.
  6. Ví dụ: ghi data vào 16 byte cuối cùng của bộ nhớ Flash với địa chỉ 0x4000 -> 0x400F data tương ứng từ 0 -> 15, Sau khi đọc lại data đã ghi, nếu đúng đèn led trên chân PD3 sẽ sáng, ngược lại nếu ghi bị failed hoặc read bị failed thì đèn ở chân PD3 sẽ tắt. Cách thức kiểm tra: các bạn sẽ dùng mạch nạp stlink_v2 + phần mềm “ST Visual Programmer” để đọc lại toàn bộ vùng nhớ và kiểm tra data thuộc địa chỉ từ 0x4000 -> 0x400F.

    Tương tự như bộ nhớ Flash, giao tiếp với EEPROM cũng tương tự, chỉ khác cấu hình và địa chỉ.

    1. Config bộ nhớ EEPROM.
    2. Thực thi code giao tiếp với bộ nhớ Flash.
    3. Kết quả.
    4. Note : ngoài lệnh Read/Write , chúng ta còn một số lệnh như xóa, ghi 1 word… Các bạn có thể tham khảo trong file stm8s_flash.c và áp dụng thử cho project của mình. Bộ nhớ EEPROM của STM8S003 chỉ là 128 bytes tức là bắt đầu từ 0x4000 ->0x407F.

Link tải ví dụ với bộ nhớ flash. Link tải ví dụ giao tiếp với EEPROM