نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه

آموزش پروتکل i2c

به نام خدا : تو این مطلب میخوام آموزش پروتکل i2c رو براتون بزارم، این مطلب یه جورایی مقدمه ای هستش برا یه مطلب دیگه ( بحث i2c تو میکرو lpc1768، البته این مطلبی که اینجا میبینید محدود به میکروی خاصی نیست اصلا ) که میخوام بنویسم و نیاز بود یه همچین مطلبی رو من قبلش بنویسم، بیشتر ما فقط کار با I2C رو بلدیم، زیاد از خود I2C اطلاعات دقیق نداریم و این بعضا دردسرساز میشه، مثلا میخواین یه کتابخونه آردوینو رو تبدیل کنید ( مثلا کتابخونه ای که برا UNO نوشته شده رو تبدیل کنید به LPC1768 ) یا مثلا یه قطعه ای که با پروتکل I2C کار میکنه رو میخواین براش یه کتاب خونه بنویسید یا اصلا یه مورد ساده تر، یه کتابخونه دارید برا یه قطعه ای، ولی کتابخونش ناقصه و میخواین تکمیلش کنید و یه تابع بهش اضافه کنید ولی نمیتونید چون چیز خاصی درباره I2C نمیدونید و فقط بلدید از کتابخونه هاش استفاده کنید که اونم با اومدن آردوینو ، کار با کتابخونه I2C رو هم دیگه بعید میدونم کسی بلد باشه !!! لامسب همه چی شده کتابخونه آماده، البته این موضوع خوبه ولی به شرطی که بلد باشید!!! بگذریم، رمانم طولانی شد! ^_^
آموزش پروتکل i2c

آموزش پروتکل i2c

در زیر میخوام یه سری اصطلاحات رو توضیح بدم و آموزش اصلی میمونه برا اون فایلی که ته مطلب گزاشتم، چون کامل توضیح داده.
 
کاربرد : عرضم به ظهورتون که یه راه ارتباطی برا چند تا وسیله هستش!؛ خوبیش اینکه که میتونی با چندین دستگاه به کمک دو تا سیم ارتباط برقرار کنی، مثلا میکرو کنترلر یه طرف، با دو تا پایه میکرو میتونیم یه نمایشگر LCD کاراکتری رو کنترل کنیم، ساعت DS3231 رو کنترل کنیم و … ، کنترل چندین چیز فقط به کمک دو تا پایه!، مزایا و محدودیت های خاص خودش رو هم داره.
 
سرعت تبادل داده :  سرعت تبادل داده اش هم 100Kbits/s و 400Kbits/s و 1Mbits/s هستش که بسته به نیازتون میتونید یکی از اینا رو انتخاب کنید ( البته باید قبلش بررسی کنید که IC مقابل از کدوم سرعت ها پشتیبانی میکنه! این محدودیت هم وجود داره )
 
تاریخچه : این پروتکول در سایت ۱۹۸۰ توسط شرکت Philips ساخته شد ( قبل از این که به دنیا بیاین ^_^ ) بیشتر از این فک نکنم نیازی باشه ^_^ همین کافیه!
 
پایه ها : این پروتکول از ۲ تا پایه به نام های SDA ( پایه دیتا، مخفف Serial Data ) و SCL ( پایه کلاک، مخفف Serial Clock ) استفاده میکنه.
 
STOP و START : در شروع تبادل داده یه وضعیت START ارسال میشه و در پایان تبادل داده یه وضعیت STOP ارسال میشه!
 
START و Reapeted START :  اگه پیش از این وضعیت START ارسال شده و STOP یی ارسال نشده، بیایم یه بار دیگه وضعیت START ارسال کنیم، به این استارت دومی میگن Reapeted START.
 
SlaveAddress + R/Wbit : بعد از ارسال وضعیت START یا Reapeted START میایم و آدرس اسلیو و بیت تعیین جهت داده رو ارسال میکنیم، چون به یه i2c ممکنه جندین IC وصل باشه و هر IC یه آدرسی برا خودش داره، لذا باید اول آدرس آیسی رو ارسال کنیم تا آیسی مد نظر ما فقط دیتا رو دریافت کنه یا بهمون دیتا بده؛ که این SlaveAddress در مدل معمولی 7 بیت و در مدل های بهبود یافته I2C حدود 10 بیت هستش و یه تک بیت هم به نام R/Wbit داریم که بهش میگن بیت تعیین جهت داده، که اگه 0 باشه یعنی نوشتن یا WRITE یا مختصرا W و اگه 1 باشه یعنی خوندن یا READ یا مختصرا R، حالا اگه 0 باشه یعنی میخواین به SLAVE دیتا بفرستین و اگه 1 باشه یعنی دارین به SLAVE میگین که برام دیتا بفرست ( دارید درخواست دیتا میکنید )
 
