آموزش AVRآموزش آردوینوآموزش الکترونیک

انواع حافظه در میکروکنترلر ها و برد آردوینو

در این مقاله با بلوک های حافظه داخلی میکروکنترلر ها و پلتفرم آردوینو آشنا می شویم. ما تاکید ویژه ای بر توصیف و درک عملیات اساسی بلوک های حافظه فلش، حافظه EEPROM و حافظه دسترسی تصادفی استاتیک (SRAM) در آردوینو خواهیم داشت، . همچنین در مورد معماری و طراحی فیزیکی حافظه بحث خواهیم کرد.

حافظه چیست؟

حافظه یک منبع ضروری برای هر سیستم محاسباتی به خصوص در سیستم های امبدد است. حافظه یکی از مجموعه های متعدد درون یک میکروکنترلر است. در شکل 1، یک باس ماژول حافظه را به CPU و دستگاه های ورودی/خروجی متصل می کند. هدف بلوک حافظه این است که بسته به نیاز برنامه، داده ها یا اطلاعات زمان اجرا را به طور موقت یا دائم ذخیره کند.

حافظه چیست؟

دوره آموزش آردوینو دوره آموزش ESP32 دوره آموزش اینترنت اشیا حرفه ای دوره آموزش AVR

در زمینه سیستم های محاسباتی، حافظه به دستگاه های نیمه هادی اکسید فلزی اطلاق می شود که اطلاعات یا داده ها را برای پردازش بیشتر توسط CPU ذخیره و بازیابی می کنند. همانطور که در نمودار زیر نشان داده شده است، می توانیم حافظه را به عنوان یک آرایه جدولی از سلول ها در نظر بگیریم. هر سلول این اطلاعات را در قالب 8 بیت ذخیره می کند. هر بیت میتواند 1 یا 0 باشد و مجموعه 8 بیت یک بایت را تشکیل میدهد.

سلول حافظه
یک سلول حافظه

هر سلول حافظه دارای ویژگی های زیر است:

  • هر سلول می تواند داده هایی با اندازه های خاص را به خاطر بسپارد. به طور معمول، 1 بایت (8 بیت) اطلاعات را می توان در یک سلول ذخیره کرد.
  • هر سلول یک شماره منحصر به فرد برای شناسایی و آدرس دهی دارد.
  • مهمتر از آن، ما می توانیم اطلاعات هر سلول را از طریق عملیات WRITE یا READ ذخیره کنیم یا بخوانیم.

عملیات های حافظه

عملیات نوشتن در حافظه به یک آدرس و یک مقدار نیاز دارد. عملیات خواندن فقط به یک آدرس نیاز دارد و اطلاعات موجود در آن مکان را میخواند. ذخیره سازی داده ها با استفاده از نماد هگزادسیمال بسیار بهتر از ذخیره به شکل باینری است. به طور مثال داده باینری 01111101 به شکل هگزادسیمال 7D نشان داده میشود که بسیار کوتاه تر و شکیل تر است. پیشنهاد میکنم مقاله تبدیل باینری دسیمال هگز را بخوانید.

به تصویر زیر دقت کنید.

عملیات های حافظه

  • در آدرس 175 ما عدد هگزادسیمال 7D را داریم که نشان دهنده عدد 125 است.
  • اگر دو آدرس را همزمان بخوانیم، مثلا آدرس 176 و 177، چهار رقم هگزادسیمال 1F1A را داریم که نشان دهنده عدد 1962 است.
  • برای داده های بزرگتر مثل رشته های متنی میتوان چندین سلول حافظه را خواند.

حافظه فرار و غیر فرار

انواع مختلفی از حافظه ها موجود است و کاربرد هر حافظه بستگی به سیستم اصلی آن دارد.

برخی از سیستم های حافظه، برای نگهداری اطلاعات ذخیره شده به برق نیاز دارند. چنین سیستمی حافظه فرار نامیده می شود. دستگاه تا زمانی که برق وجود دارد داده ها را نگه می دارد. این بدان معنی است این سیستم ها برای ذخیره داده های موقتی مورد نیاز هستند.

از سوی دیگر، برخی از سیستم های حافظه می توانند اطلاعات را حتی در صورت قطع برق به خاطر بسپارند. به این حافظه ها غیر فرار می گویند. هدف اصلی این سیستم های حافظه ذخیره سازی طولانی مدت داده ها است. نمونه هایی از حافظه های غیر فرار ROM و فلش مموری هستند.

حالا بیایید تفاوت بین حافظه فرار و غیر فرار را ببینیم:

