نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
آزادی حجاز از دست نااهلان
مهدی دمیرچیلو

آموزش کار با آیسی های حافظه سری at24cxx

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

آموزش کار با آیسی های حافظه سری at24cxx


توجه : کل عکس های این مطلب کوچیک شده اند ( علتش هم معلومه ! ) لذا برا دیدن در اندازه اصلی و با کیفیت، روی عکس ها کلیک کنید.
 

آیسی های EEPROM شرکت ATMEL

آیسی های EEPROM شرکت ATMEL

این شرکت در ۳ مدل حافظه EEPROM تولید کرده که در زیر مشاهده میکنید :

  1. Serial EEPROM
  2. Parallel EEPROM
  3. OTP EPROM

که ما با سری Serial EEPROM کار میکنیم، همین مدل هم خودش مدل های مختلفی داره که در زیر مشاهده میکنید :

  1. ( ۲Wire ( I2C
  2. SPI
  3. ۱Wire
  4. ۳Wire
  5. ( Automotive Serial EEPROMs ( I2C + SPI

که ما با مدل I2C ییش کار میکنیم، این هم خودش در سری های مختلفی ساخته شده ^_^ که در زیر میبینید :

AT24C
AT24CM
AT24CS
AT24CSW
AT24HC
AT24MAC
که ما با سری AT24C کار میکنیم، این سری در اندازه ۱ کیلو بیت تا ۱۰۲۴ کیلو بیت موجود هستش، نامشون به صورت زیر هستش :
AT24C01
AT24C02
AT24C04
AT24C08
AT24C16
AT24C32
AT24C64
AT24C128
AT24C256
AT24C512
AT24C1024
هر کدوم از آیسی های فوق هم در نسخه های مختلفی ساخته شده، که خود اتمل پیشنهاد کرده از جدید ترین نسخه آیسی ها استفاده کنیم ( تو اکثر دیتاشیت های این سری از آیسی های ایپرام ) برا طراحی های جدید، این آیسی ها با پسوند های زیر موجود هستند، حالا مثلا مدل ۵۱۲ فقط حالت "بدون پسوند / B / C" رو داره ولی ممکنه که آی سی های دیگه مدل های دیگه ای یا بیشتری داشته باشن، مثلا یه آیسی مدل D رو داره و یکی نداره، بگذریم، لیست پسوند ها به صورت زیر هستش:
بدون پسوند
A
B
C
D
E
که ما با آیسی بدون پسوند کار میکنیم، البته دیتاشیت اینا رو ببنید ( بدون پسوند/A/B/C/D/E ) تفاوت آنچنانی با هم ندارن و اگه کتابخونه ای برا پسوند X1 نوشته شده باشد برا پسوند X2 هم قابل استفاده هستش؛ من فقط مدل AT24C512 رو دارم و تموم پروژه هایی که تا حالا بستم هم از همین استفاده کردم ^_^، مطلب زیر هم بر مبنای دیتاشیت آیسی های "بدون پسوند" هستش ولی بازم میگم، دیتاشیت تمام اینا رو بررسی کنید، فقط در سری موارد جزئی با هم فرق دارن، لذا اگه بگم مطلب زیر ترجمه دیتاشیت تمام "پسوند ها" هستش اشتباه نگفتم؛ بگذریم زیاد حاشیه نریم ( البته غیر از مدل "بدون پسوند" بقیه مدل ها فک نکنم تو ایران باشه، باید بگردید، شاید باشه ولی من ندیدم )
دانلود دیتاشیت آیسی های ایپرام سری Serial EEPROM - I2C

دانلود دیتاشیت آیسی های ایپرام سری Serial EEPROM - I2C

دانلود دیتاشیت
AT24C01A
AT24C02
AT24C04
AT24C08
AT24C16 
دانلود دیتاشیت
AT24C01A
AT24C02
AT24C04
AT24C08A
AT24C16A
دانلود دیتاشیت
AT24C01B
AT24C02B
AT24C04B
AT24C08B
دانلود دیتاشیت
AT24C01C - AT24C02C
دانلود دیتاشیت
AT24C01D - AT24C02D
دانلود دیتاشیت
AT24C02A - AT24C04A
دانلود دیتاشیت
AT24C04C - AT24C08C
دانلود دیتاشیت
AT24C128 - AT24C256
دانلود دیتاشیت
AT24C32 - AT24C64
دانلود دیتاشیت
AT24C32A - AT24C64A
دانلود دیتاشیت
AT24C32C - AT24C64C
دانلود دیتاشیت
AT24CS01 - AT24CS02
دانلود دیتاشیت
AT24CS04 - AT24CS08
دانلود دیتاشیت
AT24CSW01 - AT24CSW02
دانلود دیتاشیت
AT24CSW04 - AT24CSW08
دانلود دیتاشیت
AT24MAC402 - AT24MAC602
دانلود دیتاشیت AT24C04D دانلود دیتاشیت AT24C08D
دانلود دیتاشیت AT24C1024 دانلود دیتاشیت AT24C1024B دانلود دیتاشیت AT24C128B
دانلود دیتاشیت AT24C128C دانلود دیتاشیت AT24C16B دانلود دیتاشیت AT24C16C
دانلود دیتاشیت AT24C16D دانلود دیتاشیت AT24C256B دانلود دیتاشیت AT24C256C
دانلود دیتاشیت AT24C32D دانلود دیتاشیت AT24C512 دانلود دیتاشیت AT24C512B
دانلود دیتاشیت AT24C512C دانلود دیتاشیت AT24C64B دانلود دیتاشیت AT24C64D
دانلود دیتاشیت AT24CM01 دانلود دیتاشیت AT24CM02 دانلود دیتاشیت AT24CS16
دانلود دیتاشیت AT24CS32 دانلود دیتاشیت AT24CS64 دانلود دیتاشیت AT24HC02C
دانلود دیتاشیت AT24HC04B دانلود دیتاشیت AT24CXX پایان ^_^
توضیحات آیسی AT24C512

توضیحات آیسی AT24C512

این آیسی ها بهینه سازی شدن برا کارهای تجاری و صنعنی با وجود مد های low power و low voltage.
مقایسه امکانات بین تمام آیسی های سری AT24Cxx
مقایسه آیسی های حافظه eeprom
 
ترتیب پایه های آیسی های سری AT24Cxx
ترتیب پایه های آیسی های سری AT24Cxx

توضیح پایه های آیسی AT24C512

توضیح پایه های آیسی AT24C512

پایه های GND و VCC : به GND و ۵+ میکرو وصل شود.
پایه کلاک ( SCL ) و پایه دیتا ( SDA ) :  این دو تا پایه مربوطن به مبحث I2C و ربطی به این مطلب ندارن آنچنان، دیتا به کمک این دو پایه منتقل میشه. ( البته زمین دو مدار ( که اینجا میکروکنترلر و حافظه ایپرام خارجی هستش ) باید مشتک باشه، یعنی باید به هم وصل باشه )
پایه های آدرس آی سی ایپرام (A0, A1, A2) : این پایه ها برا تعیین آدرس آی سی حافظه بکار میرن، و تو کد نویسی و راه اندازی آیسی و I2C مورد استفاده قرار میگیرن، برا اطلاعات بیشتر درباره نحوه کار I2C تحقیق کنید، این پایه ها بسته به نوع آیسی تعدادشون متفاوت هستش ولی حداکثر ۳ تا A داریم و حداقل ۰ تا.
پایه محافظت از آی سی ایپرام دربرابر نوشتن و تغییرات (WP) : این پایه همون طور که از اسمش معلومه، با وصل کردنش به VCC دیگه نمیشه اطلاعاتش رو تغییر داد، در غیر این صورت باید به GND وصلش کنیم.
توجه : بهتره پایه های A و WP رو معلق رها نکنیم و با یه خازن کوپلینگ به GND وصل کنیم؛ هر چند که این پایه ها از درون پول آپشون فعال میشه اگه رها بشن ولی باز بهتره کاری که گفته شد رو انجام بدید.

عملیات آیسی AT24C512

عملیات آیسی AT24C512

وضعیت های Start و Stop  و ACKNOWLEDGE که بیشتر مربوط به i2c که میتونید تو نت دربارش مطالعه کنید.
مد STANDBY : به محض فعال شدن برق این آیسی و دریافت وضعیت Stop، به مد استندبای میره این آی سی ( یه مد کاهش مصرف هستش ).
توجه : بعد از هر عملیات خوندن یا نوشتن، وضعیت Stop ارسال میشه.

MEMORY RESET : After an interruption in protocol, power loss or system reset, any two-wire part can be reset by following these steps :
(a) Clock up to 9 cycles, (b) look for SDA high in each cycle while SCL is high and then
(c) create a start condition as SDA is high.

 

انتخاب آیسی EEPROM و شروع تبادل داده

در این قسمت میبینیم که چطور آیسی مد نظرمون رو انتخاب میکنیم و شروع به تبادل داده باهاش میکنیم و …

آدرس دهی آی سی AT24Cxx

آدرس دهی آی سی AT24Cxx

آدرس دهی آیسی AT24C512
بعد از ارسال وضعیت Start، این بسته ارسال میشه و ۲-۳ تا دیتای مهم رو در خودش داره :

  1. بیت ۰ ( LSB یا کم ارزش ترین بیت ) : تعیین نوشتن ( ۰ ) یا خوندن ( ۱ )
  2. در عکس بالا بعضا P0 یا P0-P1 یا P0-P1-P2 میبینید که اینا بیت کمکی هستن برا بحث آدرس بایتی که میخوایم مقدارشو تغیییر بدیم. ( حالا میدونم متوجه نشدید ولی اینو داشته باشید، در عنوان بعدی قشنگ توضیح میدم )
  3. یه سری بیت A که در بعضی فقط A0 در بعضی A0-A1 در بعضی A0-A1-A2 و در بعضی اصلا A وجود ندارد؛ خب حالا این A ها کارشون چیه؟ اینا برا بحث تعیین آدرس آیسی هستن، همون طور که میدونید تو پروتکول I2C هر آیسی یه آدرسی داره، تو اینجا هم همینطوره، مثلا :
    اگه فقط یه A داشتیم، یعنی همزمان حداکثر ۲ تا از این آیسی ها رو میتونیم به اون باس I2C وصل کنیم.
    اگه فقط دو تا A داشتیم، یعنی همزمان حداکثر ۴ تا ...
    اگه سه تا A داشتیم، یعنی همزمان حداکثر ۸ تا ...
    اگه هم A یی نداشتیم، یعنی همزمان حداثر ۱ تا ...

 
توجه : این A هایی که میبینید، پایه های آیسی ما هستن؛ که میتونیم همشون رو به GND وصلشون کنیم یا همشون رو به VCC وصل کنیم یا هر ترکیب دیگه ای، این کار ما، آدرس اون آیسی رو تغییر میده، لذا تو برنامه نویسی هم باید مقدار صحیح رو قرار بدیم و استفاده کنیم، مثلا اگه دو تا A داشتیم به نام های A0 و A1، مثلا A0 رو به GND و A1 رو به VCC وصل کردیم، حالا آدرس آیسی فوق میشه ۲، که باید در فرمت دیتایی که در بالا مشاهده میکنید، ازش استفاده کنیم.
 
اگه آدرس رو صحیح فرستاده باشیم، آیسی مقدار ۰ برمیگردونه و در غیر این صورت میره به مد standby
 
محافظت از دیتا : تمام آیسی های فوق، دارای پایه محافطت از دیتا هستن، به نام WP، که با ۱ کردن این پایه ( وصل کردن به VCC ) امکان هر گدونه نوشتن در این آیسی ممنوع میشه ولی میتونیم ازش دیتا بخونیم، اگه بخوایم دیتا بنویسیم در این آیسی، باید پایه WP رو به GND وصل کنیم ( ۰ اش کنیم ).

 

عملیات نوشتن آی سی AT24Cxx

تغییر مقدار یک بایت در آی سی AT24Cxx

تغییر مقدار یک بایت در آی سی AT24Cxx

رو عکس زیر کلیک کنید و در کیفیت بالاتری ببینید :
عملیات نوشتن آی سی AT24Cxx
همون طور که در شکل بالا میبنید، فرمت دیتای ارسالی رو به صورت کامل و خوشگل! نشون داده، یکمکی در زیر توضیح میدم :

  1. وضعیت Start ارسال میشه.
  2. آدرس IC ( همون مقدار پایه های A0-A1 و... که بسته به نوع آیسی تعداد این پایه های A متفاوت هستش ) + بیت تعیین خودن/نوشتن + چند تا بیت دیگه که از قبل مقدار ثابتی داشتن ( در کل تمام این ۳ مورد میشه ۸ بیت یا ۱ بایت ) ارسال میشه، بعد آیسی حافظه یه بیت با مقدار ۰ به نام ACK یا همون تصدیق نامه برامون ارسال میکنه ( یعنی داداش من اون بایتی که فرستادی رو گرفتم، کلا گیرنده برا هر بایتی که میگیره یه ACK میفرسته )
  3. شماره بایتی که میخوایم مقدارشو تغییر بدیم رو ارسال میکنیم ( حالا سر این قسمت ما داستان داریم و در ادامه کامل توضیحش میدم ) و بعد آیسی یه ACK ارسال میکنه برامون. ( به این دیتا میگن، Word Address )
  4. بعد دیتا رو ارسال میکنیم و یه ACK میگیرم.
  5. وضعیت Stop ارسال میشه.

 
حالا این بحث آدرس بایتی که میخوایم بخونیم رو در زیر یکم توضیح بدم، این مورد تنها فرق بین تمام آیسی های سری AT24Cxx هستش ( تو فرمت دیتای ارسالی ) که اگه شکل بالا رو قشنگ نگاه کنید میبینید که فرقشون فقط در همین قسمته، در زیر به ترتیب نام آیسی از نظر مقدار حافظه توضیح میدم :
توجه : وقتی در زیر میگم این آیسی x تا بایت داره، حواستون باشه که شمارش از ۰ شروع میشه - لذا شماره گزاری بایت ها از ۰ تا x-1 هستش.
AT24C01 : این آیسی ۱۲۸ بایت داره، لذا برا بحث تعیین شماره بایت مد نظر ( Word Address ) نیاز به ۷ بیت داریم، لذا بیت ۸ ام بدون استفاده خواهد بود ( که این مورد در شکل موجود در عنوان "آدرس دهی آی سی AT24Cxx" قابل مشاهده هستش )؛ لذا برای این آیسی یک بایت Word Address ارسال میشود.
AT24C02 : این آیسی ۲۵۶ تا بایت داره، که برا Word Address این آیسی نیاز به ۱ بایت کامل داریم.
توجه : از این جا به بعد، چون ۱ بایت Word Address تکمیل شده، لذا مجبوریم از بیت های Device Address استفاده کنیم.
AT24C04 : این آیسی ۵۱۲ تا بایت داره، که برا Word Address این آیسی نیاز به "۱ بایت + ۱ بیت" داریم؛ که اون ۱ بایت در Word Address قرار میگیره و این ۱ بیت در موقعیت دوم Device Address قرار میگیرد ( به شکل موجود در عنوان "آدرس دهی آی سی AT24Cxx" مراجعه کنید )
AT24C08 : این آیسی ۱۰۲۴ تا بایت داره، که برا Word Address این آیسی نیاز به "۱ بایت + ۲ بیت" داریم؛ که اون ۱ بایت در Word Address قرار میگیره و این ۲ بیت در موقعیت دوم و سوم Device Address قرار میگیرد.
AT24C16 : این آیسی ۲۰۴۸ تا بایت داره، که برا Word Address این آیسی نیاز به "۱ بایت + ۳ بیت" داریم؛ که اون ۱ بایت در Word Address قرار میگیره و این ۳ بیت در موقعیت دوم و سوم و چهارم Device Address قرار میگیرد.
توجه : تا اینجا برا جلوگیری از ارسال بایت اضافه برا بحث Word Address میومدیم و بیت هایی که اضافه میومد رو به Device Address اضافه میکردیم ولی از این جا به بعد ( برا آیسی هایی که در زیر میاد ) این کار دیگه امکان پذیر نیست و باید ۱ بایت جدید Word Address ایجاد کنیم لذا تعداد Word Address ها میشه ۲ بایت.
AT24C32 : این آیسی ۴۰۹۶ تا بایت داره، که برا Word Address این آیسی نیاز به "۱۲ بیت" داریم؛ لذا بلاجبار دو بایت Word Address ارسال میکنیم که در این حالت مقدار ۴ تا بیت آخر بسته اول ( بایت اول ) Word Address مهم نیست.
AT24C64 : این آیسی ۸۱۹۲ تا بایت داره، که برا Word Address این آیسی نیاز به "۱۳ بیت" داریم؛ لذا بلاجبار دو بایت Word Address ارسال میکنیم که در این حالت مقدار ۳ تا بیت آخر بسته اول ( بایت اول ) Word Addresss مهم نیست.
AT24C128 : این آیسی ۱۶۳۸۴ تا بایت داره، که برا Word Address این آیسی نیاز به "۱۴ بیت" داریم؛ لذا بلاجبار دو بایت Word Address ارسال میکنیم که در این حالت مقدار ۲ تا بیت آخر بسته اول ( بایت اول ) Word Addresss مهم نیست.
AT24C256 : این آیسی ۳۲۷۶۸ تا بایت داره، که برا Word Address این آیسی نیاز به "۱۵ بیت" داریم؛ لذا بلاجبار دو بایت Word Address ارسال میکنیم که در این حالت مقدار ۱ بیت آخر بسته اول ( بایت اول ) Word Addresss مهم نیست.
AT24C512 : این آیسی ۶۵۵۳۶ تا بایت داره، که برا Word Address این آیسی نیاز به "۱۶ بیت" داریم؛ لذا دو بایت Word Address ارسال میکنیم. ( از تمامی بیت های Word Address استفاده شده و از بیت های Device Address هیچ استفاده ای نشده است )
توجه : از این جا به بعد، چون ۲ بایت Word Address تکمیل شده، لذا مجبوریم از بیت های Device Address استفاده کنیم.
AT24C512 : این آیسی ۱۳۱۰۷۲ تا بایت داره، که برا Word Address این آیسی نیاز به "۱۷ بیت" داریم؛ که اون ۲ بایت در ۲ بسته Word Address قرار میگیره و اون ۱ بیت هم در موقعیت دوم Device Address قرار میگیرد.
 
توجه : تمامی این مواردی که گفتم با مشاهده عکس های موجود در عنوان "آدرس دهی آی سی AT24Cxx" و "عملیات نوشتن آی سی AT24Cxx" قابل مشاهده است.

تغییر مقدار یک صفحه در آی سی AT24Cxx

تغییر مقدار یک صفحه در آی سی AT24Cxx

تغییر مقدار یک صفحه در آی سی AT24Cxx
خب نحوه نوشتن به صورت صفحه ای همانند نوشتن یه تک بایت دیتا هستش، فقط یه فرق کوچیک داره که در زیر صحبت میکینم دربارش :
توجه : اندازه صفحه در این ۱۱ تا آیسی با هم فرق داره و در همه یکسان نیست، لذا حاکثر تعداد بیتی که در یکبار میشه مقدارش رو تغییر داد در آیسی های مختلف، متفاومت هستش؛ حالا از تعداد صفحات بگذریم، اندازه هر صفحه هم در این آیسی ها با هم فرق داره، مثلا یه صفحه ممکنه در یه آیسی ۱۰ بایت باشه و در آیسی دیگه ۳۰ بایت ( مثلا )؛ برا دیدن جزئیات دقیق، به عکس مقایسه این آیسی ها که در اول مطلب قرار دادم، مراجعه کنید. ( این نکات رو باید در هنگام نوشتن کتابخونه برای این ۱۰-۱۱ تا آی سی در نظر بگیرید حتما )
خب بعد از ارسال وضعیت Start و بعد Device Address و بعد Word Address، دیتا هامون رو ۱-بایت ۱-بایت ارسال میکنیم و هر موقع خواستیم وضعیت Stop رو ارسال میکنیم؛ در همین حین که داریم دیتا ها رو ارسال میکنیم، لازم نیست، هر بار Word Address ارسال کنیم، همون Word Address یی که اول ارسال میکنیم کافیه، بعد از اون، آیسی این آدرس رو به صورت خوکار مقدارش رو زیاد میکنه.
توجه : در زیر میبینید اندازه هر صفحه رو، اگه به جدول مقایسه اول مطلب توجه کرده باشید، میبینید که این آیسی ها یه عمری دارن، یه محدودیت تعداد نوشتن دارن، بعد از اون آیسی خراب میشه، که نوشتن یه تک بایت = نوشتن یه صفحه کامل هستش یعنی هر دو یه بار حساب میشه، لذا اگه اطلاعاتمون رو به صورت صفحه ای بنویسم، طول عمر آیسی ما هم بیشتر خواهد بود به طبع، لذا در مواقعی که طول دادمون زیاده بهتره که از این روش نوشتن استفاده کنیم.
AT24C01 : میزان حافظه = ۱۲۸byte، تعداد صفحات = ۱۶، اندازه هر صفحه = ۸byte
AT24C02 : میزان حافظه = ۲۵۶byte، تعداد صفحات = ۳۲، اندازه هر صفحه = ۸byte
AT24C04 : میزان حافظه = ۵۱۲byte، تعداد صفحات = ۳۲، اندازه هر صفحه = ۱۶byte
AT24C08 : میزان حافظه = ۱Kbyte، تعداد صفحات = ۶۴، اندازه هر صفحه = ۱۶byte
AT24C16 : میزان حافظه = ۲Kbyte، تعداد صفحات = ۱۲۸، اندازه هر صفحه = ۱۶byte
AT24C32 : میزان حافظه = ۴Kbyte، تعداد صفحات = ۱۲۸، اندازه هر صفحه = ۳۲byte
AT24C64 : میزان حافظه = ۸Kbyte، تعداد صفحات = ۲۵۶، اندازه هر صفحه = ۳۲byte
AT24C128 : میزان حافظه = ۱۶Kbyte، تعداد صفحات = ۲۵۶، اندازه هر صفحه = ۶۴byte
AT24C256 : میزان حافظه = ۳۲Kbyte، تعداد صفحات = ۵۱۲، اندازه هر صفحه = ۶۴byte
AT24C512 : میزان حافظه = ۶۴Kbyte، تعداد صفحات = ۵۱۲، اندازه هر صفحه = ۱۲۸byte
AT24C1024 : میزان حافظه = ۱۲۸Kbyte، تعداد صفحات = ۵۱۲، اندازه هر صفحه = ۲۵۶byte
توجه مهم ۱ : امکان نوشن مقداری از صفحه وجود داره، یا این که یه صفحه رو ناقص بنویسیم. ( مثلا یه صفحه ۱۲۸ بایت هستش، ما ۵۰ بایتشو تغییر بدیم فقط )
توجه مهم ۲ : اگه مثلا از وسط یه صفحه شروع کنیم به نوشتن و به اندازه کل صفحه بخوایم بنویسیم، مثلا هر صفحه ۱۰۰ بایت هستش، حالا اگه از بایت ۵۰ ام شروع کنیم به نوشتن، و ۱۰۰ بایت بنویسیم، ۵۰ بایت در خونه های ۵۱ تا ۱۰۰ نوشته میشه ولی بقیه دیتا ها در خونه های ۰ تا ۵۰ نوشته میشه، یعنی در دیتا های قبلی بازنویسی میشه و مقدار دیتا های قبلی از بین میره، یعنی اون جایی که ما میخوایم نوشته نمیشه و میزنه دیتا های دیگه رو خراب میکنه، لذا حتما حواستون به اندازه هر صفحه و مکان شروع و میزان نوشتنتون باشه تا از این دست مشکلات رخ نده ( که این نکات رو در هنگام نوشتن کتابخونه باید مد نظر داشته باشید )
 

ACKNOWLEDGE POLLING :
Once the internally-timed write cycle has started and the EEPROM inputs are disabled, acknowledge polling can be initiated.
This involves sending a start condition followed by the device address word.
The Read/Write bit is representative of the operation desired.
Only if the internal write cycle has completed will the EEPROM respond with a “۰”, allowing the read or write sequence to continue.

 

عملیات خوندن آیسی AT24C512

خوندن یه بایت، شبیه نوشتن یه بایت هستش، با این تفاوت که اون بیت Read/Write که اون بیت ۰ ام بسته Device Address مقدارش رو از ۰ ( Write ) به ۱ ( Read ) تغییر میدیم؛ ۳ روش برای خوندن اطلاعات وجود دارد : خوندن مقدار آدرس فعلی، آدرس اتفاقی ( رندم )، خوندن زنجیره ای؛ در زیر به ترتیب بهشون میپردازم به صورت کامل :

خواندن مقدار آدرس فعلی در آی سی AT24Cxx

خواندن مقدار آدرس فعلی در آی سی AT24Cxx

خواندن مقدار آدرس فعلی در آی سی AT24Cxx
شمارنده داخلی word address ( این شمارنده در داخل آیسی حافظه قرار داره و منظور موقعیت بایت هستش که شمارنده تو کدوم موقعیت هستش )، آخرین مقدار خودش رو حفظ میکنه ( که طی عملیات خوندن یا نوشتن مقدارش تغییر میکنه )، این آدرس تا زمانی صحیح هستش که برق آیسی قطع نشه ( که در صورت قطع شدن برق، احتمالا مقدارش ۰ میشه ولی دیتاشیت حرفی نزده در این باره و این حدس من هستش )؛ وقتی آدرس به پایان صفحه آخر رسید، به صورت خودکار به بایت اول صفحه اول میره. ( به عبارتی بعد از سرریز، مقدارش به صورت خودکار ریست میشه ).
توجه : بعد از این که میکرو، ۱-بایت داده رو دریافت کرد، ACK ارسال نمیکنه!، همان طور که در شکل بالا مشاهده میکنید.
بعد از ارسال وضعیت Start، دیتای Device Address که بیت ۰امش رو ۱ کردیم رو ارسال میکنیم، بعد آیسی ایپرام یه بیت تصدیق نامه میفرسته و بعد ۱-بایت دیتا میفرسته و بعد وضعیت Stop رو ارسال میکنیم؛ وسلاااااااااااااااام ^_^
یه مشکل بزرگ : خب حالا اینجا دیتاشیت میگه هر جا شمارنده آدرس بود، منم همونجا رو میخونم و برات میفرستم، در حالی که این به درد ما نمیخوره، مثلا ما تو خونه ۱۰ یه کاراکتری نوشتیم حالا شمارنده تو خونه ۱۰۰ هستش و تعداد کل بایت ها ( خونه ها ) هم مثلا ۱۰۰۰ تا هستش، یعنی ما باید وایسیم تا خونه های ۱۰۰ تا ۱۰۰۰ خونه بشه و بعد دوباره خونه های ۰ تا ۹ تا بعد به خونه مد نظر ما برسه؟ آیا ما همچین صبری داریم؟ خب معلومه که ندارم ^_^، برا این کار میایم از روش خوندن بعدی استفاده میکنیم ( روشی که در ادامه میگم )

خواندن تصادفی آی سی AT24Cxx

خواندن تصادفی آی سی AT24Cxx

توجه : علت این که این عنوانو نوشتم، اینه که دیتاشیت همینو نوشته بود، درحالی که به نظرم این عنوان اشتباه هستش چون در این قسمت ما یاد میگیرم که چطور بایت مد نظرمون رو بخونیم و نه مثل عنوان قبل آخرین بایت!؛ لذا تو این قسمت یه خواندن آگاهانه داریم و نه تصادفی، بگذریم، گفتم اینو بگم همین اول تا بعد در ادامه مطلب گیج نزنید.
روی عکس زیر کلیک کنید و در اندازه اصلی ببنیدش :
خواندن تصادفی آی سی AT24Cxx
روال کار این روش به این صورته که : آدرس خونه ( بایت ) مد نظر رو تعیین میکنیم ( Word Address ) و مثل بحث نوشتن که اول Word Address رو ارسال میکردیم، تو اینجا هم میایم همین کارو میکنیم ولی دیگه دیتایی ارسال نمیکنیم، یعنی وضعیت start و بعد Device Address و بعد Word Address رو ارسال میکنیم ولی دیگه دیتایی ارسال نمیکنیم، خب با این کار ما آدرس حافظه رو تغییر دادیم ( به این دیتای ناقصی که فرستادیم تو دیتاشیت عبارت Dunmy Write رو براش بکار برده ) و بعد از این میریم سراغ خوندن اطلاعاتمون ^_^، که خوندن اطلاعات رو هم که در عنوان قبل توضیح دادم، Sart رو ارسال میکنیم، Device Address رو ارسال میکنیم و بعد آیسی حافظه EEPROM دیتا اون خونه رو برا ما میفرسته و ما میخونیم ( و ack هم ارسال نمیکنیم ) و بعد Stop رو ارسال میکنیم؛ به همین راحتی و به همین خوشمزگی ^_^

خواندن زنجیره ای آی سی AT24Cxx

خواندن زنجیره ای آی سی AT24Cxx

روی عکس زیر کلیک کنید و در اندازه اصلی ببینیدش :
خواندن زنجیره ای آی سی AT24Cxx
توجه : اگه توجه کنید، این روش همون ارتقا یافته روش "خواندن مقدار آدرس فعلی" هستش؛ که تو اون روش هم وقتی دیتا رو خوندیم، ACK ارسال نمیکردیم، اینجا دیتا رو که خوندیم ACK ارسال میکنیم ولی زمانی که بخوایم دیگه دیتا دریافت نکنیم ( به عبارت صحبح تر، دیگه نخوایم EEPROM برامون دیتا بفرسته ) باید ACK نفرستیم بعد از دریافت دیتا.
خواندن زنجیره ای شروع میکنه از آدرس فعلی یا همانند خوندن تصادفی.
بعد از این که میکرو یه بایت داده دریافت کرد، یه ACK ارسال میکنه؛ آخرین بایتی که دریافت کردیم، دیگه ACK ارسال نمیکنیم؛ تا زمانی که EEPROM بسته ACK دریافت میکنه، شمارنده آدرسش زیاد میشه و مقدار اون خونه رو برا ما ارسال میکنه؛ وقتی شمارنده به خونه آخر برسه مقدارش ۰ میشه و دوباره از خونه ۰ شروع به خوندن میکنه و برا ما میفرسته.

گروه پرسش و پاسخ الکترونیکی در سروش
مهدی دمیرچیلو گوگل میفرماید : إِنَّ اللّه مَعَ السارِچین ( خداوند با سرچ کنندگان است )
ارسال دیدگاه
20

1) نظرات غیر فارسی به صورت خودکار حذف میشوند ( حداقل 5 حرف فارسی وارد کنید ).

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید ( طبیعتا لینک کدتون رو باید برای من بفرستید! ) : debian

4) پسورد فایل های سایت : www.dmf313.ir

  1. Avatar

    مهمان

    gavad44

    با عرض سلام وخداقوت ,وصلوات ورحمت خدا بر شهدا بخصوص شهدای از جان گذشته وقهرمان مدافعین حرم.
    سوال در مورد ای سی 24LC02B اس ام دی که مربوط به پخش پراید میباشد.ایا این ای سی از نوع ATMELهست وایا میتوان با پروگرامر USB-ISPاروند انرا پروگرام کرد؟ ایا میتوان از ای سی AT24C02N بجای24LC02B استفاده کرد ؟
    اگر نمیتوان پس کاربد ای سی AT24C02N برای چه موارد وپروژه هست.با سپاس از مدیر محترم

    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام.
      نه نمیشه – یا باید پروگرامر خاصشو بخری یا این که با یه Avr کدشو بنویسی و خودت پروگرامش کنی.
      پایه هاش که یکسانه ولی AT24C02N مدل قدیمی هستش و توصیه نمیشه برا طراحی های جدید ( طبق گفته شرکت میکروچیپ / اتمل قدیم )

  2. Avatar

    مهمان

    ادهمی

    دمت گرم

  3. Avatar

    مهمان

    امیر

    سلام خدمت همگی
    مشکلی که بنده د رکار با at24c512 دارم اینه که نقاطی از حافظه که آدرس های مضرب 128 منهای1(مثلا 127و255و..) دارن قابل استفاده نمی باشند.یعنی زمان خواندن آن مقداری که روش نوشته شده ، رو برنمیگردونه.لطفا راهنمایی کنید

  4. Avatar

    مهمان

    امیر

    باسلام
    من از برد اموزشی lpc1788 استفاده میکنم میخواستم از طریق i2c به at24c02 دیتا بفرستم که فرستاد اما متوجه شدم که اگر اون a هارو تغییر بدم بازم اکنالج میفرسته مثلا اما اگه قسمت سابت ادرس رو تغر بدم نه
    مثلا 0xa0 اکنالج میده (a ها به زمین وصله ) 0xa2 اکنالج میده اما اگه مثلا 0x20 بدهم دیگه نمیده مشکل از چیه ؟؟؟

  5. Avatar

    مهمان

    سرمدی

    سلام ، گفتید که این آی سی ها محدوده نوشتن دارند ، یعنی اگر ۱۰۰۰۰۰ بار نوشته بشه آی سی خراب میشه. حالا آی سی هست که محدوده نوشتن نداشته باشه؟

    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام – آیسی های flash رو بررسی کن.

  6. Avatar

    مهمان

    مهدی

    با سلام
    هنگام نوشتن در یک EEPROM به صورت صفحه‌ای، می‌بایست یک آدرس (به جای ارسال همه آدرس‌ها) ارسال شود.
    این آدرس، آدرس کم ارزش‌ترین داده است یا باارزش‌ترین داده؟
    پس از ارسال دومین داده، آدرس در EEPROM به صورت خودکار افزایش می‌یابد یا کاهش؟
    لطف کنید کمی در مورد نوشتن به صورت صفحه‌ای توضیح دهید.

  7. Avatar

    مهمان

    احسان

    عالی مثل همیشه

  8. Avatar

    مهمان

    مرتضی

    سلام و خداقوت
    سلام
    یک شمارنده با 74193 بستم
    وقتی تغذیه قطع و وصل میشه اطلاعات از بین میره و دوباره شمارنده از صفر شروع میکنه
    بدون استفاده از میکرو و باطری پشتیبان چه راهی هست تا این مشکل حل بشه؟
    آیا با این آی سی مشکل حل میشه؟
    آموزشی در این مورد دارید؟

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام.
      اگه شمارنده قابلیت دادن شماره جدید رو بهش داره – تا از اون شماره شروع به شمارش کنه – بله میشه از این آیسی استفاده کرد – البته باید با میکرو این آیسیو پروگرام کنی و اگه هم مدارت میکرو داشته باشه دیگه شمارنده چه کاربردی داره؟؟

  9. Avatar

    مهمان

    امین طاهری

    سلام والا من نفهمیدم چرا دیگه شوخ طبعی شما در بیان مطالب کم شده؟
    کاربرد این EEprom واقعا کجاست مثلا شما توی چه پروژه ای ازش استفاده کردید؟
    سوال اخر من دوست دارم شما آموزش کامل VHDL رو توی سایتتون قرار بدید و حاضرم حمایت مالی هم از شما بکنم ولی آموزش درست حسابی به زبون خدومونی و حداقل باید بالای ۲۰ جلسه باشه. یه اموزش خودمونی به دور از تنبلی خخخ از انجا که این کار عامل المنفعه است و افراد زیادی هستند که در روستاها و شهرستان ها نیاز دارند و یا شاید دوست دارند واقعا با FPGA کارکنند اما کتاب درست حسابی نسیت اونهایی هم که هست اینقدر گنگ گفته که انگار نویسنده داره برا خودش توضیح میده نه مخاطب (من چندتا خوندم) و همچنین بچه ها دارای سطح زبان انگلیسی خوبی نیستند و یا حال خوندن انگلیسی نیست و… من دیدم که شما کار رو شروع کردید و تا جلسه ششم هم رفتید اگر بخواید کاملش کنید چقدر نیاز به کمک مالی دارید؟ با ایمیل من تماس بگیرید.در ضمن من سرمایه دار نیستم دانشجو هستم متاسفانه سرمایه دارهای مملکت ما توی زندگی تجملی خودشون غرق شدند و اصلا نمی دونند دارند کجا میرند و اصلا برای چی زندگی می کنند روزها رو شب و شب ها را به بیهودگی صبح می کنند no

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      حافظه ایپرام یه حافظه دائمی هستش – مثل حافظه flash ولی با این تفاوت که حین کار کردن پروژه میتونی این حافظه رو اطلاعاتشو تغییر بدی ولی حافظه فلش میکرو یه بار پروگرامش میکنی و اگه خواستی میتونی متغییری تعریف کنی که تو این حافظه قرار بگیره ولی دیگه نمیتونی مقدارشو تغییر بدی.
      برا بحث fpga والا تو ذهنم هستش که برم سمتش ولی فعلا میگم این چیزایی که تا یکمکیشونو رفتم رو تکمیل کنم – مثلا اندروید رو تا حدود زیادی مطالبش رو گزاشتم – تقریبا از امکانات زیادیش استفاده کردم و پروژه گزاشتم – این lpc هم حوصله کنم و تمومش کنم – حتما بعدش میرم سمت fpga – ولی خب امان از تنبلی laugh

      • مهدی دمرچیلو

        نویسنده این مطلب

        مهدی دمرچیلو

        خب یه موردی – ان شاء الله یه چند روز دیگه میرم سمت Fpga – البته اگه مشکلی رخ نده.

  10. Avatar

    مهمان

    حسین

    سلام . در بالای صفحه گفتید پایداری نوشتن چرخه / صفحه برای آیسی ۵۱۲ کیلوبیت ۱۰۰۰۰۰است این دقیقا یعنی چی؟

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-تعداد دفعات نوشتن تا خراب شدن!

  11. Avatar

    مهمان

    کیومرث

    سلام میشه کمک کنین راجع به ای سی at28c256 که چطور میشه خوندش

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام به دیتاشیتش مراجعه کنید – اونجا نمودارش رو گزاشته قشنگ

  12. Avatar

    مهمان

    کیومرث

    سلام
    اقا مهدی من یه سوالی داشتم راجع به این حافظه ها اونم اینکه من یه حافظه at28c256 روی یک دستگاه صنعتی دارم و این ای سی رو وقتی با نمونه مشابه با دستگاه سالم عوض کردم مشکل من رفع شد و دستگاه کار کرد . سوالی که واسه من پیش میاد اینه که ایا این ای سی دارای برنامه هست و اگه هست چطور میتونم اونو بگیرم و انتقال بدم به یه ای سی سالم .
    از سایت خوبتون ممنون

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      تا جایی که میدونم این آیسی ها در دو صورت خراب میشن
      ۱) مشکل در تغذیه و سوتی های مربوطه.
      ۲) تعداد دفعات نوشتن از مقدار تعیین شده توسط دیتاشیت بیشتر بشه.