DATA : بعد از ارسال دیتای SlaveAddress + R/Wbit اگه بیت جهت داده 0 بود که DATA ها رو ارسال میکنیم و اگه 1 بود که دیتا ها رو میخونیم !!!
 
تامین کننده کلاک : اون آیسی یا میکرویی که master هستش وظیفه تامین کلاک رو بر عهده داره، معمولا یه master داریم و حداثر 127 تا slave ( که در مدل های بهبود یافته I2C تعداد slave ها تا 1023 عدد میتونن باشن ) که به این حالت میگن Single Master، البته تو بعضی موارد ممکنه دو یا چند تا master داشته باشیم که به این حالت میگن Multi Master
حالا شاید بپرسید این 127 از کجا اومد باید خدمتتون عرض کنم که همون طور که در بالا گفتم، داده مربوط به SlaveAddress+R/Wbit قسمت SlaveAddress میتونه 7 بیتی باشه یا 10 بیتی که که اگه 7 بیتی باشه حداثر 127 تا آدرس رو شامل میشه و اگه 10 بیتی باشه حداکثر 1023 تا آدرس رو شامل میشه.
 
تصدیق نامه ( Acknowledge ) : خوبی که I2C داره، وجود تعریفی به نام ACK هستش که مخفف Acknowledge به معنای تصدیق نامه هستش، که به کمک این ویژگی که یه تک بیت هستش که مقدارش 0 منطقی هستش، ما مطمئن میشیم که هر بایتی که ارسال میکنیم، توسط گیرنده دریافت میشه یا نمیشه، اگه روال کار به این صورته که گیرنده در ازای دریافت هر بایتی که ACK ارسال میکنه ( که خب در مقابل ACK یه NACK یی هم هستش که مقدارش 1 منطقی هستش، و در مواقعی ACK ارسال میشه و در بعضی حالات هم NACK ارسال میشه، مثلا اگه میکرو دریات کننده اطلاعات باشه، به ازای هر بایتی که دریافت میکنه یه ACK ارسال میکنه، حالا اگه بایتی که دریافت کرد، آخرین بایت بود، به جای ACK یه NACK ارسال میکنه تا به فرستنده بفهمونه دمت گرم، دیگه دیتا نفرست ^_^ این یه مورد بود که خدمتتون گفتم )؛ این موضوع تو سنسور های فرستنده گیرنده بیسیم خیلی مهمه، لذا سعی کنید با سنسوری کار کنید که حتما از ACK پشیبانی کنه وگرنه مجبورید خودتون این کارو کنید که به طبع هم برنامه نویسی شما یکم بیشتر میشه و هم میکرو بیشتر درگیر میشه.
 
سطح ولتاژ : سطح ولتاژ میکرو و آیسی های مختلف ممکنه با هم فرق داشته باشه، مثلا سطح ولتاژ میکرو های سری ATmega حدود ۵ ولت هستش و میکرو های سری LPC حدود ۳٫۳ ولت، لذا اگه بخواین بین این دو سری از میکرو ها به کمک I2C ارتباط برقرار کنید باید سطح ولتاژ پایه های SDA و SCL رو با هم برابر کنید.
 
master و slave : تو i2c دو تا اصطلاح با نام های master و slave داریم، که تامین کننده کلاک master هستش، و هر دو میتونن دیتا ارسال کنن و دریافت کنن ولی ( تا جایی که اطلاع دارم و مطالعه کردم ) slave از خودش اراده ای نداره، یعنی چی؟ یعنی این که مستر حتما باید ازش درخواست دیتا کنه تا slave بتونه دیتا به master ارسال کنه.
 
انواع مد i2c : چهار مد با نام های “مستر فرستنده”، “مستر گیرنده”، “اسلیو فرستنده” و “اسلیو گیرنده” داریم که زیر یه توضیح بدم که به یه نکته برسیم :
مستر فرستنده – اسلیو گیرنده : مستر به اسلیو دیتا میفرسته، در این حالت به مستر میگن فرستنده و خب به طبع به اسلیو هم میگن گیرنده.
مستر گیرنده – اسلیو فرستنده : مستر به اسلیو درخواست دیتا میده، اسلیو هم براش دیتا ارسال میکنه، در این حالت به مستر میگن گیرنده و به اسلیو میگن فرستنده.
که خب بیشتر میکرو تو مد master کار میکنه و من به شخصه پروژه ای رو ندیدم که میکرو slave باشه ( نمیگم امکانش نیست، میگم من ندیدم ) مثلا برا کار با آیسی های مختلف میکرو باید در مد master باشه.
 
در شکل زیر، در حالت A میبینید که به MASTER داریم و N تا SLAVE و در حالت B هم دو تا MASTER و N تا SLAVE.
I2C Connection
 
