کد تخفیف برای تمام محصولات کارگاه پلاس: R5VYP5US

نکته ۶: محدودیت های حافظه EEPROM

نوشتن در حافظه های EEPROM چه محدودیت هایی دارد؟

سه محدودیت اصلی در استفاده از EEPROM ها وجود دارد:

  • سرعت خواندن و نوشتن
  • تعداد دفعات نوشتن اطلاعات
  • زمان شروع کار

در مبحث سرعت که بسته به نوع EEPROM، وضعیت مشخص است و نباید پیاپی به این حافظه Access انجام شود، چرا که سرعت این حافظه ها به مراتب کمتر از رم و Flash است. پس در صورت دسترسی زیاد به این حافظه میزان کارایی برنامه ی اجرایی به صورت چشم گیری کاهش می یابد.

اما چرا سرعت EEPROM کمتر است؟

از نظر ساختاری، ساخت FLASH و EEPROM مشابه هم می باشد پس نباید تفاوت سرعتی در ساختار باشد، پس این تفاوت سرعت از کجا شامل می شود؟

علت این تفاوت در ۲ بخش است:

  1. عملکرد تک بایتی و Mass (تعداد)
  2. اینترفیس ارتباط با حافظه

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

در حافظه های Flash، عمل پاک کردن یا Erase، به صورت Page می باشد. (در یک تعریف ساده، به تعدادی از بایت حافظه در کنار هم صفحه داده یا Page گویند.)

پس برای پاک کردن حافظه Flash، ابتدا می بایست صفحه (Page) مورد نظر پاک شود، تا بتوان داده جدید را در آن قرار داد. سوال مطرح شده اینجاست که با این تعریف باید سرعت Flash از EEPROM کمتر باشد؟! اما اینگونه نیست.

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

نکته در اینجاست که دسترسی تک بایت و تعداد زیادی بایت مطرح است. حافظه های Flash عمل پاک سازی را برای کل صفحه به یکباره انجام می دهند و این در صورتی است که در EEPROM می بایست به ازای هر بایت عمل Erase انجام شود و این یعنی صرف زمان به ازای هر بایت. حال فرض کنید این زمان به ازای تعداد بایت های بیشتر و بیشتر، به صورت فوق العاده ای افزایش می یابد.

در اندازه گیری سرعت حافظه، واحد اندازه گیری B/s (بایت بر ثانیه) است، پس در تعداد بایت، حافظه های Flash سرعت بسیار بیشتری نسبت به EEPROM ها دارند.

اما مشاهده می شود در تک بایت هم سرعت EEPROM کمتر از Flash است؟!

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

معمولا حافظه های فلش بر روی بستر های پرسرعت قرار میگیرند، چه فلش های داخلی و چه فلش های خارجی. به طور مثال می توان محل قرار گیری حافظه EEPROM را در معماری AVR اینگونه دید:

EEPROM در این معماری از طریق اینترفیس EEPROM، بر روی Data Bus قرار دارد که در مقایسه با دسترسی Flash مسیر کند تری دارد.

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

در Flash های خارجی، معمولا بستر های SPI و QSPI استفاده می شود که به مراتب سرعت بسیار بیشتری نسبت به I2C که بستر متعارف EEPROM است دارند.

محدودیت نوشتن در EEPROM

هیچگاه اطلاعاتی که به صورت پیوسته تغییر می کنند را در EEPROM ذخیره نکنید. این عمل باعث تحلیل وضعیت اتصال (شارژ) در EEPROM ها می شود و پس از حدود ۱۰۰۰۰۰ بار (بسته به کیفیت ساخت قطعه دارد) قطعه معیوب می‌شود. این مقدار توسط شرکت سازنده حافظه اعلام می شود.

چگونه اطلاعاتی که پیوسته در سیستم تغییر می کنند را ذخیره کنیم؟

در پاسخ دو مسئله مطرح است:

  1. استفاده از حافظه های SD نظیر MMC و یا SD card
    البته توجه کنید که راه اندازی این حافظه ها کمی زمان‌بر تر از EEPROM هاست. از مزایای این نوع حافظه ها می توان به فضای بالای آن ها اشاره کرد. (این حافظه ها نیز دارای ساختار Flash هستند.)
    Endurance در این حافظه ها در حدود ۱۰۰۰۰۰ بار نوشتار در هر سکتور است. هر سکتور در این حافظه به صورت پیش فرض دارای ۵۱۲ بایت است. با یک مدیریت ساده که در ادامه مطرح می شود، Endurance در این حافظه ها می تواند ۵۱۲ برابر یک EEPROM باشد.
    نکته ی دیگر این است که، DIE (سیلیکون طراحی شده درون IC) ساخت EEPROM بسیار بزرگ است و به ازای یک حافظه ی ۲۵۶Kbit فضای قابل ملاحظه ای را اشغال می کند تا جایی که در بسیاری از کنترلر های مدرن از گذاردن آن درون پکیج، اجتناب می کنند.
    علت بزرگ بودن سطح سیلیکون EEPROM، برای این است که به ازای هر بایت سلول، مدار Erase بیت های آن بایت نیز باید وجود داشته باشد، این موضوع یکی از عللی است که تمام EEPROM های ساخته شده با فضاهای بسیار ناچیز عرضه می شوند اما هم اکنون حافظه هایی با ظرفیت های چند صد گیگابایتی در SD ها وجود دارد.
    پس با رفتن به سکتور بعد جهت نوشتن، فضای جدیدی فراهم می شود که گویی که یک حافظه ی جدید است و ما با طول عمر بسیار زیادی روبه رو هستیم. این تکنیک Ping-Pong یکی از روش هایی است که برای افزایش طول عمر حافظه هایی با ساختار فلش قابل استفاده هستند.
  2. راه دیگر استفاده از RAM هایی با توانایی نگه داری اطلاعات است. این RAM ها اطلاعات خود را توسط باتری نگه داشته و با اتمام و یا حذف این باتری، اطلاعات نیز حذف می شوند.
    مشکل این نوع حافظه ها فضای کم آن ها نسبت به SD هاست. هم اکنون نظیر این حافظه در STM32 ها وجود دارد. این نوع حافظه ها با نام RTC Memory نیز شناخته می شوند.

زمان بندی شروع کار با حافظه EEPROM

هیچگاه در هنگام راه اندازی دستگاه (زمانی که هنوز جریان و ولتاژ مدار به حالت Steady state نرسیده است) به EEPROM دسترسی پیدا نکنید. هم برای نوشتن، هم برای خواندن. این زمان بسته به نوع مدار حداقل ۲۵ms است. در این هنگام با توجه به حساس بودن EEPROM به ولتاژ متغیر ممکن است برخی اطلاعات را از دست بدهید.

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

ارسال دیدگاه

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