راه اندازی 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 میکروکنترلر راه اندازی می گردد.

static const Pin pins[] = {PINS_TWI};
 
PIO_Configure(pins, PIO_LISTSIZE(pins));
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("Basic TWI EEPROM ProjectnrNaminicGroup,MajidKhalilinr");

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

AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TWI;
TWI_ConfigureMaster(AT91C_BASE_TWI, TWCK, BOARD_MCK);
TWID_Initialize(&twid, AT91C_BASE_TWI);

 

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

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

// Erase page #0 and #1
memset(pData, 0, PAGE_SIZE);
printf("Filling page #0 with zeroes ...nr");
TWID_Write(&twid, AT24C_ADDRESS, 0x0000, 1, pData, PAGE_SIZE, 0);
 
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
 
 
 
// Writting operation
printf("Writting on page #0nr");

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

// Write checkerboard pattern in first page
for (i=0; i < PAGE_SIZE; i++)
{
    // Even
    if ((i & 1) == 0)
    {
        pData[i] = 0xAA;
    }
    // Odd
    else
    {
        pData[i] = 0xBB;
    }
}
TWID_Write(&twid, AT24C_ADDRESS, 0x0000, 1, pData, PAGE_SIZE, 0);
 
// Wait at least 10 ms
for (i=0; i < 1000000; i++);

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

// Read back data
memset(pData, 0, PAGE_SIZE);
TWID_Read(&twid, AT24C_ADDRESS, 0x0000, 1, pData, PAGE_SIZE, 0);
 
 
printf("Data Read From EEPROM : nr");
for (i=0; i < PAGE_SIZE; i++)
{
    printf("0x%X ",pData[i]);
    if ((i+1)%8 == 0)
       

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

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

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

Tags: , ,