اطلاعیه

Collapse
No announcement yet.

سوال در مورد eeprom مدل 24c512

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سوال در مورد eeprom مدل 24c512

    سلام.
    دوستان یه سوالی در مورد این حافظه داشتم
    توی اتصالش با avr مشکلی ندارم
    مشکلم نحوه ی آدرس دهی حافظس
    ممکنه یکم تو مفاهیم اولیه مشکل داشته باشم.
    توی دیتاشیت حافظه نوشته first word address و second word address
    منظور چیه؟ چرا برای آدرس دو تا 8 بیت میخواد؟

    #2
    پاسخ : سوال در مورد eeprom مدل 24c512

    خب. خودم جوابم رو پیدا کردم و الان سعی می کنم تا جایی که بتونم توضیح بدم برای دوستانی که مشکل دارند.
    حافظه ی 24c512 یک حافظه ی 512 کیلو بیتیه! یعنی 64 کیلو بایت، یعنی 64 هزار تا 8 بیت و هر بیت یه جایگاهه که توش یکی از دو مقدار 0 و 1 ذخیره میشه. مثلا عدد 10010011 یک عدد 8 بیتی یا یک بایتیه.
    نحوه ی آدرس دهی اینجوریه که از اولین بایت (یعنی اولین 8 بیت) شماره ی 1 و دومین بایت شماره ی دو تا .... آخرین بایت شماره 64000 داده میشه.
    برای ارتباط با آدرس حافظه ی مورد نظر ابتدا باید شماره ی پلاک بایت مورد نظر رو به eeprom فرستاد.
    فرض کنید میخوایم یک اطلاعات یک بایتی رو داخل خونه ی شماره ی 61000 ای ای پرام ذخیره کنیم. پس باید اول عدد 61000 رو به eeprom بفرستیم.
    در ضمن میدونیم که ارتباط با eeprom از طریق پروتوکل i2c هستش و این پروتکل در هر وعده ارسال فقط میتونه یک بایت رو ارسال کنه.
    مثلا برای ارسال عدد 61000 نمیتوان از یک بایت استفاده کرد. چراکه یک بایت، بیشترین مقداری که میتواند بگیرد عدد 11111111 که معادل 256 میباشد، یعنی با یک بایت ماکزیمم میتوان تا بایت شماره ی 256 رو آدرس دهی کرد.
    به همین دلیله که از دو بایت جهت آدرس دهی استفاده میشه. چرا که دو بایت معادل 16 بیت است و تا مقدار 65536 میتونه آدرس دهی کنه.
    پس ما برای آدرس دهی خانه ی شماره 61000 حافظه، باید عدد 61000 رو در مبنای دو، به دو قسمت 8 بیتی (یعنی دو بایت) تقسیم کنیم و هر 8 بیت رو پشت سر هم ارسال کنیم.
    عدد 61000 در مبنای دو 111011101001000 میشود. ما باید ابتدا 8 بیت اول رو ارسال کنیم، سپس 8 بیت دوم.
    اصطلاحا به هشت بیت اول بایت پر ارزش و به 8 بیت دوم بایت کم ارزش گفته میشود.
    خبر خوب اینکه نیازی نیست با 0 و 1 دست و پنجه نرم کنیم و زبان سی (و بیسیک) در این حد هوشمندی دارند!
    کافیه آدرس خونه ی مورد نظر حافظه رو در یک متغیر از نوع اینتیجر بریزیم (چون اینتیجر یک متغیر 16 بیتیه) ، بعد با دو تا دستور ساده، بایت پر ارزش و کم ارزش رو جدا کنیم.
    برای مثال:
    کد:
    unsigned int address=61000;
    
    unsigned char high_byte;
     unsigned char low_byte;
    
    low_byte=address&0xff;
    high_byte=address>>8;

    high_byte بایت پر ارزش و low_byte بایت کم ارزش هستند.
    حال کافیه که این دو بایت رو به ترتیب از طریق i2c بفرستیم برای eeprom.
    نکته: برای آدرس های کوچک هم باید از دو بایت جهت آدرس دهی استفاده کرد که با همان دستورات بالا انجام میشوند. مثلا عدد 13 در مبنای 2 معادل 1101 میباشد، بایت پر ارزش معادل 00000000 و بایت کم ارزش معادل 00001101 میباشند که با دو دستور low_byte=address&0xff و high_byte=address>>8 این دو بایت از هم مجزا میگردند.
    نمونه کد مورد استفاده ی خودم در کدویژن:
    (این برنامه کاراکتر ذخیره شده در متغیر c رو در آدرس ذخیره شده در متغیر address ذخیره میکنه)
    کد:
    unsigned char c;
    unsigned int address;
    
    unsigned char high_byte;
    unsigned char low_byte;
      
    low_byte=address&0xff;
    high_byte=address>>8;
      
    i2c_start();
    i2c_write(ADD);
    i2c_write(high_byte);
    i2c_write(low_byte);
    i2c_write(c);
    i2c_stop();
    delay_ms(10);

    ADD آدرس سخت افزاری خود آی سی 24C512 هستش که تحت پروتکل I2C صدا زده میشه و باید قبلا جزو متغیر ها (یا ثابت های) گلوبال در برنامه تعریف شده باشه.
    متغیر unsigned int address رو به مقدار دلخواه خود مقدار دهی کنید.
    امیدوارم به دردتون بخوره.

    دیدگاه


      #3
      پاسخ : سوال در مورد eeprom مدل 24c512

      عالی بود دستت درد نکنه .
      واقعا خستگی 3 - 4 روزه منو در آورد . مرسی مرسی مرسی !!!
      :wow: :wow: :applause: :applause: :nice: :nice:
      - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

      دیدگاه


        #4
        پاسخ : سوال در مورد eeprom مدل 24c512

        سلام
        توضیحات کامل و بی نقص بود . اگه راجب خوندن بایت ها هم توب همون پست اول میزاشتی یه آموزش کامل read/write میشد ... :job:
        بسیار عالی بود .مرسی

        من یک سوال دارم . فک کنم از مدلهای 24cxx مدل 2024 بیتی هم باشه . اگه کسی بیشتر از این مقدار لازم داشته باشه به غیر از اینکه مثلا دوتا از این نوع حافطه ها استفاده کنه چه تراشه دیگه ای هس که توس بازار هم باشه و استفاده کنه ؟ (به جز استفاده از mcc :redface

        دیدگاه


          #5
          پاسخ : سوال در مورد eeprom مدل 24c512

          AT45DB161 که 8 پین smd هست. آی سی Flash با پروتکل SPI. سیستم کاریش شبیه mmc هست.
          خودم باهاش کار نکردم ، اما فکر کنم چهار مگا بایت ظرفیت داره.

          دیدگاه

          لطفا صبر کنید...
          X