Site icon TAPIT

IC nhớ FLASH,SDRAM và mô hình bộ nhớ của vi điều khiển khi sử dụng bộ nhớ ngoài

Một chương trình nạp cho vi điều khiển cơ bản gồm phần code (chứa trong .text) và data (dữ liệu có thể được khai báo giá trị trước hoặc không). Bên cạnh đó, tổ chức bộ nhớ cho chương trình vi điều khiển còn có các phân vùng gồm heap (chứa các biến được cấp phát vùng nhớ) và stack (chứa các biến lưu trữ trạng thái một số thanh ghi khi vào hàm và các biến cục bộ) phục vụ cho quá trình hoạt động của vi điều khiển. Để mở rộng bộ nhớ, người dùng sẽ cần sử dụng thêm bộ nhớ ngoài cho vi điều khiển STM32. Bài viết này sẽ cung cấp các thông tin giúp mọi người hiểu cơ bản về các IC nhớ Flash, SDRAM và Mô hình bộ nhớ của vi điều khiển khi có sử dụng thêm bộ nhớ ngoài. 

Giới thiệu về FLASH,SDRAM IC

1. Bộ nhớ FLASH


Hình 1: Cấu tạo 1 cell nhớ trong bộ nhớ flash
[3]

2. Bộ nhớ SDRAM


Hình 2: Tế bào nhớ trong bộ nhớ SDRAM

Hình 3: Ví dụ về tổ chức bộ nhớ SDRAM [5]

Giới thiệu về mô hình bộ nhớ có sử dụng bộ nhớ ngoài

1. Giao tiếp giữa bộ nhớ ngoài và vi xử lý

Bảng 2: Kết nối của ngoại vi phục vụ bộ nhớ ngoài vào hệ thống bus

APB1 Kết nối với ngoại vi FMC Phục vụ cho bộ nhớ SDRAM
APB2 Kết nối với ngoại vi QSPI Phục vụ cho QSPI flash

Hình 4: Kết nối của các ngoại vi phục vụ bộ nhớ ngoài vào ma trận bus [2]

*Lưu ý: các tiền tố 1,2,3,4 được đặt cho bus AHB sau cầu bus là theo ý kiến chủ quan của mình để mọi người dễ hình dung. Thực tế, STMicroelectronics sắp xếp các tiền tố này khác hình 4, bạn đọc cần phải đọc kĩ datasheet để nắm rõ hơn.

2. Việc đọc/ghi tại bộ nhớ ngoài được thực hiện thế nào

Để vi xử lý có thể truy cập bộ nhớ ngoài như một không gian nhớ ở trong hệ thống như bộ nhớ nội, thì các instruction được dùng để đọc/ghi với bộ nhớ nội như mov, str, ldr cũng phải thực hiện được trên bộ nhớ ngoài. Tuy nhiên, các IC SDRAM và Flash ngoài không hỗ trợ sẵn điều này vì chúng ko có khả năng giao tiếp trực tiếp với vi xử lý qua hệ thống bus AHB, mà phải qua ngoại vi giao tiếp. Các ngoại vi FMC và QSPI phải làm công việc này. Có thể hiểu ngoại vi FMC và QSPI như một máy phiên dịch, chuyển đổi các tín hiệu data, address và các handshake protocol (giao thức bắt tay) của hệ thống bus AHB sang các address, data và command (lệnh) cho các bộ nhớ ngoài. Vậy thì từ các ngoại vi “phiên dịch” đó, giao tiếp đọc ghi với bộ nhớ ngoài được thực hiện như thế nào

Hình 5: Lệnh và timing giữa các lệnh trong SDRAM

Hình 6: Đọc dữ liệu của QSPI Flash

3. Mô hình lưu trữ chương trình bộ nhớ

Hình 7: cấu trúc chương trình C trong bộ nhớ Flash (bên trái) và Ram (bên phải). 

Như hình trên, ta thấy rằng chỉ có các biến được khởi tạo giá trị ban đầu mới được sao chép dữ liệu từ Flash qua RAM. Tuy nhiên, sự sắp xếp này là không bắt buộc hay cố định, đây chỉ là cấu hình mặc định của STMicroelectronics khi người lập trình không can thiệp vào file linker. Trên thực tế, chỉ có Reset vector (trong vector table) là cố định vì mọi chương trình được khởi động từ instruction ở vị trí 0x00000004 còn lại toàn bộ các phần khác đều có thể được thay đổi vị trí.

Hình 8: Khởi chạy code từ bộ nhớ ngoài

 

Hình 9: Tổ chức bộ nhớ cho một ứng dụng EdgeAI

Qua bài viết này mình đã trình bày các thông tin cơ bản về các IC nhớ Flash, SDRAM và Mô hình bộ nhớ của vi điều khiển khi có sử dụng thêm bộ nhớ ngoài.
Cùng đón chờ phần tiếp theo của nội dung này với chủ đề “Sử dụng Linker Script trong khai báo bộ nhớ”.  Chúc các bạn thành công!

Các tài liệu đã tham khảo:

[1]https://community.nxp.com/t5/LPCXpresso-IDE/Flash-wear-out/m-p/547098
[2]https://hub.digi.com/dp/path=/support/asset/technical-note-tn226-supported-flash-devices-for-rabbit-2000/3000-based-boards
[3]https://www.iue.tuwien.ac.at/phd/windbacher/node14.html
[4]https://www.tuxera.com/blog/nand-nor-flash-embedded-developers-guide/
[5]https://www.issi.com/WW/pdf/42-45S32400F.pdf


Nhóm tác giả
Ng.Q.Phương
Ng.H.N.Thương
Ng.H.Phúc