Site icon TAPIT

Giao tiếp mở rộng bộ nhớ SDRAM vi điều khiển STM32 với IC IS42S32400F qua giao diện FMC

Để mở rộng bộ nhớ RAM cho nhu cầu lưu trữ các dữ liệu của vi điều khiển, người thiết kế dự án cần sử dụng IC nhớ SDRAM để ghép nối với vi điều khiển và thực hiện các cấu hình, khai báo cần thiết để sử dụng bộ nhớ mới này một cách bình thường như bộ nhớ RAM tích hợp.Giao diện Flexible Memory Controller(FMC) của vi điều khiển thường được sử dụng để giao tiếp với SDRAM, và nhiều loại bộ nhớ khác như PSRAM, NAND/NOR FLASH,…
Trong bài viết này, TAPIT chia sẻ cùng các bạn thông tin về bộ nhớ SDRAM, giao diện giao tiếp, các bước để thực hiện cấu hình, khai báo mở rộng bộ nhớ RAM và kết quả thử nghiệm. Bài viết sử dụng bảng mạch STM32F746 Discovery, board mạch này có sẵn IC nhớ SDRAM IS42S32400F.

Hình 1: Giao tiếp FMC của SDRAM trên board STM32F746 DISCO

Hình 2: Tổ chức bộ nhớ SDRAM của IC IS42S32400F dùng trong board STM32F746 DISCO

Các khối chân trong Hình 1 và các cấu tạo IC SDRAM trong Hình 2:

1.Các tham số của SDRAM và cách đọc/sử dụng

1.1. Địa chỉ và bank

Hình 3: Address Table của SDRAM IS32S32400F

1.2. Clock

Hình 4: Tần số hoạt động của chip SDRAM


Hình 5: Speed/CL

166MHz CL = 3
100MHz CL = 2

1.3.Timing

Hình 6: Một số lệnh và timing cơ bản của SDRAM

Hình 7: Các thông số timing của chip SDRAM IS42S32400F

2.Cấu hình ngoại vi FMC trên CubeMX

Hình 8: Cấu hình tần số HCLK


Hình 11: Cấu hình địa chỉ, clock và timing


Hình 12: Exit self-refresh delay

*Lưu ý: Phải kiểm tra toàn bộ chân của FMC đã khớp với các chân được vẽ trong Schematic của board chưa. Nếu chưa, phải tiến hành tìm các chân thay thế phù hợp.

3. Khởi tạo module SDRAM trong hàm MX_FMC_Init()

 

 

 

Hình 13: Thời gian để refresh toàn bộ các hàng của SDRAM

  1. Edit file “main.h”

 

 

  1. Cấu hình trong file Linker

 

 

 

Kiểm tra khả năng đọc ghi của SDRAM

 

Ta cho debug thử và dừng ngay câu lệnh đầu tiên trong hàm “while(1)” như Hình 23. Sau đó vào mục Memory như Hình 14, ta thấy toàn bộ các byte trong SDRAM đã được set về 1 như mong muốn tại hàm memset.

Hình 14: Chương trình dừng ngày trước hàm lệnh đầu tiên trong while(1)

Hình 15: Toàn bộ các byte trong RAM đều được set về 1


Hình 16: Byte đầu được tăng từ 1 lên 2

Đến đây, chúng ta đã làm quen và thực hiện được việc đọc/ghi trên SDRAM. Phần tiếp theo sau đây sẽ hướng dẫn các bạn mở rộng bộ nhớ Flash ngoài.

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