راه اندازی eeprom

هدف پروژه :

هدف از انجام این پروژه آموزش نحوه ذخیره و باز یابی اطلاعات بر روی EEPROM های خارجی می باشد ، از اینرو از EEPROM شرکت اتمل که از پروتوکل TWI پشتیبانی می کند استفاده شده است .

شرح پروژه :

در این برنامه ابتدا یک Page از حافظه EEPROM مقدار دهی می شود ، به این ترتیب که در ادرس های زوج مقدار AA و در آدرس های فرد مقدار BB ذخیره می شود ، سپس مقادیر خوانده شده برای کاربر نمایش داده می شود .

در تمام طول پروژه تمامی فرایند های در حال انجام از طریق پورت دیباگ میکرو قابل رویت می باشد .

(Settings: 115200 bauds, 8 bits, 1 stop bit, no parity, no flow control)

سخت افزار مورد استفاده :

برای انجام این پروژه از برد آموزشی ARM   همین شرکت استفاده شده است ، همچنین بر روی برد یک عدد IC حافظه EEPROM شرکت اتمل ، به شماره AT24C512 مونتاژ گردیده است که مقدایر بر روی این IC نوشته و خوانده خواهند شد .

EEPROM:

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

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

AT24C512:

این IC از نوع EEPROM می باشد که توسط شرکت اتمل ارایه شده است ، پروتوکل برقراری ارتباط آن TWI می باشد و  حافظه آن 512 کیلو بایت معادل 65536 خانه یک بایتی ( 65536X8 ) می باشد . اندازه هر Page  ان 128 بایت می باشد و با تغذیه مناسب تا MHz نیز قابلیت برقراری ارتباط را دارا می باشد . برای توضیحات بیشتر می توانید به دیتا شیت این محصول مراجعه نمایید .

ساختار برنامه :

در این پروژه از ساختار های استاندار ارایه شده از سوی شرکت اتمل استفاده شده است به نحوی که فایل اصلی پروژه در آدرس ProjectProject-keilprojectuv2  موجود می باشد ، همچنین تمامی فایل های کتابخانه ای مربوطه در آدرس Projectat91lib قابل دسترس می باشند .

کتابخانه های استفاده شده :

علاوه بر کتابخانه های معمول استفاده شده در تمامی پروژه جهت راه اندازی هسته ارم و مقداردهی IO ها از کتابخانه های زیر استفاده گردیده است :

TWI و TWID: ازن دو فایل کتابخانه ای جهت راه اندازی واحد TWI در داخل میکرو و همچنین استفاده از توابع نوشتن و خواندن با استفاده از این پروتوکل می باشند .

همانطور که میدانید  برای برقراری ارتباط با IO ها به دو روش سنکرون و آسنکرون می توان اقدام نمود که در این فایل های کتابخانه ای هر برای هر دو روش توابع مناسبی پیاده گردیده است . ( در این پروژه تنها از روش آسنکرون و یا Pooling  استفاده گردیده است)

تشریح کد :

در این قسمت پین های ورودی و خروجی مربوط به واحد TWI راه اندازی می شوند و واحد Debug میکروکنترلر راه اندازی می گردد.

[pastacode lang=”cpp” manual=”static%20const%20Pin%20pins%5B%5D%20%3D%20%7BPINS_TWI%7D%3B%0A%20%0APIO_Configure(pins%2C%20PIO_LISTSIZE(pins))%3B%0ATRACE_CONFIGURE(DBGU_STANDARD%2C%20115200%2C%20BOARD_MCK)%3B%0Aprintf(%22Basic%20TWI%20EEPROM%20ProjectnrNaminicGroup%2CMajidKhalilinr%22)%3B” message=”” highlight=”” provider=”manual”/]

در این قسمت واحد TWI جهت استفاده به صورت آسنکرون مقدار دهی و راه اندازی می گردد .

[pastacode lang=”cpp” manual=”AT91C_BASE_PMC-%3EPMC_PCER%20%3D%201%20%3C%3C%20AT91C_ID_TWI%3B%0ATWI_ConfigureMaster(AT91C_BASE_TWI%2C%20TWCK%2C%20BOARD_MCK)%3B%0ATWID_Initialize(%26twid%2C%20AT91C_BASE_TWI)%3B” message=”” highlight=”” provider=”manual”/]

 

