الرئيسيةبحث

ذاكرة الكمبيوتر eeprom

فهرس

ذاكرةالكمبيوتر EEPROM

لنتعرف على أنواع الذواكر المستخدمة في الحاسب

ذاكرة الوصول العشوائي RAM =

الذاكرة المخصصة للقراءة فقط READ ONLY MEMORY

الذاكرة الظاهرية VIRTUAL MEMORY

ذاكرة وميضية FLASH MEMORY=

أنواع ذواكر الرام للوصول العشوائي:

دي رام

S RAM

FPM DRAM

SDRAM

EDO DRAM

RDRAM

FLASH RAM

VRAM

كيف تعمل ذواكرrom  :

نقطة التقاء السطر مع العمود في الـRAM نجد ترانزستور بينما نقطة التقاء السطر مع العمود في ROM سنجد diode -في حال قام الديود بوصل السطر مع العمود ستكون محتوى الخلية 1 -في حال لم يتصل السطر مع العمود بالتالي فإن محتوى الخلية 0

أنواع الـROM  :

ROM

PROM

EPROM

EEPROM

يوجد أمرين مشتركين بين هذه الأنواع : -البيانات لا تضيع عند قطع التيار الكهربائي كما يحدث في RAM -البيانات لا يمكن تغييرها باستخدام وسائل خاصة

الذاكرة EEPROM:

Electrically Erasable Programmable Read-Only Memory تتميز هذه الذاكرة : -يمكن الكتابة على الرقاقة دون إزالتها من مكانها

-يمكن تغيير جزء محدود من الرقاقة دون محوها كلها

-تغيير المحتويات لا يحتاج إلى أدوات خاصة أو أجهزة

-يمكن تغيير محتويات الخلايا باستخدام برنامج يتحكم بالمجال الكهربائي للخلية ويقوم بشحنها أو تفريغها حسب الطلب

-الكتابة( التفريغ أو الشحن) يتم على مستوى الخلية أي بالتدريج كل مرة بايت واحد مما يجعلها بطيئة جداً

كيفية استخدام الـEEPROM في المعالجات

تستعمل لحفظ المعلومات الهامة كحفظ معلومات البرامج أو حفظ اعدادات البيوس حيث أنها تحتفظ بمعلوماتها عند قطع التيار الكهربائي

يوجد في الـPIC أربع مسجِّلات تستخدم في الوصول إلى ذاكرة الـ EEPROM ، هذه المسجلات هي :

مسجل EEDATA :

يستخدَم كمسجِّل مؤقَّت لتخزين المعطيات التي نريد إيصالها إلى EEPROM .

مسجل EEADR :

يستخدم لتخزين عنوان لموقِع في الـ EEPROM والذي نريد القراءة منه أو الكتابة فيه .

مسجل EECON1 :

يحوي هذا المسجل على كل خانات التحكم اللازمة للكتابة أو القراءة في الـ EEPROM .

مسجل EECON2 :

هو مسجِّل خاص يمكِّنكَ من كتابة المعطيات .

مثال توضيحيّ

عملية القراءة

حتى تتم عملية القراءة من الـ EEPROM بكل بساطة يجب عليك أن تجعل PIC يعرف أيَّ موقِع تريد القراءة منه ، لأنَّه يوجد 64 منها يمكن للمعالِج أن يخزِّنَ فيها .! إذاً ، أوّلُ شيء لا بُدَّ أن تقوم بهِ هو كتابة عنوان الموقِع الذي تُريد القراءة منه ، وذلك في المسجِّل EEADR ؛ على سبيل المثال أنت تريد القراءة من الموقع الثالث ، في هذه الحالة استخدم التعليمات التالية :

MOVLW 2h

movwf EEADR

و لكِّن لحظة ! .. كُنت تريد القراءة من الموقع الثالث ، لماذا إذن وضعنا القيمة H2 ؟ … إذن تذكّر ، العنوان 0 ( 0h ) هو الموقِع الأوّل ، و العنوان 63 ( 3Fh )هو الموقع الـ 64 .. إذن هذه الذاكرة تبدأ مواقعها من 0 و ليس من 1 .

والآن حتى تعرف الـ PIC أنّكَ تريد فعلاً قراءة قيمة من الـ EEPROM فلا بُدَّ من تفعيل واحدة من خانات التحكُّم الخاصة بالمسجِّل EECON1 ، هذه الخانة الخاصة هي : RD ( الخانة رقم 0 ) وهي اختصار لكلمة READ ( قراءة ) . المسجِّل EECON1 موجود في الصفحة 1 من الـ RAM و بالتالي قبل الوصول إليه لا بُدَّ من تفعيل الخانة RP0 في مسجِّل الـ STATUS ( مسجِّل الحالة ) :