بعد از مطالعه آموزش مختصر بالا، بهتره فایل زیر رو بخونید، که تا جایی که من دیدم تقریبا کامل بود که باز اگه سوالی بود، در حد توان در خدمتم، یا شاید اصلا آموزش نوشتن کتابخونه برا آیسی at24cxx رو نوشتم – شاید معلوم نیست، باید حسش باشه که نی #_#
مطالعه بیشتر : برا توضیحات بیشتر کتاب ۳۰ صفحه ای زیر رو دانلود کنید و بخونید و لینک زیر رو هم خواستید بخونید :
I2C Bus Specification

تو مطلب بالا اگه چیزی جا انداختم بگید تا تکمیل کنم، فعلا یا علی.
 
شهید آوینی
تو عکس بالا س.م.خ که دیگه فک کنم معلومه براتون که کی هستش، سید محمد خاتمی که مخففش میشه س.م.خ
این عکس مربوطه به قسمتی از مستند “مستند خنجر و شقایق” که پیشنهاد میکنم ببینید و توسط شهید آوینی و همکاراش تهیه و ساخته شده و به حوادث جنگ بوسنی و مقاومت مظلومانه مردم مسلمان این سرزمین در برابر صرب‌ها می‌پردازه.

پسورد فایل های سایت :
www.dmf313.ir
جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. ان‌شاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)
ارسال دیدگاه
16

1) تعداد حروف غیر فارسی از حروف فارسی بیشتر باشه دیدگاه به صورت خودکار حذف میشه.

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

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. مهمان

    علیرضا

    آقا سری پایه مبدلم شکسته چکارکنم

    1397/08/09
    07:43
    • نویسنده این مطلب

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

      نفهمیدم چی میگی – پایه مبدل؟ مبدل چی؟ آیسی هستش؟ آیسی پایش بشکنه باید بری یکی دیگه بخری.

      1397/08/09
      07:48
  2. مهمان

    Arash

    سلام
    من میخوام یه سونسور فاصله سنج srf04 رو با استفاده از i2c راه اندازی کنم . میشه کمکم کنید

    1397/06/10
    12:36
  3. مهمان

    هانیه

    سلام.ممنون.میشه در مورد Nackهنگام خرابی و خطای دریافت داده در پروتکل Tcpیه توضیح بدین؟

    1397/04/10
    10:44
    • نویسنده این مطلب

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

      سلام-مطالعه ای ندارم در این زمینه.

      1397/04/14
      09:18
  4. مهمان

    ناشناس

    سلام خیلی ممنون مطلب مفید و بدون اضافات بود

    1397/03/16
    06:20
  5. مهمان

    محمد

    سلام
    فایل اموزشش خیلی خسته کننده بود
    مطالب اظافی خیلییییییی زیاد بود
    اصلا خوشم نیومد
    از روش اموزشی شما بیشتر خوشم میاد
    من عاشق اصل مطلبم همیشه
    حتی تو خاسگاری wink blum

    1397/01/30
    11:39
  6. مهمان

    Ali

    درود
    اون دوتا مستر چطوری باهم ارتباط برقرار میکنن

    1396/08/23
    12:35
    • نویسنده این مطلب

      مهدی دمرچیلو

      سلام-اینو ندیدم تاحالا جایی – کار نکردم – بلد هم نیستم والا

      1396/08/23
      06:11
  7. مهمان

    هونام سنگ

    سلام وبلاگ خوبی دارید بهتون تبریک میگم ممنون از زحماتتون دوست عزیز heart

    1396/07/18
    12:16
  8. مهمان

    Amin

    لطفا برای قسمت I2c چند پروژه مانند قسمت هایspi و usart قرار بدهید .
    چون این مبحث نیاز تمرکز بیشتری است
    تشکر بابت سایت و توجه شما

    1396/06/25
    10:27
  9. مهمان

    صدرا

    سلام وقت بخیر
    من ی سوال داشتم
    چ جوری میشه یک سنسور را براش نداری طراحی کرد ک ارتباطش i2cبشه
    ممنون میشم کمکم کنید

    1396/06/24
    02:02
    • نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      متوجه سوالت نشدم

      1396/06/25
      10:05
  10. مهمان

    محمد صادق

    سلام ، اطلاعاتی که از i2c به میکرو میاد به چه شکلی هست ؟

    1396/06/03
    08:09
    • نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      اون فایلای ته مطلبو بخون – جاییش مشکلی بود در حد توان در خدمتیم.

      1396/06/04
      07:50
  11. مهمان

    علیرضا اهنی

    سلام.
    یه چیزی پو نگفتی که باید دو خط پول اپ بشه.

    1396/04/17
    10:43