حافظه فرار حافظه غیر فرار
توضیحات وقتی برق قطع میشود اطلاعات حذف میشوند وقتی برق قطع میشود اطلاعات حفظ میشوند
کاربرد کش، رجیستر، حافظه SRAM و حافظه DRAM هارد، حافظه FLASH، حافظه EEPROM
نگهداری موقت داده ها نگهداری دائم داده ها

انواع حافظه داخلی میکروکنترلر های آردوینو

شکل زیر درخت حافظه کلی یک سیستم کامپیوتری را نشان می دهد. این تصویر همچنین زیرسیستم های حافظه مرتبط با آردوینو را نشان می دهد.

انواع حافظه در میکروکنترلر آردوینو
انواع حافظه کامپیوتر. حافظه های هایلایت شده مربوط به آردوینو هستند.

حافظه FLASH

حافظه FLASH که به نام حافظه فلش نیز شناخته می شود، هم از نظر تعداد واحدهای تولیدی و هم از نظر فروش، پرچمدار فعلی بازار حافظه های نیمه هادی است. زیرا حافظه فلش هزینه بسیار کمتری دارد. همچنین، ذخیره اطلاعات در آن سریع و آسان است. حافظه فلش یک حافظه غیرفرار است، به این معنی که سلول‌ها اطلاعات را برای مدت طولانی نگه می‌دارند، حتی زمانی که برق دستگاه قطع شده باشد. در میکروکنترلر ها، حافظه فلش به عنوان حافظه برنامه استفاده می شود یعنی کد نوشته شده روی آن ذخیره میشود. هر سلول حافظه فلش به صورت الکتریکی نوشته یا پاک می شوند و می توانند تا 10000 چرخه نوشتن-پاک کردن داشته باشند.

فلش مموری در دستگاه های زیر رایج است:

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
  • تلفن های همراه
  • شبکه های کامپیوتری
  • محصولات الکترونیکی مصرفی مانند دوربین های دیجیتال، دوربین های فیلمبرداری و کنسول های بازی ویدئویی،
  • دستگاه های صنعتی، به عنوان مثال سیستم های امنیتی، سیستم های نظامی و محصولات خرده فروشی
  • کارت های حافظه و هارد درایو ها

حافظه فلش در میکروکنترلر و آردوینو

حافظه فلش که به عنوان حافظه برنامه نیز شناخته می شود، جایی است که آردوینو کد را در آن ذخیره و اجرا می کند. از آنجایی که فلش مموری غیرفرار است، کد آردوینو زمانی برق قطع شود نیز باقی میماند. با این حال، هنگامی که کد شروع به اجرا کرد، دیگر نمی توان اطلاعات موجود در حافظه فلش را تغییر داد.

جدول زیر میزان حافظه فلش موجود بر روی بردهای مختلف آردوینو را نشان می دهد:

حافظه فلش بردهای آردوینو

اندازه برنامه پس از آپلود طرح در پنجره پایین نرم افزار آردوینو IDE نمایش داده می شود. برای این مثال، کد ما فقط 1758 بایت از 30720 بایت موجود اشغال می کند.

حافظه مصرف شده کد آردوینو

حافظه EEPROM چیست؟

حافظه فقط خواندنی قابل برنامه ریزی با قابلیت پاک شدن الکتریکی (EEPROM) یک نوع حافظه ارزان قیمت و غیر فرار است که به این معنی است که با قطع برق از دستگاه، داده ها را از دست نمی دهد. این نوع حافظه برای ذخیره مقادیری استفاده میشود که نوشته میشوند و نیاز است در آینده باز هم خوانده شوند. اکثر EEPROM های موجود در بازار امروزه دارای رابط سریال SPI یا I2C برای ارتباط هستند. یک سلول حافظه EEPROM از نظر معماری تقریباً مشابه سلول حافظه فلش است.

حافظه EEPROM در آردوینو

در برخی موارد، ممکن است نیاز داشته باشیم که وضعیت دستگاه های ورودی و خروجی خاصی را برای مدت طولانی در آردوینو ذخیره کنیم. برای این کار، با کمک کتابخانه های آردوینو یا کتابخانه های EEPROM، داده ها را در حافظه EEPROM ذخیره می کنیم. این به ما کمک می کند تا زمانی که آردوینو را دوباره روشن می کنیم، اطلاعات را قبلی را بازیابی کنیم.  توابع زیر به ما کمک می کنند تا با حافظه EEPROM در آردوینو تعامل داشته باشیم.

#include <EEPROM.h>
EEPROM.write(address, value);
EEPROM.read(address);
EEPROM.update(address, value);
EEPROM.get(address);
EEPROM.put(address, value);

حافظه SRAM چیست؟