pData به اندازه PageSize و با مقدار صفر ، مقدار دهی می شود و سپس بر روی بافر داده بر روی حافظه نوشته می شود ، بنابر این در ادرس 0x0000 به اندازه یک Page عدد صفر بر روی حافظه نوشته شده است ، تا هنگام نوشتن و خواندن های بعدی ، در صورت بروز مشکل راحت تر عیب یابی صورت گیرد .

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

[pastacode lang=”cpp” manual=”%2F%2F%20Erase%20page%20%230%20and%20%231%0Amemset(pData%2C%200%2C%20PAGE_SIZE)%3B%0Aprintf(%22Filling%20page%20%230%20with%20zeroes%20…nr%22)%3B%0ATWID_Write(%26twid%2C%20AT24C_ADDRESS%2C%200×0000%2C%201%2C%20pData%2C%20PAGE_SIZE%2C%200)%3B%0A%20%0A%2F%2F%20Wait%20at%20least%2010%20ms%0Afor%20(i%3D0%3B%20i%20%3C%201000000%3B%20i%2B%2B)%3B%0A%20%0A%20%0A%20%0A%2F%2F%20Writting%20operation%0Aprintf(%22Writting%20on%20page%20%230nr%22)%3B” message=”” highlight=”” provider=”manual”/]

بافر اطلاعات pData در ایندکس های زوج با مقدار AA و در ایندکس های فرد با BB مقدار دهی می شود و سپس بافر داده بر روی حافظه نوشته می شود .

[pastacode lang=”cpp” manual=”%2F%2F%20Write%20checkerboard%20pattern%20in%20first%20page%0Afor%20(i%3D0%3B%20i%20%3C%20PAGE_SIZE%3B%20i%2B%2B)%0A%7B%0A%20%20%20%20%2F%2F%20Even%0A%20%20%20%20if%20((i%20%26%201)%20%3D%3D%200)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20pData%5Bi%5D%20%3D%200xAA%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20Odd%0A%20%20%20%20else%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20pData%5Bi%5D%20%3D%200xBB%3B%0A%20%20%20%20%7D%0A%7D%0ATWID_Write(%26twid%2C%20AT24C_ADDRESS%2C%200×0000%2C%201%2C%20pData%2C%20PAGE_SIZE%2C%200)%3B%0A%20%0A%2F%2F%20Wait%20at%20least%2010%20ms%0Afor%20(i%3D0%3B%20i%20%3C%201000000%3B%20i%2B%2B)%3B” message=”” highlight=”” provider=”manual”/]

اطلاعات موجود در Page  اول از حافظه به ادرس 0x0000 خوانده می شود و بر روی پورت دیباگ ارسال می نماید .

[pastacode lang=”cpp” manual=”%2F%2F%20Read%20back%20data%0Amemset(pData%2C%200%2C%20PAGE_SIZE)%3B%0ATWID_Read(%26twid%2C%20AT24C_ADDRESS%2C%200×0000%2C%201%2C%20pData%2C%20PAGE_SIZE%2C%200)%3B%0A%20%0A%20%0Aprintf(%22Data%20Read%20From%20EEPROM%20%3A%20nr%22)%3B%0Afor%20(i%3D0%3B%20i%20%3C%20PAGE_SIZE%3B%20i%2B%2B)%0A%7B%0A%20%20%20%20printf(%220x%25X%20%22%2CpData%5Bi%5D)%3B%0A%20%20%20%20if%20((i%2B1)%258%20%3D%3D%200)%0A%20%20%20%20%20%20%20″ message=”” highlight=”” provider=”manual”/]

دانلود سورس کد

در  اینجا شما میتوانید سورس برنامه را دریافت ،کامپایل و پروگرم نمایید و شاهد عملکرد برنامه باشید.

با کلیک بر روی عکس زیر فیلم راه اندازی این پروژه را مشاهده کیند.

مقالات

نظر بدهید

مطلب قبلی
راه اندازی پورت سریال با استفاده از Handshaking
مطلب بعدی
دماسنج دیجیتال با GLCD