SDRAM in STM32

Started by tha, March 08, 2022, 07:02:02 AM

Previous topic - Next topic

tha

https://controllerstech.com/sdram-in-stm32/

SDRAM in STM32

บทช่วยสอนของเขาจะครอบคลุมถึงวิธีเชื่อมต่อ the external SDRAM กับ STM32. ส่วนมากของ the STM32 boards, ซึ่งมาพร้อมกับ the pre attached SDRAM, มี the MT48LC4M32B2B5 โดย Micron. ดังนั้นบทช่วยสอนนี้จะครอบคลุมถึงการเชื่อมต่อของเฉพาะ RAM นี้.

SDRAM ส่วนใหญ่ถูกใช้เมื่อเราทำงานกับบัฟเฟอร์ขนาดใหญ่ เช่น ในขณะที่ใช้จอ LCD ที่นี่เราจำเป็นต้องเก็บเฟรมบัฟเฟอร์, ซึ่งโดยทั่วไปแล้วจะมีขนาดสองสามร้อยกิโลไบต์ การจัดเก็บบัฟเฟอร์ขนาดใหญ่ดังกล่าวใน RAM ภายในไม่สามารถเป็นไปได้สำหรับไมโครคอนโทรลเลอร์บางตัว และนั่นคือเหตุผลที่เราใช้ SDRAM สำหรับการจัดเก็บ

เริ่มด้วย the CubeMX configuration ก่อน

tha

                                                     CubeMX SETUP



     •  The SDRAM มี 2 banks, Bank 1 and Bank 2.

     •  SDRAM1 (Bank 1) หรือ SDRAM2 (Bank 2) จะขึ้นอยู่กับบอร์ดที่คุณกำลังใช้. สำหรับผม, มันเป็น SDRAM1

     •  Clock and Chip Enable ถูกเซ็ตไปยัง SDCKE0+SDNE0 สำหรับ the Bank 1, และ SDCKE1+SDNE1 สำหรับ the Bank
         2.

     •  ผมกำลังใช้ 4 internal Banks, ดังนั้นขนาดของ the RAM = 4*32 = 128 Mbits

     •  The ADDRESS เป็น 12 bits. ตรวจเช็ค the schematics สำหรับจำนวนของ address pins.

     •  The DATA เป็น 16 bits wide. ตรวจเช็ค the schematics สำหรับจำนวนของ data pins.

tha



กำหนดค่าพารามิเตอร์ตามที่แสดงด้านบน ฉันได้ทดสอบสิ่งเหล่านี้กับ 3 ตัวควบคุมที่แตกต่างกัน และการตั้งค่าเดียวกันนี้ใช้ได้กับทั้งหมด

นี้ใช้สำหรับการกำหนดค่า CubeMX

นอกเหนือจากนี้ เราจำเป็นต้อง include ไฟล์สำหรับ the MT48LC4M32B2B5 ใน project folder ของเรา. คุณสามารถรับไฟล์เหล่านี้ได้ที่ส่วนท้ายของโพสต์นี้


tha

                                                   Some Insight into the CODE

อย่างแรกสุดเราจำเป็นต้องกำหด(define) the address ของ the SDRAM. ผมได้สร้าง write and read buffers ด้วย.



ที่นี่ผมได้กำหนด(define) the address เป็น 0xC0000000. นี้ขึ้นอยู่กับบอร์ดที่คุณกำลังใช้.

เพื่อหา the address, ตรวจเช็ค the FMC section ใน reference manual ของคุณดังแสดงข้างล่าง.


tha

ภายใน the main function, เราสามารถใช้ง่ายๆ the memcpy function เพื่อคัดลอก the data ลงใน/จาก the SDRAM.


tha

                                                           RESULT



คุณสามารถดูข้างบน, the data ที่ the location 0xC0000000 เป็นอย่างเดียวกับที่เราคัดลอก.

ถ้าเราดำเนินการ the read operation, เราควรที่จะสามารถอ่าน data นี้ลงใน buffer ของเรา.