راه اندازی 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 جهت استفاده به صورت آسنکرون مقدار دهی و راه اندازی می گردد .
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”/]
دانلود سورس کد
در اینجا شما میتوانید سورس برنامه را دریافت ،کامپایل و پروگرم نمایید و شاهد عملکرد برنامه باشید.
با کلیک بر روی عکس زیر فیلم راه اندازی این پروژه را مشاهده کیند.
نظر بدهید