آموزش استفاده از EEPROM توسط EasyMCU

آموزش استفاده از EEPROM توسط EasyMCU

حافظه EEPROM

EEPROM حافظه ای از نوع غیر فرار می باشد. غیر فرار به این مفهوم که زمانی که جریان برق در مدار وجود ندارد اطلاعات از بین نمی روند. برای درک بهتر اجازه بدید نگاهی به دو حافظه ی معروف به نام Flash و SRAM که در میکروکنترلرها وجود دارد بیندازیم.

 

حافظه SRAM

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

 

حافظه FLASH

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

جمع بندی و طرح یک سوال

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

حالا اگر در حین اجرای برنامه یک متغییر حیاتی داشتیم که مقدار آن در همه ی حالات باید حفظ می شد ، حتی در زمانی که به علت یک حادثه نا معلوم برق قطع شده باشد یا میکروکنترلر مجبور به راه اندازی مجدد شود، چه باید کرد؟

این نقطه ضعفی است که نه حافظه ی SRAM و نه FLASH از پس انجام آن بر نمی آیند ( با صرف نظر از موارد استثناء ) و اینجاست که حافظه ی سومی نیاز می باشد که هم نوشتن و خواندن در آن در زمان اجرای برنامه امکان پذیر باشد و هم با قطع شدن برق اطلاعات از بین نرود و پیوسته اطلاعات را در خود حفظ کند.

 

راه حل

حافظه ای به نام EEPROM با این قابلیت ها وجود دارد و در ادامه ی بحث با نحوه ی راه اندازی و استفاده از این حافظه آشنا می شویم. دقت کنید که  EEPROM یک حافظه با سرعت بالا نیست و هر بار بعد از خواندن و نوشتن احتیاج به چند میلی ثانیه تاخیر دارد. همینطور طول عمری برابر 1,000,000 بار خواندن و نوشتن دارد، پس در نحوه استفاده از آن دقت کنید. به عبارت ساده تر اگر در یک حلقه ی 1,000,000 تایی ، به این حافظه بنویسید و یا بخوانید، عمر حافظه به سر می رسد!

 

آموزش استفاده از EEPROM توسط EasyMCU

راه اندازی EEPROM با Zcross

این واحد به صورت پیشفرض فعال می باشد، پس فقط کافیست با متود های ()read و ()write اطلاعاتی از حافظه بخوانید یا در آن بنویسید. حافظه ی EEPROM در Zcross برابر 2KB ( کیلو بایت ) می باشد، یا به عبارتی 1024*2 ،فلذا آخرین آدرس حافظه که می توانید استفاده کنید 2047 می باشد.

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

 

سینتکس های خواندن و نوشتن

 

 برای نوشتن در EEPROM :

به جای data مقدار عددی مورد نظر و به جای myAddress آدرس مورد نظر و دلخواه را قرار دهید.

 

برای خواندن از EEPROM :

از آنجایی که اگر بخواهیم چند متغییر در EEPROM ذخیره کنیم ، نمی توانیم آدرس یکایک آنها را حفظ کنید، بهتر هست برای هر آدرس یک نام در نظر بگیرید و از دستور پیش پردازنده ی #define استفاده کنید. نحوه ی استفاده در پروژه نمونه مشخص شده است.

 

لطفا هرگونه سوال و … راجع به این مطلب را در انجمن ایزی.ام.سی.یو مطرح نمایید.

 

پروژه نمونه

در این پروژه مقدار 85 دسیمال ( یا 0x55 هگزادسیمال ) را در آدرس 1 حافظه ی EEPROM ذخیره می کنیم. نام این آدرس را myEEP قرار می دهیم تا راحتتر بتوانیم در آدرس مقصود بنویسیم یا بخوانیم ، در ادامه ی برنامه مقادیر را از حافظه EEPROM می خوانیم و در محیط ترمینال Easy MCU مقادیر را چاپ می کنیم. بعد از اولین اجرا ،  یک بار دیگر Zcross را راه اندازی می کنیم و ترمینال را اجرا می کنیم تا در 8 ثانیه ی اول عبارت EEPROM value is correct چاپ شود و ادامه ی ماجرا مانند قبل .

برنامه main.cpp نمونه