bsf status ، RP0

و للقراءة من الموقِع قم بتفعيل الخانة RD إلى القيمة 1 :

bsf EECON1 ، RD

عندما نقوم بجعل قيمة RD مساوية لـ 1 فإنّ الـ PIC ترى آلياً القيمة الموجودة في EEADR وتستخدمها كعنوان لذاكرة EEPROM التي ستقوم بالقراءة منها ، وبعد قراءة الموقع توضع المعطيات في المسجِّل EEDATA وعندما يتُّم ذلكَ يتم إرجاع الخانة RD إلى 0 مجدداً . كل ما سبق يتُّم أثناء تنفيذ التعليمة :

bsf EECON1 ، RD

المعطيات الآن موجودة في EEDATA ويمكننا أن نعمل بها ما نشاء ، هذا المسجِّل موجود في الصفحة 0 من ذاكرة RAM وبالتالي لا بُدَّ أن نمحي الخانة RP0 في STATUS قبل الوصول إليه :

bcf STATUS ، RP0

movf EEDATA ، W

فيما يلي مجموعة التعليمات اللازمة للقراءة من EEPROM :

h1 movlw

EEADR movwf

STATUS ، RP0 bsf

EECON1 ، RD bsf

STATUS ، RP0 bcf

EEDATA ، W movf

نضع هذه التعليمات في إجرائية SUBROUTINE بمنتهى السهولة ، وكل ما نحتاجه لاستخدامها هو وضع عنوان الـ EEPROM في المسجِّل W ، وبعد تنفيذ هذه الإجرائية فإنَّ القيمة التي سترجعها سوف يتم وضعها في المسجِّل W :

EEADR movwf EepRead

STATUS ، RP0 bsf

EECON1 ، RD bsf

STATUS ، RP0 bcf

EEDATA ، W movf

return

لاستخدام هذه الإجرائية قم بشحن المسجِّل W بالعنوان ثم قم باستدعائها .. بفرض أنك تريد القراءة بشكل مستمر من EEPROM و كتابة المعطيات على الـ PORT B فهناك طريقة تمكنِّكَ من فِعل ذلك :

EEADR clrf

EepRead call EEloop

PORTB movwf

EEADR incf

d'64' movlw

EEADR ، W xorwf

STATUS ، Z btfss

EEloop goto

إن إجرائيةEepRead قد لا تُنَفَّذ بشكل جيد إذا لم تكُن حذِراً ..هل يُمكنِكَ تخمين سبب ذلك ؟؟ ما الذي يجري عندما تكون الخانة RP0 في المسجِّل STATUS لها قيمة '1 ' في الوقت الذي يتُّم فيه استدعاء الإجرائية ؟؟ .. الإجابة على هذين التساؤلين كالتالي : لن يتُّم الوصول إلى المسجِّل EEADR ، والمسجِّل EECON1 سيكون في البرنامج الذي نستخدم فيه كلا صفحتي RAM ، و بالتالي يجب أن نعرف جيداً أننّا في الصفحة الصحيحة .. إذا لم تكُن واثقاً في أي صفحة أنت تعمل عند استدعاء الإجرائيّة EepRead ، فقم قبل أي شيء بتصفير الخانة RP0 داخل الإجرائية كالتالي :

STATUS ، RP0 bcf EepRead

EEADR movwf

STATUS ، RP0 bsf

EECON1 ، RD bsf

STATUS ، RP0 bcf

EEDATA ، W movf

return

هذا بالفِعل مثال رائِع لتوضيح دور الخانة RP0 في العملية .. يُمكِنُكَ من خلاله ملاحظة عدد مرات استخدامها ، و إنَّ هذه الإجرائية لن تعمل بدونها ..

عملية الكتابة

إن الكتابة في الـ EEPROM أمر أصعب قليلاً ، هنا يُفترَض بكَ كتابة سِلسلة من التعليمات الخاصة في كُلِّ مرة تريدُ فيها كتابة معطيات في تلك الذاكرة ، وإذا لم تُفلِح في ذلك ، فإنَّكَ لن تكون قادراً على كتابة أي مُعطيات على الإطلاق ..! أولُ شيء ستقومُ بهِ هو شحن المسجِّل EEADR بعنوان الموقِع الذي تريد الكتابة فيه ، كذلك لا بُدَّ أن تشحن المسجِّل EEDATA بقيمة المعطيات التي تُريدُ تخزينها .. بفرض أنَّك تريد كتابة القيمة 0x45 في الموقِع الأوَّل .. إذَن قم بكتابة ما يلي :

0h movlw