حافظه دسترسی تصادفی استاتیک (SRAM) نوعی رم است که از مجموعه ای از ترانزیستورها برای کمی داده ها استفاده می کند. حافظه SRAM فرار است. این بدان معنی است که تا زمانی که مدار برق داشته باشد سلول حافظه داده را در خود نگه می دارد. برخلاف حافظه DRAM، سلول حافظه SRAM برای حفظ داده ها نیازی به تازه سازی مداوم ندارد. حافظه SRAM بسیار گرانتر از DRAM است، از نظر ساختار کوچکتر اما سریعتر است. این ویژگی ها برای استفاده در سرورهای با کارایی بالا یا حافظه کش مناسب هستند که معمولاً بین حافظه اصلی و CPU سیستم اعمال می شوند.

حافظه SRAM در میکروکنترلر و آردوینو

حافظه SRAM در میکروکنترلر ها و برد های آردوینو وظیفه اجرا برنامه های متغیر فرعی را دارد. متغیر های تعریف شده در .data و متغیر های تعریف نشده در .bss قرار میگیرند. در انتهای بلوک حافظه SRAM میتوانید Stack را مشاهده کنید. داده هایی که در هنگام اجرای توابع و … ایجاد میشوند در Stack ذخیره میشوند.

ساختار حافظه Sram
سلول حافظه SRAM با (الف) حافظه آزاد زیاد و (ب) حافظه آزاد کم

اندازه Stack با افزایش تعداد وقفه ها یا متغیرها افزایش می یابد. همانطور که در شکل a بالا نشان داده شده است، یک SRAM سالم چیزی است که حافظه آزاد زیادی دارد. با بیشتر شدن Stack، حافظه آزاد تخلیه می شود و ممکن است مشکلاتی مربوط به اجرای برنامه رخ دهد.

اگر حافظه SRAM تمام شود چه اتفاقی می افتد؟

آردوینوهایی که به درستی برنامه ریزی نشده اند ممکن است حافظه را در حین اجرای برنامه تمام کنند. شکل b یک حافظه Stack را نشان می دهد که رشد کرده و بیشتر فضای آزاد بلوک SRAM را اشغال کرده است. هنگامی که حافظه آردوینو (FLASH، SRAM و EEPROM) تمام شود، ممکن است موارد زیر رخ دهد:

برای حافظه FLASH یا SRAM: اگر SRAM در آردوینو تمام شود، موارد زیر ممکن است رخ دهد:

  • برنامه ممکن است اجرا نشود یا به طور غیرمنتظره ای کار کند.
  • خراب شدن برنامه یا متغیرهایی که نتایج غیر قابل پیش بینی را به همراه دارد.
  • وقتی Stack از کار بیفتد، باعث خرابی فوری می شود.
  • اگر اندازه برنامه بزرگتر از حافظه باشد، طرح ممکن است آپلود نشود.

EEPROM: تمام شدن حافظه EEPROM کمی دشوار است زیرا اکثر برنامه ها از EEPROM استفاده نمی کنند. اما اگر این اتفاق بیفتد، عملکرد برنامه اصلی تحت تأثیر قرار نخواهد گرفت.

3.9 (14 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

4 نظر

  1. سلام مهندس جان من تو این حرفه نیستم ولی یک PIC16F688 برای ژنراتور برق داریم ترکیده و یک عدد خام میتونم تهیه کنم اما میگن باید برنامه رو داخل ان ذخیره کنیم لطفا اگه میتونید کمک کنید از نظر اطلاعات یا اینکه اگه تو رشته کارتون هست و انجام میدید راهنمایی و کمک کنید ممنون میشم

  2. من یک پروژه اکسس با آردوینو یونو و ماژول سیمکارت انجام دادم که فقط شماره همراه های وارد شده می توانند با یک در را باز کنند و وارد شوند، اما مشکلم اینحاست که برای اضافه کردن یا حذف کردن فردی حتما باید با کامپیوتر به آن وصل بشم و شماره ای را حذف یا اضافه کنم، چطور و با چه روشی می توانم یک شماره را ادمین کنم که آن شماره ادمین این تغییرات را با پیامک انجام دهد؟

  3. با سلام و احترام
    من تو پروژم به یه مشکلی خوردم اونم اینه که میخوام داده هایی که از به صورت آنالوگ از پین های آنالوگ میگرم رو آردوینو ذخیره کنه و وقتی خواستم اونها رو در توابعم استفاده کنم ممنون میشم کمکم کنید که از چه دستوری استفاده کنم🙏

    1. سلام عزیز
      باید از دستورات مربوط به حافظه EEPROM استفاده کنید. در دوره آردوینو کامل آموزش داده شده

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *