در سلسله آموزش های راه اندازی و کار با برد ESP32، قسمت سیزدهم را به حافظه PSRAM اختصاص می دهیم. آنطور که در این سلسله آموزش بیان شد، برد ESP32 علاوه بر فناوری وای فای و توان برقراری ارتباط بی سیم، از پردازنده فوق العاده قدرتمند بهره می برد. این پردازنده دارای دو هسته بوده که می تواند برنامه ها را با توان و سرعت بسیار بالایی اجرا نماید. در کنار این، پردازنده ESP32 قادر به پذیرش حافظه رم خارجی نیز هست. به کمک این قابلیت فضای حافظه بسیار بزرگتر شده و نگرانی برنامه نویس از بابت محدودیت حجم، برطرف می گردد.
در این آموزش به بررسی نحوه ارتباط حافظه رم خارجی به پردازنده ESP32 می پردازیم. این حافظه که تحت عنوان PSRAM شناخته می شود، توسط شرکت سازنده درون بسته بندی پردازنده تعبیه شده است. به کمک این حافظه و با فعال سازی آن، می توان فضای حافظه رم پردازنده را گسترش داد. این مورد در پردازش های گرافیکی و سیستم های دارای رابط کاربری UI بسیار مناسب خواهد بود. در این آموزش به تعریف حافظه PSRAM و نحوه فعال سازی آن در برد ESP32 می پردازیم. دست آخر نیز جهت روشن شدن هرچه بهتر موضوع، به ارایه یک مثال برنامه نویسی خواهیم پرداخت. در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید.
تعریف انواع حافظه RAM
پیش از آنکه به تعریف حافظه PSRAM بپردازیم، ابتدا به معرفی حافظه RAM و انواع آن خواهیم پرداخت. در دسته بندی های حافظه برای میکروکنترلرها، به سه حافظه اصلی زیر بر می خوریم.
۱-حافظه FLASH
۲-حافظه EEPROM
۳-حافظه RAM
حافظه فلش، آنطور که اطلاع دارید برای ذخیره کدهای برنامه استفاده می گردد. در حقیقت دستورات برنامه نویسی یا همان کدهای برنامه پس از کامپایل و تبدیل به فایل باینری، درون این حافظه قرار می گیرند. همانطور که اطلاع دارید، برد ESP32 دارای حافظه فلش ۴ مگابایتی بوده که برنامه درون آن ذخیره می گردد.
در ادامه این موضوع، حافظه EEPROM جهت ذخیره سازی تنظیمات و متغیرهایی که باید با قطع برق مقدار خود را حفظ کنند، استفاده می گردد. البته درون پردازنده ESP32 حافظه EEPROM وجود نداشه و از فلش برای این مورد استفاده می گردد. پس از آشنایی با حافظه های EEPROM و FLASH، نوبت به حافظه RAM می رسد. حافظه RAM یا به طور کامل تر Random Access Memory، حافظه است که در آن متغیرهای برنامه ذخیره می گردد. به عبارت دیگر زمانیکه متغیرهایی از نوع اعشاری، رشته و… تعریف می کنید، این متغیرها درون این حافظه ذخیره می گردند.
در کنار این، حافظه RAM خود با دو تکنولوژی DRAM و SRAM ساخته می شود. در تکنولوژی DRAM، سیستم حافظه از خازن ها تشکیل شده است. به مرور زمان خازن ها دشارژ شده و داده ها از دست می رود. بنابراین نیاز است تا مجددا خازن ها در فواصل زمانی شارژ شوند تا داده ها حفظ شوند. این در حالیست در نوع حافظه استاتیک، به دلیل استفاده از ترانزیستورها حافظه نیازی به رفرش شدن ندارد. در تکنولوژی PSRAM از مزایا هر دو روش استفاده شده است. این مورد در قسمت بعد مورد بررسی قرار می گیرد.
فناوری PSRAM
در قسمت پیشین با حافظه RAM و دو فناوری جهت پیاده سازی آن آشنا شدیم. آنطور که از قسمت پیشین به یاد داریم، حافظه RAM جهت ذخیره داده ها به صورت موقت استفاده می گردد. در پیاده سازی حافظه رم به صورت سخت افزاری، دو فناوری خازنی(DRAM) و ترانزیستوری(SRAM) وجود دارد. در فناوری خازنی باید خازن ها جهت حفظ داده ها دائما شارژ شوند؛ این در حالیست که در ترانزیستورها نیازی به انجام این کار نیست. در عمل، حافظه SRAM از سرعت بیشتری برخوردار است، این در حالیست که حافظه DRAM حجم بیشتری داشته و همچنین هنگام اجرای برنامه می تواند متغیرها را پاک کرده و متغیرهای جدیدی را به جای متغرهای قبلی بنشاند. از طرفی دیگر، از ترکیب این دو، حافظه PSRAM ایجاد می شود. در حقیقت حافظه PSRAM از فواید دو حافظه DRAM و SRAM استفاده می کند. از این حافظه در برد ESP32 استفاده شده است. در قسمت بعد با دسترسی به حافظه PSRAM آشنا خواهیم شد.
فراخوانی حافظه PSRAM در ESP32
در این قسمت به نحوه استفاده از حافظه PSRAM می پردازیم. برای استفاده از این حافظه ابتدا مطابق تصویر زیر در منوی Tools گزینه PSRAM را انتخاب و فعال کنید.
پس از این مرحله، می بایست این حافظه را در برنامه تعریف نماییم. توجه داشته باشید که بیشینه مقدار حافظه PSRAM که در دسترس است، ۴ مگابایت خواهد بود. توابع زیر، مخصوص دسترسی به حافظه PSRAM توسعه یافته اند.
شرح | تابع |
کنترل برای وجود حافظه PSRAM در صورت وجود خروجی TRUE خواهد بود. | bool psramFound() |
تخصیص حافظه PSRAM با مقدار در ورودی به صورت بایت | void *ps_malloc(size_t size) |
ازاد سازی حافظه تخصیص یافته، توجه: آدرس حافظه به صورت اشاره گر در ورودی تابع قرار می گیرد. | free |
پس از آشنایی با این توابع، قسمت بعد را به اجرای نمونه برنامه اختصاص می دهیم.
اجرای یک نمونه برنامه
پس از بررسی حافظه نوبت به اجرای یک نمونه برنامه می رسد. در برنامه زیر حافظه ای را دریافت کرده و سپس به سیستم آن را باز می گردانیم.
void setup() { byte* psdRamBuffer = (byte*)ps_malloc(500000); //دریافت ۵۰۰ هزار بایت یا ۵۰۰ کیلو بایت از حافظه free(psdRamBuffer); //ازاد سازی حافظه } void loop() {}
لوازم مورد نیاز
لینک خرید برد ESP32، کلیک کنید
جمع بندی
در مجموعه آموزش های برد ESP32، قسمت سیزدهم را به حافظه PSRAM اختصاص دادیم. حافظه PSRAM به عنوان نوعی خاصی از حافظه دسترسی تصادفی، در ساخت پروژه های مبتنی بر میکروکنترلر نظیر ساعت هوشمند و…. بسیار کاربردی است. این حافظه از تراکم بالای حافظه DRAM و سرعت SRAM بهره می برد. بردهای ESP32 نیز از این حافظه جهت اجرای برنامه های خود استفاده می کنند. در این آموزش به تحلیل و بررسی این حافظه پرداختیم. سپس در ادامه نحوه دسترسی و استفاده از این حافظه در برنامه ها را مورد مشاهده قرار دادیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام ایا تمام esp32 cam ها از این حافظه بهره می برند؟
سلام
مدل های S دارای این حافظه هستند. سایر مدل ها را باید بررسی کنیم. ولی به نظر میرسد اکثر بردها داشته باشند.
سلام . آیا psram همان حافظه eeprom است؟
چون eeprom که در esp32 هست محدودیت دفعات ذخیره داده دارد
تشکر
سلام
خیر، حافظه PSRAM در حقیقت نوعی جدید از حافظه RAM است. این حافظه تعداد محدودیت در نوشتن ندارد. اما پس از قطع برق، اطلاعات آن پاک خواهد شد.
پی اس رم در ایران پیدا ننمیشود خیلی گشتم ایا فروشگاه یا سایتی هست که بتونم بخرم
نیاری به خرید نیست، داخل خود ماژول هست! با دستورات می توانید آن را فعال کرده و استفاده کنید.
سلام مهندس چجوری میشه بوت لودر روی esp32cma و esp8266 بریزیم
آموزشی در این مورد منتشر نمیکنید ؟
سلام
در رابطه با AT قبلا آموزش گذاشته ام. این مورد هم جالب است. تحقیق می کنم. مرسی از شما
سلام مهندس من موقعی که میخوام یه کد رو کامپایل کنم روی برد ESP32 ارور زیر رو میده میشه لطف کنید بگید ارور مربوط به چی هست برطرف کنم
This version of C:\Users\mohammad\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\4.2.1\esptool.exe is not compatible with the version of Windows you’re running. Check your computer’s system information and then contact the software publisher.
exit status 1
Error compiling for board DOIT ESP32 DEVKIT V1.
سلام
از چه نسخه ویندوز استفاده میکنید؟
ویندوز ۱۰
سلام
آردوینو را به نسخه ۲٫۰۲ ارتقا دهید.
سلام مجدد مهندس این نسخه اردوینو که گفتید برای ویندوز ۶۴ bit فقط هست
از من ۳۲ bit هست
پس چاره ای نیست جز نصب سیستم ۶۴!
سلام. یعنی حتا ۲۰ مگابایت هم در psram ذخیره می شود؟