EEADR movwf

0x45 movlw

EEDATA movwf

الترتيب غير ضروري في كتابة التعليمات السابقة ( شحن المسجِّلات ). الآن حتى نُعلِمَ الـ PIC أننّا نريد كتابة قيمة في الـ EEPROM ، فإننا نحتاج لتفعيل بعض الخانات الخاصّة في المسجِّل EECON1 ، أحد هذه الخانات الخاصة هي WT (الخانة 1) و هي اختصار لـ WRITE ( كتابة ) . و الخانة الأُخرى هي WREN (الخانة 2 ) و هي اختصار لـ WRITE ENABLE (تأهيل القراءة ) ، تبدو هاتان الخانتان متشابهتين ، ولكِّن في الحقيقة لهما وظيفتان مختلفتان قليلاً .


قبل أن تتُّم الكتابة يجب تأهيل WREN أي جعلها'1' ، في حال كانَت 0 فإنّ الـ PIC لن تكتُبَ شيئاً من المعطيات حتى لو طُلِبَ مِنها ذلِك . المسجِّل EECON1 متوضِّع في الصفحة 1 من ذاكرة الـ RAM و بالتالي للوصول إليه سوف نضع الخانةRP0 في المسجِّل STATUS على الوضع '1' كالتالي : STATUS ، RP0 bsf

ولتفعيل الكتابة قم فقط بتأهيل WREN أي جعله'1' :

EECON1 ، WREN bsf

لجعل الـ PIC تبدأ بالكتابة في الـ EEPROM لا بُدَّ من استخدام التعليمات السابقة ، بل لا بُدَّ من كتابتها بنفس الشكل الذي ورَدَت فيه تماماً ، و بنفس الترتيب حتماً .. إضافة للخانة WREN فإنَّ هذه السلسلة من التعليمات تعتبر عامِل أمان ضد أخطاء القراءة . إن المسجِّل EECON2 هو أيضاً في الصفحة 1 من الـ RAM ، والخانة RP0 قد تمَّ وضعها على1 مسبقاً ، أي لا داعي لإعادة ذلك مرةً أُخرى ..

0x55 movlw

EECON2 movwf

0xAA movlw

EECON2 movwf

EECON1 ، WT bsf


بعد تنفيذ هذه التعليمات ، و بِجعلِكَ الخانة WT مساوية '1' ، فإنَّ الـ PIC سوف ترى القيمة المخزَّنة في EEADR على أنَّها عنوان موقع الـ EEPROM الذي ستكتُب فيه ، كما أنَّها ترى القيمة المخزَّنة في EEDATA على أنَّها المعطيات التي ستكتبها . إنَّ عملية الكتابة التي تقوم بِها الـPIC في الـ EEPROM تأخُذُ وقتاً ، وذلِكَ بسبب طبيعة هذه الذاكرة . إنَّ سرعة القراءة من الـ EEPROM من مرِتبة سرعة القراءة من الـ RAM الاعتيادية و لكِن الذي يأخُذ وقتاً هو الحاجة لتخزين المعطيات بشكل مؤقت إلى أن تُكتَب مِن جديد . بعد أن تُنهي الـ PIC كتابة المعطيات في الموقِع المعتبر ، فإنَّ الخانة WT تعود آلياً لتأخُذ الوضع'0' والعَلَم EEIF يأخذ القيمة'1' .

إن الزمن الذي تستغرقه عمليّة الكتابة عادة ما يكون 10ms (أي 10 أجزاء من ألف من الثانية ) هذا لا يبدو كثيراً ، إلا أنه زمن طويل نسبياً في أبجدية المعالِجات الصِغَريّة .. إنَّ الـPIC التي تعمل على ساعة بسُرعة 4MHz قادرة على تنفيذ 10.000 تعليمة بنفس الزمن الذي تستغرقه عملية كتابة واحِدة . لاحِظ أنَّه ليس بإمكانِك كتابة بايت ( BYTE ) آخر في EEPROM حتى تنتهي الـ PIC من كتابة الكلمة الأخيرة ، و لنفرِض جدلاً أنَّك حاولت ذلك فأُؤكِد لك إنَّك لن تجني إلا الأخطاء ؛ و لمعرفة هل أنهى المعالِج دورة الكتابة أم لا .. لدينا طريقتين .. الأولى تتمثَّل بفحص الخانة WR هل هي '1' .. و الطريقة الثانية هي باستخدام المقاطَعات


المراجع:


http://en.wikipedia.org/wiki/EEPROM

http://searchsmb.techtarget.com/sDefinition/0,,sid44_gci213928,00.html

http://www.wisegeek.com/what-is-eeprom.htm