زنگ

کسانی هستند که قبل از شما این خبر را می خوانند.
برای دریافت مقالات جدید مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید زنگ را بخوانید؟
بدون هرزنامه
I2C(مدار یکپارچه) یک گذرگاه داده سریال برای ارتباط مدارهای مجتمع است که از دو خط ارتباطی دو طرفه (SDA و SCL) استفاده می کند. برای اتصال قطعات جانبی با سرعت کم به مادربردها، سیستم های تعبیه شده و تلفن های همراه استفاده می شود.
گاهی اوقات به این اتوبوس "مربع" یا "مربع" یا "I-Tu-C" می گویند.

اصل عمل:

میکروکنترلر در شکل عنصر اصلی است (استاد 1)میتونه پردازنده باشه شکل 3 عنصر جانبی برده را نشان می دهد بردهمانند بردهممکن است حافظه، DAC، ADC و غیره باشد. . حداکثر 127 دستگاه را می توان به اتوبوس متصل کرد.

پردازنده و حافظه در این مورد از طریق دو گذرگاه متصل می شوند:
S.D.A. (Serial DATA) - گذرگاه انتقال داده سریال. داده های این اتوبوس در دو جهت قابل انتقال است.
SCL (ساعت سریال) - گذرگاهی که گذرگاه داده روی آن ساعت است. گذرگاه همگام سازی داده ها همچنین تعیین می کند که داده ها در چه نقطه ای قرار خواهند گرفت. در طرح Master-Master، بیت اول تعیین می کند که چه کسی نقش اصلی را بر عهده خواهد گرفت.
سرعت انتقال داده. از آنجایی که 1 بیت در هر سیکل ساعت ارسال می شود، نرخ انتقال داده 1/8 فرکانس ساعت است.

وضعیت START و STOP
روند تبادل با ایجاد حالت START توسط استاد آغاز می شود: ایجاد انتقال سیگنال خط SDA از حالت HIGH به حالت LOW در سطح HIGH در خط SCL. این انتقال توسط تمام دستگاه های متصل به اتوبوس به عنوان نشانه ای از آغاز روند تبادل درک می شود. تولید سیگنال ساعت همیشه بر عهده استاد است. هر Master سیگنال ساعت مخصوص به خود را هنگام ارسال داده از طریق اتوبوس تولید می کند. رویه مبادله با ایجاد حالت STOP توسط استاد به پایان می رسد - انتقال وضعیت خط SDA از حالت پایین به حالت HIGH هنگامی که حالت خط SCL HIGH است. حالت های START و STOP همیشه توسط master تولید می شوند.
پس از شناسایی حالت START، اتوبوس مشغول در نظر گرفته می شود. اتوبوس مدتی پس از ثبت وضعیت STOP رایگان در نظر گرفته می شود. هنگام ارسال پیام از طریق گذرگاه I²C، هر Master سیگنال ساعت خود را در خط SCL تولید می کند. پس از تشکیل حالت START، استاد وضعیت خط SCL را به حالت LOW کاهش می دهد و مهم ترین بیت از اولین بایت پیام را روی خط SDA تنظیم می کند. تعداد بایت های یک پیام محدود نیست. مشخصات گذرگاه I²C تنها زمانی که خط SCL LOW باشد، اجازه تغییر در خط SDA را می دهد. داده معتبر است و باید فقط در حالت ساعت HIGH پایدار بماند. برای تأیید دریافت یک بایت از فرستنده اصلی توسط گیرنده برده، مشخصات پروتکل مبادله در گذرگاه I²C یک بیت تأیید ویژه را معرفی می کند که پس از دریافت بیت هشتم داده، روی گذرگاه SDA تنظیم می شود.
تائیدیه
بنابراین، انتقال 8 بیت داده از فرستنده به گیرنده با یک چرخه اضافی (تشکیل پالس ساعت 9 خط SCL) تکمیل می شود، که طی آن گیرنده سطح سیگنال را در خط SDA پایین می آورد. نشانه دریافت موفقیت آمیز بایت

تأیید در حین انتقال داده مورد نیاز است، مگر زمانی که انتقال توسط طرف برده تکمیل شود. پالس هماهنگ سازی مربوطه توسط استاد تولید می شود. فرستنده خط SDA را برای مدت زمان پالس ساعت تصدیق آزاد می کند (بالا می کند). گیرنده باید خط SDA را در طول حالت HIGH ساعت تصدیق در حالت LOW پایدار نگه دارد.

در صورتی که برده گیرنده نتواند آدرس خود را تأیید کند (به عنوان مثال، زمانی که در حال حاضر برخی از عملکردهای بلادرنگ را انجام می دهد)، خط داده باید HIGH رها شود. سپس Master می تواند یک حالت STOP برای قطع انتقال داده صادر کند. اگر مستر گیرنده در انتقال دخالت داشته باشد، باید فرستنده فرستنده را با عدم تایید آخرین بایت از پایان انتقال مطلع کند. برده فرستنده باید خط داده را آزاد کند تا به Master اجازه دهد یک شرط STOP صادر کند یا شرط START را تکرار کند.
هماهنگ سازی
همگام سازی با استفاده از اتصال AND به خط SCL انجام می شود. در صورتی که Slave برای پردازش یک بیت دریافتی به زمان بیشتری نیاز داشته باشد، این توانایی را دارد که خط SCL را تا زمانی که آماده دریافت بیت بعدی شود، پایین نگه دارد. بنابراین، خط SCL برای طولانی ترین دوره ساعت LOW، LOW خواهد بود.

دستگاه‌هایی با دوره LOW کوتاه‌تر تا پایان دوره طولانی وارد حالت خواب می‌شوند. هنگامی که تمام دستگاه های فعال دوره ساعت LOW خود را به پایان رساندند، خط SCL بالا خواهد رفت. همه دستگاه‌ها در دوره ساعت خود شروع به بالا رفتن خواهند کرد. اولین دستگاهی که این دوره تمام شود، خط SCL را دوباره LOW تنظیم می کند. بنابراین، دوره LOW خط ساعت SCL توسط طولانی ترین دوره ساعت در بین تمام دستگاه های درگیر تعیین می شود، و دوره HIGH با کوتاه ترین دوره ساعت دستگاه ها تعیین می شود.

مکانیزم همگام سازی می تواند توسط گیرنده ها به عنوان وسیله ای برای کنترل انتقال داده در سطوح بایت و بیت استفاده شود.

در سطح بایت، اگر دستگاهی بتواند بایت های داده را با سرعت بالایی دریافت کند، اما به زمان معینی برای ذخیره بایت دریافتی یا آماده شدن برای دریافت بایت بعدی نیاز داشته باشد، پس از دریافت و تایید می تواند خط SCL را LOW نگه دارد. بایت، بنابراین فرستنده را در حالت خواب قرار می دهد.

در سطح بیت، دستگاهی مانند یک میکروکنترلر بدون مدارهای سخت‌افزاری I²C روی تراشه یا با مدارهای محدود می‌تواند فرکانس ساعت را با افزایش دوره LOW آن کاهش دهد. به این ترتیب سرعت انتقال هر استادی با سرعت دستگاه کند تطبیق داده می شود.
آدرس دهی در اتوبوس I²C
هر دستگاه متصل به اتوبوس را می توان توسط نرم افزار به یک آدرس منحصر به فرد آدرس داد. برای انتخاب گیرنده پیام، ارائه دهنده از یک جزء آدرس منحصر به فرد در قالب ارسال استفاده می کند. هنگام استفاده از دستگاه های مشابه، IC ها اغلب دارای یک انتخابگر آدرس اضافی هستند که می تواند به عنوان ورودی های انتخابگر آدرس دیجیتال اضافی یا به عنوان ورودی آنالوگ پیاده سازی شود.

در این حالت، آدرس چنین دستگاه هایی از همان نوع در فضای آدرس دستگاه های متصل به اتوبوس توزیع می شود.

در حالت عادی از آدرس دهی 7 بیتی استفاده می شود.

روش آدرس دهی در گذرگاه I²C به این صورت است که اولین بایت بعد از سیگنال START تعیین می کند که کدام slave توسط master برای چرخه تبادل آدرس داده می شود. استثنا آدرس "تماس عمومی" است که به تمام دستگاه های موجود در اتوبوس آدرس می دهد. هنگامی که از این آدرس استفاده می شود، همه دستگاه ها در تئوری باید یک سیگنال تایید ارسال کنند. با این حال، دستگاه هایی که می توانند "تماس عمومی" را انجام دهند در عمل نادر هستند.

هفت بیت اول بایت اول آدرس برده را تشکیل می دهد. هشتمین بیت، کم اهمیت ترین، جهت انتقال داده را تعیین می کند. "صفر" به این معنی است که master اطلاعات را برای Slave انتخاب شده می نویسد. "یک" به این معنی است که استاد اطلاعاتی از برده را خواهد خواند.

پس از ارسال آدرس، هر دستگاه در سیستم هفت بیت اول پس از سیگنال START را با آدرس خود مقایسه می کند. اگر مطابقت وجود داشته باشد، دستگاه خود را به عنوان گیرنده برده یا فرستنده فرستنده بسته به بیت جهت انتخاب می کند.

آدرس برده می تواند از یک قسمت ثابت و قابل برنامه ریزی تشکیل شده باشد. اغلب اتفاق می‌افتد که سیستم چندین دستگاه از یک نوع داشته باشد (به عنوان مثال، آی‌سی‌های حافظه یا درایورهای نشانگر LED)، بنابراین با استفاده از قسمت قابل برنامه‌ریزی آدرس، می‌توان حداکثر تعداد ممکن از این دستگاه‌ها را به گذرگاه متصل کرد. . تعداد بیت های قابل برنامه ریزی در آدرس به تعداد پایه های آزاد ریز مدار بستگی دارد. گاهی اوقات از یک پین با تنظیمات آنالوگ یک محدوده آدرس قابل برنامه ریزی استفاده می شود. علاوه بر این، بسته به پتانسیل در این پین آدرس آی سی، می توان فضای آدرس درایور را جابجا کرد تا آی سی های هم نوع با یکدیگر در گذرگاه مشترک تضاد نداشته باشند.

تمام آی سی های تخصصی که عملکرد را در استاندارد گذرگاه I²C پشتیبانی می کنند دارای مجموعه ای از آدرس های ثابت هستند که لیست آنها توسط سازنده در توضیحات کنترلر مشخص شده است.

ترکیب بیت آدرس 11110XX برای آدرس دهی 10 بیتی رزرو شده است.

همانطور که از مشخصات گذرگاه به شرح زیر است، هر دو فرمت مبادله ساده و ترکیبی مجاز هستند، زمانی که در فاصله زمانی از حالت START تا حالت STOP، master و slave می توانند هم به عنوان گیرنده و هم به عنوان فرستنده داده عمل کنند. برای مثال می توان از فرمت های ترکیبی برای مدیریت حافظه سریال استفاده کرد.

در طول اولین بایت داده، یک آدرس حافظه را می توان ارسال کرد، که در یک ثبات داخلی ثبت می شود. پس از تکرار سیگنال START و آدرس برده، داده ها از حافظه بازیابی می شوند. تمام تصمیمات در مورد افزایش یا کاهش خودکار آدرسی که قبلاً به آن دسترسی داشت، توسط طراح یک دستگاه خاص گرفته می شود. بنابراین، در هر صورت، بهترین راه برای جلوگیری از یک وضعیت کنترل نشده در اتوبوس قبل از استفاده از آی سی جدید (یا قبلاً استفاده نشده) این است که با دریافت آن از وب سایت سازنده، توضیحات آن (صفحه داده یا راهنمای مرجع) را به دقت مطالعه کنید. علاوه بر این، سازندگان اغلب دستورالعمل های دقیق تری را برای استفاده در نزدیکی خود قرار می دهند.

در هر صورت، با توجه به مشخصات اتوبوس، تمام دستگاه های در حال توسعه باید هنگام دریافت سیگنال START یا START، منطق اتوبوس را ریست کرده و برای دریافت آدرس آماده شوند.

با این حال، مشکلات اصلی استفاده از گذرگاه I²C دقیقاً به این دلیل است که توسعه دهندگانی که کار با گذرگاه I²C را شروع می کنند این واقعیت را در نظر نمی گیرند که استاد (اغلب یک ریزپردازنده) حق انحصاری هیچ یک از خطوط اتوبوس را ندارد. .

تاریخچه و استانداردها:

اولین استاندارد با فرکانس 100 کیلوهرتز ( استاندارد ) سرعت - 100 کیلوبیت بر ثانیه یا 12.5 کیلوبایت بر ثانیه
سپس فرکانس به 400 کیلوهرتز افزایش یافت ( سریع) سرعت - 400 کیلوبیت بر ثانیه یا 50 کیلوبایت بر ثانیه
استاندارد بعدی سرعت ها و فرکانس های جدید 1.7 یا 3.4 مگاهرتز را معرفی کرد. بالا) سرعت - (1.7 مگابیت بر ثانیه یا 3.4 مگابیت در ثانیه) 500 کیلوبایت بر ثانیه یا 1000 کیلوبایت بر ثانیه
در مواردی که این سرعت ها کافی نباشد، از رابط سریعتر SPI استفاده می شود

ویژگی ها:

در حالت استراحت اتوبوس دارای پتانسیل مثبت ثابت است (~ 3 ولت یا 5 ولت، اما ممکن است موارد دیگر وجود داشته باشد). و پردازنده، با کاهش پتانسیل، دستور سوئیچ به آمادگی را می دهد. برای حفظ پتانسیل مثبت، مقاومت های کششی در نزدیکی گذرگاه قرار می گیرند. Vddشکل) را برای منبع تغذیه مثبت در هر دو خط ببینید. نصب مقاومت های 10 کیلو اهم در +3.3 ولت معمول است

استفاده:

1. ارتباط بین پردازنده و حافظه (معمولا EEPROM)
2. رابط های HDMI و DVI (برای انتقال اطلاعات سرویس از تلویزیون به دستگاهی که محتوای ویدیویی پخش می کند، یا برای انتقال اطلاعات از مانیتور به رایانه برای انتقال اطلاعات در مورد نوع مانیتوری که با چه ویژگی هایی متصل است، انتقال اطلاعات از ترموستات CPU یا اطلاعات مربوط به سرعت چرخش کولر و غیره)
3. ریز مدارها و کارت های حافظه (EEPROM، RAM، FERAM، Flash).
4. دسترسی به DAC/ADC کم سرعت.
5. تنظیم کنتراست، اشباع و تعادل رنگ مانیتور.
6. تنظیم صدا در بلندگوها.
7. کنترل LED ها، از جمله در تلفن های همراه.
8. خواندن اطلاعات از ساعتهای زمان واقعی (نوسانگرهای کوارتز).
9. کنترل روشن/خاموش کردن اجزای سیستم.
10. صفحه کلید
11. تبادل اطلاعات بین میکروکنترلرها.

نمونه ای از سیستم اتوبوس I²C:
در تصویر (قابل کلیک):
(الف) تلویزیون بسیار یکپارچه
میکروکنترلر
سینت سایزر PLL
فلش مموری
رمزگشای رنگ چند سیستمی
رسیور صوتی استریو
تقویت کننده سیگنال تصویر
پردازنده صوتی Hi-Fi
پردازنده ویدئویی آنالوگ
رمزگشای تله تکست
آی سی سیگنال OSD
(ب) ایستگاه پایه تلفن رادیویی DECT
ژنراتور DTMF
رابط خط تلفن
کدک ADPCM
دسته کنترلر
میکروکنترلر

مشکلات مکرر تایر و تشخیص آنها:

- اولین چیزی که باید بعد از منبع تغذیه و کلاک روی کوارتز بررسی شود - اغلب مقاومت های pull-up شکسته می شوند. با اندازه گیری پتانسیل در خطوط SCL و SDA تشخیص داده می شود. اگر باس ضایعات شود، یعنی یکی از مقاومت ها ولتاژ مثبت را تامین نکند، ممکن است دستگاه روشن نشود...

رابط I2C یک استاندارد گسترده و محبوب برای انتقال داده ها بین دستگاه ها است. این رابط توسط سنسورها و تراشه های مختلف پشتیبانی می شود که معروف ترین آنها تراشه های حافظه EEPROM سری 24cXX است. برای انتقال داده ها فقط از دو خط استفاده می شود که نشان دهنده یک گذرگاه داده است و چندین دستگاه مختلف را می توان به یک گذرگاه متصل کرد. در این مقاله توضیحاتی در مورد رابط و پیاده سازی در سطح نرم افزار ارائه خواهم داد.

توضیحات رابط I2C

روش اتصال

این رابط از دو سیم، خط ساعت SCL و خط داده SDA استفاده می کند که با هم گذرگاه داده را تشکیل می دهند. دستگاه های متصل به باس به دو دسته Master و Slave تقسیم می شوند. Master فرآیند انتقال داده را آغاز می کند و پالس های ساعت را در خط SCL صادر می کند، Slave دستورات/داده ها را دریافت می کند و همچنین در صورت درخواست Master داده ها را صادر می کند. خطوط SDA و SCL دو طرفه هستند. علاوه بر این، نوع خروجی باید کلکتور باز یا تخلیه باز باشد، بنابراین، هر دو خط SDA و SCL از طریق مقاومت ها به قطب مثبت منبع تغذیه کشیده می شوند. تصویر زیر نمودار اتصال رابط I2C را نشان می دهد:


در صورت استفاده از میکروکنترلر، برای تنظیم log. 1 در خط، پیکربندی مجدد پورت میکروکنترلر به ورودی کافی است، در حالی که مقاومت خط را به یک سطح منطقی بالا می کشد، تامین سطح منطقی بالا از پورت میکروکنترلر به خط مجاز نیست. برای نصب لاگ. 0 در خط، پورت مجدداً به عنوان یک خروجی پیکربندی می شود، مقدار 0 از قبل روی قفل خروجی نوشته می شود و خط به یک سطح منطقی پایین "فشرده می شود".

خطاب به

این رابط آدرس‌دهی نرم‌افزاری دستگاه‌های متصل به گذرگاه را فراهم می‌کند که از نظر تئوری، حداکثر طول آدرس 7 بیت است. توسعه دهندگان هر دستگاه آدرس منحصر به فرد خود را دارد که توسط سازنده ارائه شده و در اسناد فنی ذکر شده است. آدرس دستگاه را می توان ثابت کرد، یا می توان آن را توسط سخت افزار پیکربندی کرد، در این صورت دستگاه دارای ورودی های اضافی است، بسته به سطح ولتاژ در ورودی ها (بالا یا کم)، آدرس های مختلفی می توان به دست آورد. به طور معمول، تعداد ورودی ها از 1 تا 3 متغیر است که مقادیر بیت های خاصی از آدرس 7 بیتی را تعیین می کند. تنظیمات آدرس سخت‌افزاری برای اتصال چندین دستگاه از یک نوع به یک اتوبوس ارائه شده است.

این رابط همچنین یک آدرس دهی 10 بیتی نادر را فراهم می کند، که آدرس 7 بیتی 11110XX برای آن رزرو شده است (XX-بسته به مقدار آدرس)، در این حالت ابتدا آدرس رزرو شده ارسال می شود که در آن دو بیت آخر عبارتند از مهم ترین بیت های آدرس 10 بیتی، سپس 8 بیت پایینی آدرس منتقل می شود. هنگام استفاده از این آدرس دهی، می توان بیش از 1000 دستگاه را به اتوبوس متصل کرد.

شرایط "شروع" و "توقف".

هر جلسه انتقال داده با یک شرط خاص به نام "شروع" شروع می شود. در حالت اولیه، هنگامی که گذرگاه بیکار است، هر دو خط SDA و SCL به سطح منطقی بالا کشیده می شوند، شرط "شروع" شامل تغییر خط SDA از یک سطح منطقی بالا به یک سطح منطقی پایین است در حالی که خط SCL در سطح بالایی قرار دهید.

به طور مشابه، یک جلسه انتقال داده با یک شرط "توقف" خاص به پایان می رسد، این تغییر خط SDA از یک سطح منطقی پایین به یک سطح بالا، با یک سطح بالا در خط SCL است. این شرایط توسط Master (میکروکنترلر) ایجاد می شود.

بر اساس شرایط "شروع" و "توقف"، در حین انتقال داده، خط SDA تنها زمانی می تواند تغییر کند که سطح خط SCL پایین باشد، یعنی تنظیم داده های جدید در خط SDA فقط پس از سطح روی SCL امکان پذیر است. قطره می کند. در طول پالس ساعت (SCL بالا)، وضعیت خط SDA نباید تغییر کند، در این زمان داده های روی SDA خوانده می شود.

فرمت انتقال داده

داده ها از طریق رابط بایت به بایت منتقل می شوند، مهم ترین بیت ابتدا، هر بایت ارسال شده (8 بیت) توسط یک بیت تایید دنبال می شود، دستگاه (master یا slave) که بایت داده را دریافت کرده است، خط SDA را در SCL بعدی پایین می آورد. پالس ساعت، در نتیجه دریافت بایت را تایید می کند. در این زمان، دستگاه فرستنده باید خط SDA را نظرسنجی کند و منتظر پاسخی باشد که نشان دهد بایت با موفقیت دریافت شده است. تصویر زیر نمودار انتقال داده از طریق گذرگاه I2C را نشان می دهد:


ابتدا یک بایت با آدرس 7 بیتی Slave منتقل می شود، مقدار بیت 8 (R/W) جهت انتقال داده را تعیین می کند، مقدار صفر مربوط به رکورد داده است، یعنی انتقال از master به برده اگر بیت جهت 1 باشد، داده ها از برده خوانده می شوند.

Slave آدرس ارسال شده را با آدرس خود مقایسه می کند و در صورت وجود مطابقت، با تنظیم خط SDA (بیت تصدیق) کم پاسخ می دهد. استاد پس از دریافت تأیید، شروع به انتقال بایت ها با داده ها می کند یا بسته به جهت انتقال آنها را دریافت می کند. تصویر زیر با جزئیات بیشتری گزینه های مختلف برای انتقال داده ها در گذرگاه I2C را نشان می دهد:


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

نوشتن یک بایت از دنباله زیر تشکیل شده است: شرط "شروع" - آدرس برده (بیت R/W پاک ​​می شود) - آدرس ثبت داخلی برده - داده (1 بایت) - شرایط "توقف". نوشتن چندین بایت عملاً تفاوتی ندارد پس از ارسال اولین بایت داده ها، بایت های باقی مانده منتقل می شوند، جلسه با شرط "توقف" به پایان می رسد. در این حالت، داده‌ها به‌طور متوالی در رجیسترها نوشته می‌شوند، که معمولاً از یک آدرس داده شده شروع می‌شود.

برای خواندن یک بایت داده، ابتدا باید آدرس برده و آدرس رجیستر مورد نیاز را با بیت جهت برای نوشتن ارسال کنید، پس از آن شرط Start مجدداً ارسال می شود، سپس آدرس برده دوباره، این بار با تنظیم بیت جهت خواندن در مرحله بعد، یک بایت داده از برده دریافت می شود تا جلسه انتقال را به پایان برساند. خواندن چندین بایت مشابه است، استاد پس از هر بایت دریافتی، به جز آخرین بایت، یک تأییدیه صادر می کند. همانطور که در مورد نوشتن، برده یک افزایش خودکار آدرس را انجام می دهد که از آدرس مشخص شده شروع می شود.

در طول یک جلسه انتقال داده، Slave می تواند خط SCL را مجبور به پایین نگه داشتن آن کند، برای مثال، اگر برای پردازش داده ها به زمان نیاز دارد. استاد، با "آزاد کردن" خط SCL، باید انتقال از یک سطح منطقی پایین به سطح بالا را بررسی کند، اگر این اتفاق نیفتد، باید منتظر انتقال بود. بنابراین، استاد کنترل مطلق بر خط SCL ندارد.

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

سرعت انتقال داده

با توجه به مشخصات، رابط از سه حالت انتقال با سرعت بالا پشتیبانی می کند:

  1. رایج ترین آنها تا 100 کیلوبیت در ثانیه است، فرکانس ساعت خط SCL تا 100 کیلوهرتز است، مدت زمان سطوح بالا و پایین حداقل 5 میکرو ثانیه است.
  2. حالت سرعت تا 400 کیلوبیت بر ثانیه، فرکانس ساعت تا 400 کیلوهرتز.
  3. حالت پرسرعت تا 3.4 مگابیت بر ثانیه، فرکانس ساعت تا 3.4 مگاهرتز.

حالت استاندارد تا 100 کیلوبیت در ثانیه توسط همه دستگاه ها پشتیبانی می شود.

پیاده سازی نرم افزار رابط I2C

همه میکروکنترلرهای سری PIC16 دارای ماژول I2C سخت افزاری داخلی نیستند، اما این رابط را می توان در نرم افزار پیاده سازی کرد و روی هر میکروکنترلری استفاده کرد. در زیر کدی وجود دارد که عملکردهای Master را در رابطه با میکروکنترلر PIC16F628A پیاده سازی می کند:

#عبارتند از LIST p=16F628A __CONFIG H"3F10" ;سطح خطای پیکربندی میکروکنترلر -302 ;پیام های دارای خطای 302 را در لیست scetbit equ 0020h نمایش ندهید ;رجیستر کمکی برای شمارش تعداد بیت های perem equ ; 0022H ؛ ثبت آدرس ثبت نام داخلی برده TMP_I2C EQULE 0023H ؛ #DEFINE sda PORTB,0 ;خط DEFINE scl PORTB,1 ;خط scl #DEFINE sda_io TRISB,0 ;بیت کنترل جهت خط sda #DEFINE scl_io TRISB,1 ;بیت کنترل جهت خط scl ;flag,4 - انتقال پرچم جهت (0 - خواندن، 1 - نوشتن) ;پرچم ,5 - پرچم برای پایان دریافت داده ها از slave، 6 - پرچم برای خطای انتقال از طریق رابط I2C (بدون تایید از طرف برده); ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;; org 0000h ;شروع اجرای برنامه از آدرس 0000h goto Start ;بروید به برچسب Start ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;; ;برنامه اصلی Start movlw b"00000000" ;تنظیم مقادیر لچ های خروجی پورت B movwf PORTB ; movlw b"00000111" ;غیرفعال کردن مقایسه کننده ها movwf CMCON ; bsf STATUS,RP0 ;انتخاب 1st Bank movlw b"11111111" ;پیکربندی خطوط ورودی/خروجی پورت B movwf TRISB ;همه خطوط ورودی bcf STATUS,RP0 ;انتخاب 0th bank;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; movlw b"01111110" ;آدرس برده (0111111) را در رجیستر slave_adr بنویسید movwf slave_adr ; ;مثال نوشتن 2 بایت داده (اعداد 10 و 20) در رجیستر داخلی (slave) با شروع آدرس 0x03، آدرس برده 0111111 movlw 0x03 ;نوشتن آدرس رجیستر داخلی Slave در register adr_i2r_; ;(به عنوان مثال، آدرس برده رجیستر داخلی 0x03 است) movlw .2 ;تعداد بایت های منتقل شده به رجیستر tmp_i2c movwf tmp_i2c را بنویسید ;(مثلاً 2 بایت منتقل می شود) movlw data_i2c ;ثبت ذخیره اولیه داده را تنظیم کنید برای انتقال movlw .10 ;عدد 10 را در اولین رجیستر ذخیره سازی movwf INDF بنویسید ; , آماده سازی رجیستر هلدینگ بعدی movlw .20 نوشتن عدد 20 به دومین هلدینگ رجیستر movwf INDF ; Write_i2c را فراخوانی کنید؛ زیرروال نوشتن را از طریق رابط I2C فراخوانی کنید goto dalee_1؛ بدون خطایی، به برچسب dalee_1 بروید. .................. ................... ;نمونه خواندن 3 بایت داده از رجیسترهای داخلی دستگاه ( tmp_i2c movwf tmp_i2c ;(مثلاً 3 بایت پذیرفته می شود) read_i2c را فراخوانی کنید ؛ فراخوانی زیر روال خواندن از طریق پرچم btfss رابط I2C، 6 ;بررسی خطاهای انتقال داده goto obrabotka ;بدون خطا، به قسمت بروید برچسب ........... ....... ;بررسی خطا................... ; ................... ; obrabotka movlw data_i2c ;تنظیم رجیستر ذخیره اولیه برای داده های دریافتی movwf FSR ;با استفاده از آدرس دهی غیرمستقیم movf INDF,W ;کپی اولین بایت دریافتی در انباشته کننده................... ...... ;پردازش اولین بایت ها................... ; incf FSR,F ;ثبت افزایش FSR movf INDF,W ;کپی بایت دوم دریافتی در انباشته کننده................... ;پردازش بایت دوم..... ............. ; incf FSR,F ;ثبت افزایش FSR movf INDF,W ;کپی سومین بایت دریافتی در انباشته کننده................... ;پردازش بایت سوم..... ............. ; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;; زیر برنامه برای خواندن/نوشتن از طریق رابط I2C write_i2c bsf flag,4 ;تنظیم پرچم جهت انتقال (برای نوشتن) goto i2c_1 ;بروید به برچسب i2c_1 read_i2c bcf flag,4 ;تنظیم مجدد پرچم جهت انتقال (برای خواندن) bcf ,5 ;بازنشانی انتهای پرچم دریافت داده i2c_1 پرچم bcf,6 ;بازنشانی پرچم خطا I2C فراخوانی starti2c ؛ فراخوانی زیر روال "شروع" bcf slave_adr,0 ;بازنشانی بیت R/W برای عملیات نوشتن goto err_i2c ;error: انتقال به برچسب err_i2c movf adr_i2c,W ;آدرس های ثبت نام برده I2C فراخوانی peredi2c ; فراخوانی بایت انتقال زیربرنامه پرچم btfsc,6 ;بررسی پرچم خطا movlw .0 ;بررسی تعداد بایت های منتقل شده xorwf, tmp_ btfss STATUS,Z ; goto i2c_3 ;تعداد بایت های منتقل شده برابر 0 نیست: برو به برچسب i2c_3 call stopi2c ;تعداد بایت های منتقل شده 0 است: زیر روال "Stop" را فراخوانی کنید i2c_3 movlw data_i2c ;ثبت ذخیره اولیه داده را برای انتقال movwf FSR تنظیم کنید؛ با استفاده از غیر مستقیم آدرس دهی decf FSR,F ; btfss flag,4 ;پرچم جهت انتقال را بررسی کنید goto rd_i2c ;پرچم 0 است: به برچسب rd_i2c بروید (بخوانید) i2c_2 incf FSR,F ;رجیستر FSR را افزایش دهید، بایت بعدی را برای انتقال آماده کنید movf INDF,W ;داده ها را کپی کنید بایت برای انتقال فراخوانی peredi2c ؛ فراخوانی زیر روال انتقال بایت پرچم btfsc، 6 ;پرچم خطا را بررسی کنید goto err_i2c ;خطا: به برچسب err_i2c decfsz بروید tmp_i2c,F ؛ شمارنده تعداد بایت های منتقل شده را کاهش دهید goto i2 ; برابر 0 نیست: به برچسب i2c_2 بروید بازگشت ;خروج از روال خواندن/نوشتن I2C ;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; rd_i2c فراخوانی starti2c؛ فراخوانی زیربرنامه "Start" (Restart) bsf slave_adr,0 ;تنظیم بیت R/W برای عملیات خواندن movf slave_adr,W ;کپی آدرس فرعی فراخوانی peredi2c ؛ فراخوانی زیرروال انتقال بایت flag,6 ;پرچم خطا را بررسی کنید goto err_i2c ;خطا: انتقال به برچسب err_i2c rd_i2c_2 decfsz tmp_i2c,F ;کاهش شمارنده تعداد بایت های ارسالی goto rd_i2c_1 ؛ شمارنده برابر با 0 نیست: 1_bs transition to label_2 پرچم پایانی برای دریافت داده از برده rd_i2c_1 incf FSR,F؛ رجیستر FSR را افزایش دهید، ثبات بعدی را برای دریافت فراخوانی داده آماده کنید. ;پرچم پایانی را برای دریافت داده‌ها از Slave بررسی کنید goto rd_i2c_2 ;پرچم برابر با 0 نیست: به برچسب بروید rd_i2c_2 call stopi2c ؛ فراخوانی زیربرنامه "Stop" بازگشت ;خروج از I2C خواندن/نوشتن زیرروال err_i2c calling the2 بازگشت "توقف" ;خروج از زیربرنامه خواندن/نوشتن I2C ;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;; starti2c فراخوانی scl_1 ;رها کردن خط scl call sda_0 ;کشیدن خط sda call pausi2c به 0 ؛ فراخوانی زیربرنامه مکث تماس scl_0 ;کشیدن خط scl call pausi2c به 0 ;مکث زیرروال توقف stopi2c تماس sda_0 ; pausi2c را به 0 فراخوانی کنید؛ زیرروال مکث را فراخوانی کنید scl_1؛ خط scl را رها کنید stpi2c_1 فراخوانی کنید pausi2c را؛ زیربرنامه مکث را فراخوانی کنید btfss scl؛ خط SCL را بررسی کنید تا ببینید آیا برده مشغول است، باید به stpi2c_1 بروید:s برچسب stpi2c_1 فراخوانی sda_1؛ آزاد کردن فراخوانی خط sda pausi2c؛ فراخوانی بازگشت زیرروال مکث؛ بازگشت از زیربرنامه sda_1 bsf STATUS,RP0؛ پیکربندی مجدد خط sda به ورودی bsf sda_io؛ bcf STATUS,RP0 ; بازگشت ;بازگشت از زیربرنامه sda_0 bcf sda ;تنظیم مجدد خط sda به خروجی bsf STATUS,RP0 . bcf sda_io ; bcf STATUS,RP0 ; بازگشت ؛ بازگشت

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#عبارتند از

CONFIG H"3F10" ؛ پیکربندی میکروکنترلر

errorlevel -302 ;پیام های خطای 302 را در لیست نشان ندهید

scetbit equ 0020h ؛ شمارش تعداد بیت های ثبت کمکی

perem equ 0021h ;رجیستر دریافت/انتقال بایت کمکی

adr_i2c equ 0022h ;ثبت نام برای ذخیره آدرس رجیستر داخلی Slave

tmp_i2c equ 0023h ;ثبت تعداد بایت های منتقل شده

slave_adr equ 0024h ;رجیستر ذخیره آدرس برده

data_i2c equ 0025h ;ثبت ذخیره اولیه داده برای انتقال

flag equ 007Fh ; ثبت پرچم

#تعریف sda PORTB,0 ;خط sda

#تعریف scl PORTB,1 ;line scl

#DEFINE sda_io TRISB,0 ;بیت کنترل جهت خط sda

#تعریف scl_io TRISB,1 ;بیت کنترل جهت خط scl

پرچم، 4 - پرچم جهت انتقال (0 - خواندن، 1 - نوشتن)

;flag,5 - پرچم انتهایی برای دریافت داده از Slave

پرچم، 6 - پرچم خطای انتقال از طریق رابط I2C (بدون تایید از طرف برده)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0000h ;اجرای برنامه را از آدرس 0000h شروع کنید

goto Start ؛ به برچسب Start بروید

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

؛ برنامه اصلی

راه اندازی movlw b"00000000" ؛ مقادیر لچ های خروجی پورت B را تنظیم کنید

movlw b"00000111"؛ مقایسه کننده ها را خاموش کنید

bsf STATUS,RP0 ؛ بانک اول را انتخاب کنید

movlw b"11111111"؛ راه اندازی خطوط ورودی/خروجی پورت B

movwf TRISB ;همه خطوط برای ورودی

bcf STATUS,RP0 ؛ بانک 0 را انتخاب کنید

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

movlw b"01111110" ؛ آدرس برده (0111111) را در رجیستر slave_adr بنویسید

movwf slave_adr ;

نمونه ای از نوشتن 2 بایت داده (اعداد 10 و 20) در ثبات های داخلی

دستگاه (slave) از آدرس 0x03 شروع می شود، آدرس برده 0111111

movlw 0x03 ؛ آدرس رجیستر داخلی Slave را در رجیستر adr_i2c بنویسید

movwf adr_i2c ;(مثلا آدرس رجیستر داخلی Slave 0x03 است)

movlw .2 ;تعداد بایت های منتقل شده به ثبات tmp_i2c را بنویسید

movwf tmp_i2c ;(مثلا 2 بایت منتقل می شود)

movlw data_i2c ;ثبت ذخیره اولیه داده را برای انتقال تنظیم کنید

movwf FSR با استفاده از آدرس دهی غیر مستقیم

movlw .10 ؛ عدد 10 را در اولین ثبات ذخیره سازی بنویسید

incf FSR,F ;افزایش FSR، آماده سازی ثبت نگهداری بعدی

movlw .20 ؛ عدد 20 را در رجیستر ذخیره سازی دوم بنویسید

Write_i2c را فراخوانی کنید؛ زیر روال نوشتن را از طریق رابط I2C فراخوانی کنید

btfss flag,6 ;بررسی خطای انتقال داده

goto dalee_1 ؛ بدون خطایی، به برچسب dalee_1 بروید

................... ؛ رسیدگی به خطا

...................

...................

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

؛ نمونه ای از خواندن 3 بایت داده از رجیسترهای داخلی یک دستگاه (slave)

با شروع از آدرس 0x05، آدرس برده قبلاً 0111111 تنظیم شده بود

movlw 0x05 ؛ آدرس رجیستر داخلی Slave را در رجیستر adr_i2c بنویسید

movwf adr_i2c ;(مثلا آدرس رجیستر داخلی Slave 0x05 است)

movlw .3 ;تعداد بایت های دریافتی را در ثبات tmp_i2c بنویسید

movwf tmp_i2c ;(مثلا 3 بایت پذیرفته می شود)

خواندن read_i2c ؛ فراخوانی زیر روال خواندن از طریق رابط I2C

btfss flag,6 ;بررسی خطای انتقال داده

goto obrabotka ؛ بدون خطایی، به برچسب obrabotka بروید

................... ؛ رسیدگی به خطا

................... ;

................... ;

obrabotka movlw data_i2c ;تنظیم رجیستر اولیه برای ذخیره داده های دریافتی

movwf FSR با استفاده از آدرس دهی غیر مستقیم

movf INDF,W اولین بایت دریافتی را در انباشته کپی می کند

................... ;پردازش اولین بایت

................... ;

incf FSR,F ;افزایش ثبت FSR

movf INDF,W دومین بایت دریافتی را در انباشته کپی می کند

................... ;پردازش بایت دوم

................... ;

incf FSR,F ;افزایش ثبت FSR

movf INDF,W سومین بایت دریافتی را در انباشته کپی می کند

................... ;پردازش بایت سوم

................... ;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

روال خواندن/نوشتن از طریق رابط I2C

write_i2c bsf flag,4 ؛ تنظیم پرچم جهت انتقال (برای نوشتن)

goto i2c_1 ;به برچسب i2c_1 بروید

read_i2c bcf flag,4 ;بازنشانی پرچم جهت انتقال (برای خواندن)

bcf flag,5 ;پرچم پایان دریافت داده را بازنشانی کنید

پرچم i2c_1 bcf، 6 ;بازنشانی پرچم خطای I2C

starti2c را فراخوانی کنید؛ زیربرنامه را "شروع" صدا کنید

bcf slave_adr,0 ; بیت R/W را برای عملیات نوشتن بازنشانی کنید

movf slave_adr,W ;آدرس برده کپی کنید

فراخوانی peredi2c ;بایت انتقال زیربرنامه فراخوانی

پرچم btfsc، 6 پرچم خطا را بررسی کنید

goto err_i2c ;error: به برچسب err_i2c بروید

movf adr_i2c، W ;آدرس های ثبت برده I2C

فراخوانی peredi2c ;بایت انتقال زیربرنامه فراخوانی

پرچم btfsc، 6 پرچم خطا را بررسی کنید

goto err_i2c ;error: به برچسب err_i2c بروید

movlw .0 ;تعداد بایت های منتقل شده را بررسی کنید

xorwf tmp_i2c,W ;

btfss STATUS,Z ;

goto i2c_3 ؛ تعداد بایت های منتقل شده برابر با 0 نیست: به برچسب i2c_3 بروید

call stopi2c ;تعداد بایت های منتقل شده 0 است: زیر روال "Stop" را فراخوانی کنید.

بازگشت ؛خروج از روال خواندن/نوشتن I2C

i2c_3 movlw data_i2c ;ثبت ذخیره اولیه داده را برای انتقال تنظیم کنید

movwf FSR با استفاده از آدرس دهی غیر مستقیم

پرچم btfss، 4 پرچم جهت انتقال را بررسی کنید

goto rd_i2c ;پرچم 0 است: به برچسب rd_i2c بروید (بخوانید)

i2c_2 incf FSR,F؛ رجیستر FSR را افزایش دهید، بایت بعدی را برای انتقال آماده کنید

movf INDF,W بایت داده را برای انتقال کپی کنید

فراخوانی peredi2c ;بایت انتقال زیربرنامه فراخوانی

پرچم btfsc، 6 پرچم خطا را بررسی کنید

goto err_i2c ;error: به برچسب err_i2c بروید

goto i2c_2 ;counter برابر 0 نیست: به برچسب i2c_2 بروید

با stopi2c تماس بگیرید؛ زیربرنامه "Stop" را فراخوانی کنید

بازگشت ؛خروج از روال خواندن/نوشتن I2C

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rd_i2c starti2c را فراخوانی کنید؛ زیرروال را "شروع" صدا کنید (راه اندازی مجدد)

bsf slave_adr,0 ؛ بیت R/W را برای عملیات خواندن تنظیم کنید

movf slave_adr,W ;آدرس برده کپی کنید

فراخوانی peredi2c ;بایت انتقال زیربرنامه فراخوانی

پرچم btfsc، 6 پرچم خطا را بررسی کنید

goto err_i2c ;error: به برچسب err_i2c بروید

goto rd_i2c_1 ; شمارنده برابر با 0 نیست: به برچسب rd_i2c_1 بروید

bsf flag,5 ;تنظیم پرچم پایانی برای دریافت داده از Slave

rd_i2c_1 incf FSR,F ;رجیستر FSR را افزایش دهید، ثبات بعدی را برای دریافت داده آماده کنید

فراخوانی priemi2c ؛ فراخوانی زیربرنامه دریافت بایت

movwf INDF ;بایت دریافتی را در رجیستر INDF ذخیره کنید

btfss flag، 5 چک کردن پرچم پایانی برای دریافت داده از برده

goto rd_i2c_2 ;پرچم برابر با 0 نیست: به برچسب rd_i2c_2 بروید

با stopi2c تماس بگیرید؛ زیربرنامه "Stop" را فراخوانی کنید

بازگشت ؛خروج از روال خواندن/نوشتن I2C

err_i2c stopi2c را فراخوانی کنید؛ زیربرنامه "Stop" را فراخوانی کنید

بازگشت ؛خروج از روال خواندن/نوشتن I2C

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

starti2c تماس scl_1 ;release line scl

فراخوانی pausi2c؛ فراخوانی زیربرنامه مکث

sda_0 را فراخوانی کنید؛ خط sda را به 0 بکشید

فراخوانی pausi2c؛ فراخوانی زیربرنامه مکث

scl_0 را فراخوانی کنید؛ خط scl را به 0 بکشید

فراخوانی pausi2c؛ فراخوانی زیربرنامه مکث

بازگشت ;بازگشت از زیر برنامه

stopi2c با sda_0 تماس بگیرید؛ خط sda را به 0 بکشید

فراخوانی pausi2c؛ فراخوانی زیربرنامه مکث

تماس scl_1 ;release line scl

stpi2c_1 فراخوانی pausi2c ;زیرروال مکث تماس

btfss scl ؛ خط SCL را بررسی کنید تا ببینید آیا Slave مشغول است یا خیر

goto stpi2c_1 ;slave busy: به برچسب stpi2c_1 بروید

با sda_1 تماس بگیرید ;خط sda را آزاد کنید

فراخوانی pausi2c؛ فراخوانی زیربرنامه مکث

بازگشت ;بازگشت از زیر برنامه

sda_1 bsf STATUS,RP0 ؛ پیکربندی مجدد خط sda به ورودی

bcf STATUS,RP0 ;

بازگشت ;بازگشت از زیر برنامه

sda_0 bcf sda؛ پیکربندی مجدد خط sda به خروجی

وضعیت bsf، RP0;

bcf STATUS,RP0 ;

بازگشت ;بازگشت از زیر برنامه

scl_1 bsf STATUS,RP0 ؛ پیکربندی مجدد خط scl به ورودی

I2C یک گذرگاه داده سریال برای ارتباطات مدار مجتمع است که با نام های IIC و I2C نیز شناخته می شود.
در یک سیستم ساده I2C می تواند یک استاد و چندین برده وجود داشته باشد.
Master دستگاهی است که انتقال داده را آغاز می کند و سیگنال های همگام سازی را تولید می کند. در این صورت هر دستگاه آدرس پذیر در رابطه با master به عنوان برده در نظر گرفته می شود. یک پیکربندی سخت افزاری معمولی در شکل زیر نشان داده شده است:

SDA - خط داده
SCL - خط همگام سازی
لطفاً توجه داشته باشید که چندین دستگاه Slave را می توان به خطوط SDA و SCL متصل کرد. SDA و SCL خطوط دو طرفه هستند و از طریق یک مقاومت کششی به منبع تغذیه متصل می شوند. در بیشتر موارد، دستگاه اصلی یک میکروکنترلر است و دستگاه‌های برده می‌توانند سنسورهای ساعت و دما بی‌درنگ باشند، به عنوان مثال، DS1307 و DS1624 از www.maxim-ic.com.

سیگنال های START و STOP

داده ها فقط پس از ایجاد شرایط شروع قابل انتقال هستند. انتقال خط SDA از HIGH به LOW در حالی که SCL HIGH است به معنای شروع است. پس از هر انتقال داده، یک شرط توقف برآورده می شود. انتقال خط SDA از LOW به HIGH با SCL در حالت HIGH به معنای STOP است.


طول داده های ارسال شده از طریق خط SDA همیشه 8 بیت است (شامل دستورات خواندن و نوشتن). هر بایت باید با یک بیت تصدیق پایان یابد. مهم ترین بیت MSB ابتدا ارسال می شود. اگر دستور نوشتن رخ دهد، بیت R/W = 0، و اگر دستور خواندن رخ دهد، بیت R/W = 1. تأیید هنگام انتقال داده ها مورد نیاز است. گیرنده باید خط داده را در حالت Low پایدار در حین دست دادن نگه دارد. گیرنده ای که داده ها به آن آدرس داده شده است، باید پس از هر بایت دریافتی، یک تایید ایجاد کند، مگر در مواردی که پیام با آدرس CBUS شروع می شود. در صورتی که برده گیرنده نتواند آدرس خود را تأیید کند، خط داده باید HIGH رها شود. سپس Master می تواند یک سیگنال STOP برای قطع انتقال داده صادر کند. میزبان می تواند در هر زمانی انتقال داده را متوقف کند.
فرض کنید یک دستگاه Slave با آدرس 1101000 داریم و master می خواهد که به عنوان گیرنده عمل کند.


در شکل مشاهده می کنید که Slave همیشه شرایط شروع را ایجاد می کند و یک بیت R/W برابر با 0 را برای Master ارسال می کند.


شکل هم همین را نشان می دهد، فقط بیت R/W 1 است. Slave می تواند پس از تایید از master شروع به انتقال داده کند، همچنین می تواند با ایجاد یک شرط STOP، دریافت داده را متوقف کند.
مثال.
این مثال نحوه پیکربندی خواندن از سنسور دمای DS1624 را نشان می دهد.
نمودار اتصال DS1624.


کد برنامه در زیر ارائه شده است.

$regfile = "m88def.dat" تراشه ای که استفاده می کنید را تعریف کنید
کریستال دلار = 8000000 ؛ سرعت را تعریف کنید
$baud = 19200 نرخ UART BAUD را تعریف کنید
;رم را برای ذخیره دما اعلام کنید
کم نور I2ctemp به عنوان بایت ذخیره سازی برای دما
پین هایی را که می خواهیم برای گذرگاه I²C استفاده کنیم، پیکربندی کنید
پیکربندی Scl = Portd. 1 آیا ساعت سریال SCL است
پیکربندی Sda = Portd. 3 آیا داده های سریال SDA است
؛اعلام ثابت ها – آدرس های تراشه I2C
Const Ds1624wr = &B10010000 نوشتن سنسور DS1624
Const Ds1624rd = &B10010001 سنسور DS1624 خوانده شده
این بخش DS1624 را مقداردهی اولیه می کند
I2cstart ;شرط شروع ارسال می کند
I2cwbyte Ds1624wr ؛ آدرس را می فرستد
بایت با r/w 0
دسترسی به ثبت CONFIG (بایت آدرس &HAC)
I2cwbyte&HAC
;تنظیم تبدیل پیوسته (بایت فرمان&H00)
I2cwbyte&H00
I2cstop ;شرط توقف ارسال می کند
25 منتظر ؛ پس از توقف باید مدتی صبر کنیم
I2cstart
I2cwbyte Ds1624wr
;شروع تبدیل (بایت فرمان&HEE)
I2cwbyte&HEE
I2cstop
25 منتظر
؛ پایان مقداردهی اولیه
چاپ ؛ خط خالی را چاپ کنید
انجام دادن
؛ دمای فعلی را دریافت کنید
I2cstart
I2cwbyte Ds1624wr
I2cwbyte&HAA دمای خواندن (بایت فرمان&HAA)
I2cstart
I2cwbyte Ds1624rd ؛ تراشه محتویات ثبت را ارائه می دهد
؛ دما به صورت 12، 5 ذخیره می شود اما ابتدا، 5
I2crbyte I2ctemp
بنابراین شما باید دو بار بخوانید... ابتدا 5
I2crbyte I2ctemp، Nack
و سپس 12... ما 5 را ذخیره نمی کنیم
I2cstop
؛ به همین دلیل است که ما دو بار خواندیم.
;اگر آخرین بایت خوانده شود NACK می دهیم
؛ در نهایت چاپ می کنیم
چاپ "دما: " ; Str(i2ctemp) ; "درجه" ؛ Chr(13);
25 منتظر
حلقه
پایان

توجه داشته باشید که دستورات استفاده شده در این مثال را می توان در مستندات DS1624 یافت.
این برنامه در Bascom AVR IDE نوشته شده است که در آن می توانید برنامه هایی را برای میکروکنترلرها به زبان سطح بالا Basic توسعه دهید. Bascom AVR دارای یک کامپایلر داخلی است که برنامه های نوشته شده در Basic را به کد هگزا دسیمال تبدیل می کند که به نوبه خود می تواند در میکروکنترلر برنامه ریزی (فلش) شود.
مروری کوتاه بر دستورات
پیکربندی Sda = Portx. ایکس
پورت پین را برای استفاده به عنوان داده سریال SDA پیکربندی می کند.
پیکربندی Scl = Portx. ایکس
پورت پین را برای استفاده به عنوان خط SCL پیکربندی می کند.
I2cstart
شرط START را ارسال می کند.
I2cstop
یک شرط STOP ارسال می کند.
I2cwbyte
یک بایت در I2C می نویسد.
I2crbyte
یک بایت از I2C را می خواند.
I2csend
تعداد بایت ها، I2C را می نویسد.
I2creceive
تعداد بایت ها را از I2C می خواند.

تمرین
در زیر نحوه پیاده سازی I2C آورده شده است. مدار از کنترلر Mega88 به عنوان اصلی استفاده می کند.

در لوازم خانگی، تجهیزات مخابراتی و الکترونیک صنعتی، راه حل های مشابه اغلب در محصولات به ظاهر نامرتبط یافت می شود. به عنوان مثال، تقریباً هر سیستمی شامل موارد زیر است:

  • برخی از واحدهای کنترل "هوشمند"، معمولا یک میکرو کامپیوتر تک تراشه.
  • اجزای هدف عمومی مانند بافرهای LCD، پورت های I/O، RAM، EEPROM یا مبدل های داده.
  • اجزای خاص مانند تنظیم دیجیتال و مدارهای پردازش سیگنال برای سیستم های رادیویی و ویدئویی، یا مولدهای صدا برای تلفن.

برای استفاده از این راه حل های رایج به نفع طراحان و سازندگان، و همچنین برای افزایش کارایی سخت افزار و ساده سازی طراحی مدار، فیلیپس یک گذرگاه دو سیمه ساده، دو طرفه برای کنترل کارآمد بین آی سی توسعه داده است. گذرگاه InterIC یا گذرگاه IIC (I 2 C) نامیده می شود. در حال حاضر، مجموعه محصولات فیلیپس شامل بیش از 150 دستگاه CMOS و دوقطبی I 2 C-سازگار است که از نظر عملکردی برای کار در هر سه دسته تجهیزات الکترونیکی فوق طراحی شده اند. همه دستگاه های سازگار با I 2 دارای یک رابط داخلی هستند که به آنها اجازه می دهد از طریق گذرگاه I 2 C با یکدیگر ارتباط برقرار کنند.

در اینجا برخی از مزایای اتوبوس I 2 C آورده شده است:

  • فقط دو خط مورد نیاز است - یک خط داده (SDA) و یک خط ساعت (SCL). در هر زمان معین، یک رابطه ارباب/برده ساده وجود دارد: استادها می‌توانند به‌عنوان ارباب فرستنده و ارباب گیرنده عمل کنند.
  • این گذرگاه امکان تشخیص برخورد و داوری را فراهم می کند تا از خراب شدن داده ها در شرایطی که دو یا چند استاد به طور همزمان شروع به انتقال داده می کنند، انتقال داده های سریالی 8 بیتی تا 100 کیلوبیت بر ثانیه و حداکثر 400 کیلوبیت بر ثانیه را فراهم می کند /s در حالت "سریع".
  • یک فیلتر روی تراشه برای اطمینان از یکپارچگی داده ها، اسپک ها را سرکوب می کند.
  • حداکثر تعداد مجاز تراشه های متصل به یک باس با حداکثر ظرفیت باس 400 pF محدود می شود.

برنج. شکل 1 دو نمونه کاربردی از گذرگاه I 2 C را نشان می دهد.

1.1 مزایای برای طراح

آی سی های سازگار I 2 C روند توسعه را از نمودار عملکردی به نمونه اولیه سرعت می بخشد. علاوه بر این، از آنجایی که چنین تراشه‌هایی مستقیماً بدون هیچ مدار اضافی به گذرگاه متصل می‌شوند، امکان اصلاح و ارتقای سیستم نمونه اولیه با اتصال و جدا کردن دستگاه‌ها از گذرگاه وجود دارد.

در اینجا برخی از مزایای ریز مدارهای سازگار با I 2 C وجود دارد که طراحان را نگران می کند:

  • بلوک های روی نمودار عملکردی مربوط به ریزمدارها هستند، انتقال از نمودار عملکردی به نمودار مدار به سرعت اتفاق می افتد.
  • نیازی به توسعه رابط های اتوبوس نیست، زیرا اتوبوس قبلاً در تراشه ها یکپارچه شده است.
  • آدرس دهی یکپارچه دستگاه و پروتکل ارتباطی به سیستم اجازه می دهد تا کاملاً نرم افزاری تعریف شود.
  • انواع یکسان تراشه ها اغلب می توانند در برنامه های مختلف استفاده شوند.
  • زمان توسعه کاهش می یابد زیرا طراحان به سرعت با بلوک های عملکردی پرکاربرد و آی سی های مرتبط آشنا می شوند.
  • تراشه‌ها را می‌توان بدون تأثیر بر سایر تراشه‌های متصل به اتوبوس، اضافه یا از سیستم حذف کرد.
  • تشخیص آسان خطا و اشکال زدایی؛ اختلالات عملیاتی را می توان بلافاصله کنترل کرد.
  • زمان توسعه نرم افزار را می توان با استفاده از کتابخانه ای از ماژول های نرم افزاری قابل استفاده مجدد کاهش داد.

علاوه بر این مزایا، آی سی های سازگار با CMOS I2C راه حل های ویژه ای را برای طراحان ارائه می دهند که به ویژه برای تجهیزات قابل حمل و سیستم های باتری دار جذاب هستند:

  • بسیار کم مصرف.
  • مقاومت بالا در برابر تداخل.
  • طیف گسترده ای از ولتاژ تغذیه.
  • محدوده دمای عملیاتی گسترده

شکل 1. دو نمونه از کاربردهای I 2 C
(الف) تلویزیون بسیار یکپارچه
(ب) ایستگاه پایه تلفن رادیویی DECT

  1. میکروکنترلر
  2. سینت سایزر PLL
  3. فلش مموری
  4. رسیور رنگی
  5. رسیور صوتی استریو
  6. بهبود سیگنال تصویر
  7. پردازنده صوتی HI-FI
  8. پردازنده ویدیویی
  9. متن تک تراشه
  10. صفحه نمایش
  11. ژنراتور DTMF
  12. رابط خط تلفن
  13. کدک ADPCM
  14. دسته کنترلر
  15. میکروکنترلر

SDA - خط داده، SCL - خط ساعت

1.2 مزایای برای تکنسین (تولید کننده)

آی سی های سازگار با I 2 نه تنها به طراحان کمک می کنند، بلکه طیف گسترده ای از مزایای را برای مهندسان پردازش فراهم می کنند زیرا:

  • یک گذرگاه سریال ساده دو سیمه I 2 C اتصالات بین تراشه ها را به حداقل می رساند. آی سی ها پین های کمتری دارند و ردپای کمتری مورد نیاز است، در نتیجه بردهای مدار چاپی ارزان تر و سایز کوچکتر می شوند.
  • پروتکل کاملاً یکپارچه I 2 C نیاز به رمزگشای آدرس و سایر منطق ریز دانه خارجی را از بین می برد.
  • توانایی داشتن چندین "مستر" در گذرگاه I 2 C امکان تست و راه اندازی سریع تر تجهیزات را با اتصال گذرگاه به یک کامپیوتر خط مونتاژ فراهم می کند.
  • در دسترس بودن آی سی های سازگار با I 2 C در بسته های SO و VSO، و همچنین بسته های DIL، نیاز به اندازه را حتی بیشتر کاهش می دهد.

اینها تنها بخشی از مزایا هستند. علاوه بر این، آی سی های سازگار با I 2 C انعطاف پذیری سیستم را افزایش می دهند و به طراحی ساده انواع سخت افزار و ارتقاء آسان برای به روز نگه داشتن طرح ها اجازه می دهند. به این ترتیب می توان یک خانواده کامل از تجهیزات را بر اساس مدل پایه توسعه داد. ارتقاء تجهیزات یا گسترش عملکردهای آن (به عنوان مثال، حافظه اضافی، کنترل از راه دور و غیره) می تواند به سادگی با اتصال تراشه مربوطه به اتوبوس انجام شود. اگر یک رام بزرگتر مورد نیاز است، تنها موضوع انتخاب یک میکروکنترلر برای یک رام بزرگ از محدوده ما است. از آنجایی که تراشه‌های جدید می‌توانند جایگزین تراشه‌های قدیمی شوند، اضافه کردن ویژگی‌های جدید به سخت‌افزار یا افزایش عملکرد به سادگی با جدا کردن تراشه قدیمی و وصل کردن یک تراشه جدید به اتوبوس آسان است.

1.3 ACCESS.bus

ماهیت دو سیمه گذرگاه و قابلیت آدرس دهی در نرم افزار، گذرگاه I 2 C را به یک پلت فرم ایده آل برای ACCESS.bus تبدیل می کند (شکل 2). این یک جایگزین ارزان‌تر برای رابط RS-232C برای اتصال لوازم جانبی به رایانه با استفاده از یک اتصال 4 پین ساده است. (به بخش 19.0 مراجعه کنید)

شکل 2. ACCESS.bus - جایگزینی ارزان برای رابط RS-232C

2.0 مقدمه ای بر مشخصات گذرگاه I 2 C

برای برنامه های کنترل 8 بیتی با استفاده از میکروکنترلرها، معیارهای طراحی خاصی ممکن است ایجاد شود:

  • یک سیستم کامل معمولاً از حداقل یک میکروکنترلر و سایر تجهیزات جانبی مانند حافظه و پورت های I/O تشکیل شده است.
  • هزینه اتصال دستگاه های مختلف در یک سیستم باید به حداقل برسد.
  • سیستمی که عملکردهای کنترلی را انجام می دهد نیازی به انتقال داده با سرعت بالا ندارد.
  • کارایی کلی به دستگاه های انتخاب شده و ماهیت باس اتصال بستگی دارد.

برای طراحی سیستمی که این معیارها را برآورده کند، یک گذرگاه سریال مورد نیاز است. اگرچه باس های سریال پهنای باند گذرگاه های موازی را ندارند، اما به اتصالات کمتر و پین های تراشه کمتری نیاز دارند. با این حال، اتوبوس نه تنها از سیم های اتصال تشکیل شده است، بلکه شامل تمام فرمت ها و رویه های ارتباطی درون سیستم نیز می شود.

دستگاه هایی که از طریق گذرگاه ارتباط برقرار می کنند باید نوعی پروتکل داشته باشند که از تمام احتمالات برخورد، از دست دادن داده ها و مسدود شدن اطلاعات جلوگیری کند. دستگاه های سریع باید بتوانند با دستگاه های کند ارتباط برقرار کنند. سیستم نباید به دستگاه های متصل به آن وابسته باشد، در غیر این صورت اصلاحات و بهبودها غیرممکن خواهد شد. همچنین باید رویه‌ای ایجاد شود تا مشخص شود کدام دستگاه و چه زمانی اتوبوس را کنترل می‌کند. علاوه بر این، اگر دستگاه های مختلف با سرعت های ساعت متفاوت به اتوبوس متصل هستند، منبع ساعت اتوبوس باید تعریف شود. اتوبوس I 2 C همه این معیارها را برآورده می کند.

مفهوم اتوبوس 3.0 I 2 C

گذرگاه I2C از هر فناوری ساخت تراشه (NMOS، CMOS، دوقطبی) پشتیبانی می کند. برای انتقال اطلاعات از دو خط داده (SDA) و همگام سازی (SCL) استفاده می شود. هر دستگاه با یک آدرس منحصر به فرد - اعم از میکروکنترلر، بافر LCD، حافظه یا رابط صفحه کلید - شناسایی می شود و بسته به هدف دستگاه می تواند به عنوان فرستنده یا گیرنده عمل کند. به طور معمول، بافر LCD فقط یک گیرنده است و حافظه هم می تواند داده ها را دریافت و هم ارسال کند. علاوه بر این، هنگام انتقال داده ها، دستگاه ها را می توان به عنوان Master و Slave طبقه بندی کرد (جدول 1 را ببینید). Master دستگاهی است که انتقال داده را آغاز می کند و سیگنال های همگام سازی را تولید می کند. در این صورت هر دستگاه آدرس پذیر در رابطه با master به عنوان برده در نظر گرفته می شود.

اصطلاح (انگلیسی) اصطلاح (روس) شرح
فرستنده فرستنده دستگاه ارسال داده به اتوبوس
گیرنده گیرنده دریافت دستگاه از اتوبوس
استاد منتهی شدن انتقال داده را شروع می کند، پالس های ساعت تولید می کند، انتقال داده را پایان می دهد
برده برده دستگاه خطاب شده توسط استاد
چند استاد - چندین استاد می توانند همزمان بدون ایجاد اختلال در اطلاعات ارسال شده، اتوبوس را ضبط کنند
داوری داوری رویه ارائه Multi-Master
هماهنگ سازی همگام سازی رویه همگام سازی دو دستگاه

شکل 3. مثال I 2 پیکربندی باس C با دو میکروکنترلر

  1. میکروکنترلر A
  2. آرایه
  3. درایور LCD
  4. رم استاتیک یا PROM
  5. میکروکنترلر B

گذرگاه I 2 C به چندین استاد اجازه می دهد. این بدان معنی است که بیش از یک دستگاه با قابلیت کنترل اتوبوس می تواند به آن متصل شود. از آنجایی که میکروکنترلرها معمولاً به عنوان Master عمل می کنند، اجازه دهید به مثالی از ارسال داده بین دو میکروکنترلر متصل به یک اتوبوس نگاه کنیم (شکل 3). یک مثال روابط فرستنده-گیرنده و master-slave را نشان می دهد که در گذرگاه I 2 C وجود دارد. انتقال داده ها به صورت زیر انجام می شود:

  1. اجازه دهید میکروکنترلر A بخواهد اطلاعاتی را به میکروکنترلر B ارسال کند:
    • میکروکنترلر A (فرستنده اصلی) داده ها را به میکروکنترلر B (گیرنده-گیرنده) ارسال می کند.
  2. اجازه دهید میکروکنترلر A بخواهد اطلاعاتی را از میکروکنترلر B دریافت کند:
    • میکروکنترلر A (master) به میکروکنترلر B (slave) می‌پردازد.
    • میکروکنترلر A (مستر گیرنده) داده ها را از میکروکنترلر B (فرستنده فرستنده) دریافت می کند.
    • میکروکنترلر A ارسال را به پایان می رساند

در هر دو مورد، مستر (میکروکنترلر A) یک پالس ساعت ایجاد می کند و انتقال را کامل می کند.

قابلیت اتصال بیش از یک میکروکنترلر به یک گذرگاه به این معنی است که بیش از یک استاد می توانند همزمان اقدام به شروع انتقال کنند. برای از بین بردن هرج و مرج که ممکن است در این مورد ایجاد شود، یک روش داوری ایجاد شده است. این روش بر اساس این واقعیت است که همه دستگاه های I 2 C با استفاده از قانون سیم کشی و برای اطلاعات بیشتر در مورد داوری به بخش 7.0 مراجعه کنید.

تولید سیگنال ساعت همیشه بر عهده استاد است. هر Master سیگنال ساعت مخصوص به خود را هنگام ارسال داده از طریق اتوبوس تولید می کند. سیگنال ساعت را تنها در صورتی می توان تغییر داد که توسط یک برده آهسته (با پایین نگه داشتن خط)، یا در صورت وقوع برخورد توسط یک استاد دیگر، "کشیده" شود.

4.0 پارامترهای عمومی

هر دو SDA و SCL خطوط دو طرفه هستند که از طریق یک مقاومت کششی به منبع تغذیه مثبت متصل می شوند (شکل 4 را ببینید). وقتی اتوبوس آزاد است، هر دو خط در موقعیت HIGH هستند. مراحل خروجی دستگاه های متصل به گذرگاه باید دارای یک تخلیه باز یا جمع کننده باز باشد تا عملکرد AND را فراهم کند. 400 کیلوبیت بر ثانیه در حالت "سریع". تعداد دستگاه های متصل به اتوبوس با یک پارامتر واحد تعیین می شود - ظرفیت خط (تا 400 pF).

شکل 4. اتصال دستگاه های I 2 C به اتوبوس

  1. SDA (خط داده)
  2. SCL (خط همگام سازی)
  3. همگام سازی خروجی
  4. همگام سازی ورودی
  5. خروجی داده
  6. ورود اطلاعات
  7. مقاومت های کششی
  8. ولتاژ تغذیه

ارسال 5.0 بیت

به دلیل فناوری‌های مختلف تراشه (CMOS، LMOS، دوقطبی) که می‌توانند به گذرگاه متصل شوند، سطوح منطقی صفر ("LOW") و منطق یک ("HIGH") ثابت نیستند و به سطح Vdd مربوطه بستگی دارند (نگاه کنید به) بخش 15.0 برای پارامترهای الکتریکی). برای هر بیت ارسالی یک پالس ساعت ایجاد می شود.

5.1 اعتبار داده ها

داده های خط SDA باید در طول دوره ساعت HIGH پایدار باشد. حالت HIGH یا LOW خط داده تنها در صورتی باید تغییر کند که خط ساعت در حالت LOW باشد (شکل 5 را ببینید).

شکل 5. ارسال بیت در گذرگاه I 2 C

  1. خط داده در حالت پایدار است، داده ها تعریف شده است
  2. تغییرات داده مجاز است

5.2 سیگنال های START و STOP

موقعیت های خاص در اتوبوس با سیگنال های START و STOP مشخص می شوند (شکل 6 را ببینید).

انتقال خط SDA از HIGH به LOW در حالی که SCL HIGH است به معنای شروع است.

انتقال خط SDA از LOW به HIGH با SCL در حالت HIGH به معنای STOP است.

سیگنال های START و STOP همیشه توسط Master تولید می شوند. اتوبوس پس از سیگنال START مشغول در نظر گرفته می شود. اتوبوس پس از مدت زمان مشخصی پس از سیگنال STOP رایگان در نظر گرفته می شود.

اگر مدارهای لازم در آنها تعبیه شده باشد، تعریف سیگنال های START و STOP توسط دستگاه های متصل به اتوبوس بسیار آسان است. با این حال، میکروکنترلرهای بدون چنین مدارهایی باید خط SDA را حداقل دو بار در طول دوره ساعت بخوانند تا انتقال حالت را تشخیص دهند.

شکل 6. سیگنال های START و STOP

  1. سیگنال شروع
  2. سیگنال STOP

فرمت 6.1 بایت

هر بایت ارسال شده از طریق خط SDA باید شامل 8 بیت باشد. تعداد بایت های منتقل شده در هر جلسه ارتباط نامحدود است. هر بایت باید با یک بیت تصدیق پایان یابد. داده ها با مهم ترین بیت شروع می شود (شکل 7 را ببینید). اگر گیرنده نتواند بایت کامل دیگری را بپذیرد تا زمانی که عملکرد دیگری را انجام دهد (مانند سرویس یک وقفه داخلی)، می تواند خط SCL را LOW نگه دارد و فرستنده را در حالت خواب قرار دهد. انتقال داده زمانی ادامه می یابد که گیرنده برای بایت بعدی آماده شود و خط SCL را آزاد کند.

در برخی موارد، لازم است از یک فرمت داده متفاوت (مثلا CBUS) استفاده شود. پیامی که با چنین آدرسی مخابره می شود ممکن است با صدور یک سیگنال STOP خاتمه یابد، حتی اگر این اتفاق در حین ارسال بایت رخ دهد. در این مورد، هیچ تاییدیه ای ایجاد نمی شود (به بخش 9.1.3 مراجعه کنید).

شکل 7. انتقال داده در گذرگاه I 2 C

  1. سیگنال شروع
  2. بایت بالا
  3. سیگنال تایید از گیرنده
  4. دریافت بایت تکمیل شد. وقفه در داخل گیرنده
  5. خط ساعت پایین نگه داشته می شود در حالی که وقفه در حال سرویس است.
  6. سیگنال تایید از گیرنده
  7. سیگنال STOP

6.2 تایید

تأیید هنگام انتقال داده ها مورد نیاز است. پالس هماهنگ سازی مربوطه توسط استاد تولید می شود. فرستنده خط SDA (HIGH) را در طول ساعت تصدیق آزاد می کند. گیرنده باید خط SDA را در طول حالت HIGH ساعت تصدیق در حالت LOW پایدار نگه دارد (شکل 8). البته زمان راه اندازی و نگهداری نیز باید در نظر گرفته شود (پارامترهای الکتریکی و زمان بندی).

به طور معمول، گیرنده آدرس‌دهی شده باید پس از دریافت هر بایت، یک تأیید ایجاد کند، مگر اینکه پیام با یک آدرس CBUS شروع شود (به سازگاری CBUS مراجعه کنید).

در صورتی که برده گیرنده نتواند آدرس خود را تأیید کند (به عنوان مثال، زمانی که در حال حاضر برخی از عملکردهای بلادرنگ را انجام می دهد)، خط داده باید HIGH رها شود. سپس Master می تواند یک سیگنال STOP برای قطع انتقال داده صادر کند.

اگر گیرنده slave آدرس خود را تأیید کرده باشد، اما پس از مدتی دیگر نمی تواند داده را دریافت کند، Master نیز باید ارسال را لغو کند. برای انجام این کار، Slave بایت بعدی را تأیید نمی کند، خط داده را در حالت HIGH رها می کند و master یک سیگنال STOP تولید می کند.

اگر یک گیرنده اصلی در انتقال دخالت داشته باشد، باید پایان انتقال به فرستنده برده را با عدم تایید آخرین بایت نشان دهد. برده فرستنده باید خط داده را آزاد کند تا به Master اجازه دهد سیگنال STOP صادر کند یا سیگنال START را تکرار کند.

شکل 8. تایید

  1. داده های ارسال شده توسط فرستنده
  2. داده های ارسال شده توسط گیرنده
  3. SCL از میزبان
  4. سیگنال شروع
  5. تایید پالس همگام سازی

7.1 همگام سازی

هنگام ارسال پیام از طریق گذرگاه I 2 C، هر Master سیگنال ساعت خود را در خط SCL تولید می کند. داده ها فقط در حالت ساعت HIGH معتبر هستند.

همگام سازی با استفاده از اتصال AND به خط SCL انجام می شود، این بدان معناست که چون خط SCL به دلیل پایین رفتن ساعت یک دستگاه، LOW می شود، ساعت دستگاه دیگر نیز پایین می رود.

این وضعیت خط SCL تا زمانی که حالت ساعت داخلی یکی از دستگاه ها HIGH باشد حفظ می شود (شکل 9). با این حال، اگر سیگنال ساعت دستگاه دیگر همچنان LOW باشد، انتقال سیگنال ساعت کم به بالا ممکن است باعث انتقال مشابه در خط SCL نشود. بنابراین، خط SCL برای طولانی ترین دوره LOW دو سیگنال ساعت، LOW خواهد بود. دستگاه‌هایی با دوره LOW کوتاه‌تر تا پایان دوره طولانی وارد حالت خواب می‌شوند.

هنگامی که تمام دستگاه های فعال دوره ساعت LOW خود را به پایان رساندند، خط SCL بالا خواهد رفت. همه دستگاه‌ها در دوره ساعت خود شروع به بالا رفتن خواهند کرد. اولین دستگاهی که این دوره تمام شود، خط SCL را دوباره LOW تنظیم می کند.

بنابراین، دوره LOW خط ساعت SCL توسط طولانی ترین دوره ساعت در بین تمام دستگاه های درگیر تعیین می شود، و دوره HIGH با کوتاه ترین دوره ساعت دستگاه ها تعیین می شود.

شکل 9. همگام سازی در طول داوری

  1. حالت انتظار
  2. شروع دوره ساعت HIGH

7.2 داوری

استاد تنها در صورتی می تواند ارسال داده را آغاز کند که گذرگاه رایگان باشد. دو یا چند استاد می توانند سیگنال START را در طول حداقل زمان نگه داشتن (Thd;sta) تولید کنند که منجر به یک سیگنال START خاص در اتوبوس می شود.

داوری در گذرگاه SDA در دوره هایی که گذرگاه SCL در حالت HIGH قرار دارد اتفاق می افتد. اگر یک Master خط داده LOW را بفرستد در حالی که دیگری درایو HIGH، دومی از خط جدا می شود زیرا حالت SDL (LOW) با حالت HIGH خط داده داخلی آن مطابقت ندارد.

داوری ممکن است برای چند بیت ادامه یابد. از آنجایی که ابتدا آدرس و سپس داده ها ارسال می شود (به بخش آدرس دهی 7 بیتی و آدرس دهی 10 بیتی مراجعه کنید)، داوری می تواند تا پایان آدرس ادامه یابد، و اگر Masters همان دستگاه را آدرس دهد، داده ها نیز مشارکت خواهند کرد. در داوری به دلیل این طرح داوری برخورد، هیچ داده ای در صورت برخورد از بین نمی رود.

استادی که داوری را از دست می دهد، مجاز است پالس های ساعت را در گذرگاه SCL تا پایان بایتی که در طی آن دسترسی از بین رفته است، صادر کند.

اگر دستگاه Master دارای توابع Slave داخلی نیز باشد و داوری را در مرحله انتقال آدرس از دست بدهد، باید فوراً به حالت Slave تبدیل شود، زیرا استاد برنده داوری می تواند به آن رسیدگی کند.

شکل 10 روش داوری دو رهبر را نشان می دهد. البته مجریان بیشتری می توانند در این روند شرکت کنند. لحظه ای که تفاوت بین سطح خط داده داخلی و SDA تشخیص داده می شود، خروجی اولین Master بالا می رود، بنابراین بر انتقال داده های اصلی برنده تأثیر نمی گذارد.

با توجه به اینکه داوری فقط به آدرس و داده های ارسال شده توسط استادان رقیب بستگی دارد، هیچ استاد مرکزی و دسترسی اولویتی به اتوبوس وجود ندارد.

هنگامی که یک سیگنال START یا سیگنال STOP مکرر در طول روند داوری به اتوبوس منتقل می شود، باید توجه ویژه ای شود. اگر احتمال وقوع چنین وضعیتی وجود دارد، مسترها باید یک سیگنال START مکرر یا یک سیگنال STOP را در همان موقعیت های فریم ارسال کنند. به عبارت دیگر، داوری بین:

  • سیگنال شروع مکرر و بیت داده
  • سیگنال STOP و بیت داده
  • سیگنال شروع مکرر و سیگنال STOP

شکل 10. داوری بین دو رهبر

* فرستنده 1 داوری را از دست می دهد - خط داده آن با SDA مطابقت ندارد

7.3 استفاده از مکانیسم همگام سازی به عنوان رویه کنترل ارتباط

علاوه بر استفاده از آن در رویه داوری، مکانیسم همگام سازی می تواند توسط گیرنده ها به عنوان وسیله ای برای کنترل انتقال داده در سطوح بایت و بیت استفاده شود.

در سطح بایت، اگر دستگاهی بتواند بایت های داده را با سرعت بالایی دریافت کند، اما به زمان معینی برای ذخیره بایت دریافتی یا آماده شدن برای دریافت بایت بعدی نیاز دارد، پس از دریافت و تایید، می تواند خط SCL را LOW نگه دارد. بایت، بنابراین فرستنده را در حالت خواب قرار می دهد.

در سطح بیت، دستگاهی مانند میکروکنترلر بدون مدارهای سخت افزاری داخلی I2C یا با مدارهای محدود می تواند فرکانس ساعت را با افزایش دوره LOW آن کاهش دهد. به این ترتیب سرعت انتقال هر استادی با سرعت دستگاه کند تطبیق داده می شود.

شکل 11. ارسال داده ها

  1. سیگنال شروع
  2. نشانی
  3. بیت جهت (R/W^)
  4. تائیدیه
  5. داده ها
  6. سیگنال STOP

فرمت های آدرس 8.0 7 بیتی

انتقال داده ها در قالب نشان داده شده در شکل انجام می شود. 11. پس از سیگنال START، آدرس برده ارسال می شود. بعد از 7 بیت آدرس، بیت جهت داده (R/W^)، "صفر" به معنای ارسال (نوشتن) و "یک" به معنای دریافت (خواندن) می آید. انتقال داده همیشه با یک سیگنال STOP تولید شده توسط Master به پایان می رسد. با این حال، اگر استاد بخواهد بیشتر در اتوبوس بماند، باید یک سیگنال استارت دوم و سپس آدرس دستگاه بعدی را صادر کند. با این فرمت ارسال، ترکیب های مختلف خواندن/نوشتن امکان پذیر است.

فرمت های ممکن:

  • فرستنده اصلی به گیرنده برده ارسال می کند. جهت انتقال داده ها تغییر نمی کند
  • Master بلافاصله پس از ارسال اولین بایت، Slave را می خواند (شکل 13). در لحظه تایید اول، فرستنده اصلی به گیرنده اصلی و گیرنده برده تبدیل به فرستنده برده می شود.
  • با این وجود، تصدیق توسط برده ایجاد می شود. سیگنال STOP توسط Master تولید می شود
  • فرمت ترکیبی (شکل 14). هنگام تغییر جهت انتقال داده، سیگنال START و آدرس برده تکرار می شوند، اما بیت جهت داده معکوس می شود. اگر گیرنده اصلی یک سیگنال START مکرر ارسال کند، ابتدا باید یک سیگنال غیر تایید ارسال کند.

شکل 12. فرستنده اصلی گیرنده برده را با یک آدرس 7 بیتی آدرس می دهد. جهت ارسال تغییر نمی کند

  1. از ارباب تا برده
  2. از پیرو تا رهبر
  3. آدرس برده
  4. بیت جهت
  5. داده ها
  6. داده ارسال شده (n بایت + تایید)
  7. الف - تأیید
  8. عدم تایید
  9. سیگنال شروع
  10. سیگنال STOP

شکل 13. Master بلافاصله بعد از اولین بایت از Slave می خواند

شکل 14. فرمت ترکیبی

  1. آدرس برده
  2. بخوان یا بنویس
  3. n بایت + تصدیق
  4. سیگنال راه اندازی مجدد
  5. جهت ارسال ممکن است در این مرحله تغییر کند
  6. جهت ارسال داده ها و بیت های تایید به بیت های جهت بستگی دارد

یادداشت:

  1. برای مثال می توان از فرمت های ترکیبی برای مدیریت حافظه سریال استفاده کرد. در طول اولین بایت داده، یک آدرس حافظه را می توان منتقل کرد که به یک لچ داخلی نوشته می شود. پس از تکرار سیگنال START و آدرس برده، داده ها از حافظه بازیابی می شوند.
  2. تمام تصمیمات در مورد افزایش یا کاهش خودکار آدرسی که قبلاً به آن دسترسی داشتید توسط طراح دستگاه گرفته می شود.
  3. هر بایت با یک بیت تصدیق پایان می یابد که در شکل ها A یا A^ مشخص شده است.
  4. I 2 دستگاه های سازگار با C باید هنگام دریافت سیگنال START یا START مجدد، منطق اتوبوس را تنظیم کرده و برای دریافت آدرس آماده شوند.

آدرس دهی 7 بیتی 9.0

(به آدرس دهی 10 بیتی مراجعه کنید).

رویه آدرس دهی در گذرگاه I2C به این صورت است که اولین بایت بعد از سیگنال START مشخص می کند کدام slave توسط master برای کار کردن انتخاب می شود. استثنا آدرس "تماس عمومی" است که به تمام دستگاه های موجود در اتوبوس آدرس می دهد. هنگامی که از این آدرس استفاده می شود، همه دستگاه ها در تئوری باید یک سیگنال تایید ارسال کنند. با این حال، دستگاه‌ها می‌توانند این آدرس را نادیده بگیرند. بایت دوم ارسال همه تماس، اقدامی را که دستگاه ها باید انجام دهند را مشخص می کند. این روش با جزئیات بیشتر در بخش هدف بیت های اولین بایت توضیح داده شده است.

9.1 تخصیص بیت اولین بایت

هفت بیت اول بایت اول آدرس برده را تشکیل می دهد (شکل 15 را ببینید). هشتمین بیت، کم اهمیت ترین، جهت انتقال داده را تعیین می کند. "صفر" به این معنی است که Master اطلاعات را برای Slave انتخاب شده می نویسد. "یک" به این معنی است که master اطلاعاتی را از Slave خواهد خواند.

شکل 15. اولین بایت بعد از سیگنال START

  1. رتبه ارشد
  2. رتبه نوجوانان
  3. آدرس برده

پس از ارسال آدرس، هر دستگاه در سیستم هفت بیت اول پس از سیگنال START را با آدرس خود مقایسه می کند. اگر مطابقت وجود داشته باشد، دستگاه خود را به عنوان گیرنده برده یا فرستنده فرستنده بسته به بیت جهت انتخاب می کند.

آدرس برده می تواند از یک قسمت ثابت و قابل برنامه ریزی تشکیل شده باشد. این احتمال وجود دارد که چندین دستگاه مشابه در سیستم وجود داشته باشد، بنابراین، با استفاده از قسمت قابل برنامه ریزی آدرس، می توان حداکثر تعداد ممکن از این دستگاه ها را به اتوبوس متصل کرد. تعداد بیت های قابل برنامه ریزی در آدرس به تعداد پایه های آزاد ریز مدار بستگی دارد. به عنوان مثال، اگر دستگاهی دارای 4 بیت آدرس ثابت و 3 بیت قابل برنامه ریزی باشد، در مجموع می توان 8 دستگاه یکسان را به اتوبوس متصل کرد.

کمیته I 2 C تخصیص آدرس های I 2 C را هماهنگ می کند. اطلاعات بیشتر را می توان از نمایندگان فیلیپس که روی جلد فهرست شده اند دریافت کرد. دو گروه از هشت آدرس (0000XXX و 1111XXX) برای اهداف مشخص شده در جدول 2 رزرو شده اند. ترکیب بیت آدرس 11110XX برای آدرس دهی 10 بیتی رزرو شده است (به بخش 13.0 مراجعه کنید).

یادداشت:

  1. دستگاه ها از تأیید دریافت بایت START منع می شوند.
  2. آدرس CBUS برای اجازه استفاده از دستگاه های سازگار با CBUS و I 2 C در یک سیستم رزرو شده است. دستگاه های سازگار I 2 C از پاسخگویی به دریافت این آدرس منع می شوند.
  3. آدرسی که برای اتوبوس های فرمت های دیگر رزرو شده است نیز برای استفاده ترکیبی از پروتکل های مختلف در نظر گرفته شده است. فقط دستگاه هایی که می توانند با فرمت متفاوتی کار کنند می توانند به این آدرس پاسخ دهند.

9.1.1. آدرس تماس عمومی

آدرس تماس عمومی به تمام دستگاه های موجود در اتوبوس آدرس می دهد. با این حال، اگر دستگاه به هیچ داده ای که ممکن است در تماس عمومی منتقل شود نیاز نداشته باشد، ممکن است با عدم صدور تاییدیه، تماس را نادیده بگیرد. اگر دستگاهی به داده‌های تمام تماس نیاز داشته باشد، یک تأیید تولید می‌کند و به یک برده دریافت‌کننده تبدیل می‌شود. بایت دوم و پس از آن باید توسط هر برد گیرنده ای که قادر به پردازش این داده ها است تأیید شود. اگر Slave نتواند یکی از بایت ها را پردازش کند، یک Acknowledgment ایجاد نمی کند. مقدار فراخوانی عمومی همیشه توسط بایت دوم تعیین می شود (شکل 16).

دو گزینه وجود دارد:

  • زمانی که بیت جهت بایت دوم صفر باشد
  • زمانی که بیت جهت بایت دوم یک باشد

هنگامی که بیت "0" بیت دوم به معنای زیر است:

  • 00000110. دستگاه را ریست کنید و قسمت قابل برنامه ریزی آدرس را یادداشت کنید. با دریافت این بسته، تمامی دستگاه ها ریست شده و قسمت قابل برنامه ریزی آدرس آنها بازخوانی می شود. قبل از صدور فرمان، باید مطمئن شوید که دستگاه ها پس از اعمال برق، خطوط اتوبوس را پایین نگه نمی دارند.
  • 00000100. قسمت قابل برنامه ریزی آدرس را بنویسید. تمام دستگاه هایی که قابلیت تنظیم قسمت قابل برنامه ریزی آدرس را دارند، هنگام پذیرش این دستور، مقدار آدرس فعلی را قفل می کنند. دستگاه ها ریست نمی شوند
  • 00000000. این کد برای استفاده به عنوان بایت دوم معتبر نیست

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

کدهای باقی مانده تنظیم نشده اند و دستگاه ها باید آنها را نادیده بگیرند.

هنگامی که بیت "1" است، دنباله دو بایتی "تماس کلی سخت افزار" نامیده می شود. این بدان معنی است که توالی توسط یک دستگاه اصلی سخت افزاری (مانند اسکنر صفحه کلید) که نمی تواند برای خروجی یک آدرس برده خاص برنامه ریزی شود، منتقل می شود. از آنجایی که استاد سخت‌افزار نمی‌داند پیام به کدام دستگاه ارسال می‌شود، فقط می‌تواند یک تماس اصلی سخت‌افزار و آدرس خود ایجاد کند - خود را به سیستم شناسایی کند (شکل 17).

هفت بیت باقی مانده در بایت دوم حاوی آدرس استاد سخت افزار است. این آدرس توسط یک دستگاه هوشمند (میکروکنترلر) شناسایی می شود که سپس اطلاعات را از استاد سخت افزار دریافت می کند. اگر دومی بتواند به عنوان برده نیز عمل کند، آدرس آن همان آدرس ارباب است.

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

شکل 16. فرمت تمام آدرس تماس

  1. بایت اول
  2. بایت دوم
  3. رتبه نوجوانان

شکل 17. ارسال اطلاعات از فرستنده اصلی سخت افزار

  1. آدرس تماس عمومی
  2. بایت دوم
  3. N بایت + تایید

شکل 18: انتقال داده با استادان سخت افزاری که قادر به ارسال مستقیم داده ها به بردگان هستند
(الف) پیکربندی اصلی آدرس شروع داده را به استاد سخت افزار ارسال می کند
(ب) استاد سخت افزار داده ها را به برده انتخاب شده ارسال می کند

  1. آدرس اصلی سخت افزار
  2. رکورد
  3. آدرس شروع داده برای استاد سخت افزار
  4. آدرس شروع داده ها از استاد سخت افزار
  5. n بایت + تایید

9.1.2 بایت شروع

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

در این حالت، ارسال داده ها ممکن است با یک رویه شروع آغاز شود که بسیار طولانی تر از سیگنال START معمول است (شکل 19). روش شروع شامل

  • سیگنال شروع
  • شروع بایت
  • تایید نبض
  • سیگنال شروع مکرر

فرستنده اصلی، پس از سیگنال START معمولی، بایت START (00000001) را ارسال می کند. بنابراین میکروکنترلر می‌تواند خط SDA را در فرکانس پایین‌تری تا زمانی که دنباله‌ای از هفت صفر را تشخیص دهد، که اساساً در SDA برای هفت پالس ساعت، LOW است، نظارت می‌کند. هنگامی که این دنباله شناسایی شد، میکروکنترلر ممکن است به نرخ نظرسنجی گذرگاه بالاتری برای تشخیص سیگنال شروع مجدد تغییر دهد.

گیرنده سخت افزاری I 2 C هنگام دریافت سیگنال START مجدد تنظیم مجدد می شود و بنابراین بایت START را نادیده می گیرد.

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

9.1.3 سازگاری CBUS

گیرنده های CBUS را می توان به گذرگاه I2C متصل کرد. با این حال، خط سوم DLEN باید وارد شود و بیت تایید باید حذف شود. معمولاً ارسال‌های I2C از بایت‌های 8 بیتی تشکیل می‌شوند، در حالی که دستگاه‌های سازگار با CBUS فرمت متفاوتی دارند.

در یک گذرگاه مختلط I 2 C، دستگاه های سازگار نباید به پیام های قالب CBUS پاسخ دهند. یک آدرس ویژه CBUS (0000001X) برای این منظور رزرو شده است. پس از انتقال آدرس CBUS، خط DLEN را می توان فعال کرد و یک بسته فرمت CBUS ارسال می شود (شکل 20). پس از سیگنال STOP، همه دستگاه ها دوباره آماده دریافت داده می شوند.

استادان فرستنده می توانند پس از ارسال آدرس CBUS داده ها را در قالب CBUS ارسال کنند. انتقال با یک سیگنال STOP به پایان می رسد که توسط همه دستگاه ها شناسایی می شود.

توجه داشته باشید:
اگر پیکربندی گذرگاه CBUS مشخص باشد و توسعه دستگاه‌های سازگار با CBUS برنامه‌ریزی نشده باشد، طراح مجاز است زمان نگهداری (???DLEN?) را بر اساس نیازهای خاص دستگاه‌های مورد استفاده تنظیم کند.

شکل 19. روش شروع بایت

  1. شروع بایت
  2. تأیید جعلی (بالا)
  3. سیگنال شروع (S)
  4. سیگنال راه اندازی مجدد (Sr)

شکل 20. فرمت داده هنگام ارسال با فرستنده/گیرنده CBUS

  1. سیگنال شروع
  2. آدرس CBUS
  3. بیت جهت انتقال
  4. تایید پالس همگام سازی
  5. n بیت داده
  6. سیگنال STOP

10.0 پارامترهای الکتریکی دستگاه های I 2 C

پارامترهای الکتریکی ورودی/خروجی دستگاه های سازگار با I2C و ویژگی های خطوط اتوبوس متصل به آنها در جداول 3 و 4 بخش 15.0 آورده شده است.

دستگاه های I 2 C با سطوح ورودی ثابت 1.5 ولت و 3 ولت می توانند ولتاژ تغذیه خود را داشته باشند. مقاومت های کششی باید به منبع تغذیه 10 ± 5 ولت وصل شوند (شکل 21). دستگاه های I2C با سطوح ورودی که به ولتاژ تغذیه بستگی دارد باید یک خط برق مشترک داشته باشند که باید به یک مقاومت کششی نیز متصل شود (شکل 22).

هنگامی که دستگاه‌های سطح ورودی ثابت با دستگاه‌های سطح ورودی نسبی مخلوط می‌شوند، دومی باید به همان منبع تغذیه 10% ± 5 ولت متصل شود و باید دارای مقاومت‌های کششی متصل به پایه‌های SDA و SCL باشد که در شکل 23 نشان داده شده است.

سطوح ورودی به صورت زیر تعریف می شوند:

  • حد نویز سطح پایین 0.1 ولتاژ تغذیه است
  • حد نویز سطح بالا 0.2 ولتاژ منبع تغذیه است

همانطور که در شکل نشان داده شده است. 24، مقاومت های سری Rs (به عنوان مثال 300 اهم) می توانند برای محافظت در برابر نوسانات ولتاژ بالا در خطوط اتوبوس استفاده شوند.

شکل 21. اتصال دستگاه هایی با سطح ورودی ثابت به گذرگاه I 2 C

شکل 22. اتصال دستگاه های قدرت برد وسیع به باس I 2 C

شکل 23. اتصال دستگاه هایی با سطح ولتاژ ورودی نسبی (Vdd1) و سطح ورودی ثابت (Vdd2-4) به باس I 2 C

شکل 24. مقاومت های سری Rs برای حفاظت از نوسانات ولتاژ بالا

10.1 حداکثر و حداقل مقادیر برای مقاومت های Rp و Rs

برای دستگاه های I 2 C در حالت استاندارد، مقادیر مقاومت به پارامترهای زیر بستگی دارد:

  • ولتاژ تغذیه
  • ظرفیت تایر
  • تعداد دستگاه های متصل (جریان ورودی + جریان نشتی)

ولتاژ منبع تغذیه حداقل مقدار Rp را به دلیل حداقل جریان محدود مراحل خروجی (3 میلی آمپر) در Volmax = 0.4 V محدود می کند. Vdd به عنوان تابعی از Rpmin در شکل نشان داده شده است. 25.
حاشیه نویز مورد نظر 0.1 Vdd برای LOW حداکثر مقدار Rs را محدود می کند. Rsmax به عنوان تابعی از Rp در شکل نشان داده شده است. 25.

ظرفیت باس شامل ظرفیت کل سیم ها، پورت های متصل و کنتاکت ها می شود. این ظرفیت حداکثر مقدار Rp را به دلیل محدودیت در زمان ته نشینی محدود می کند. برنج. شکل 27 Rpmax را به عنوان تابعی از ظرفیت باس نشان می دهد.

.

شکل 28: جریان کل در ولتاژ HIGH به عنوان تابعی از حداکثر Rp در -Vdd

11.0 موارد اضافی به مشخصات باس I 2 C

گذرگاه I 2 C با سرعت انتقال داده 100 کیلوبیت بر ثانیه و آدرس 7 بیتی بیش از 10 سال است که بدون تغییر وجود داشته است. این مفهوم به طور گسترده ای به عنوان استانداردی برای صدها نوع تراشه تولید شده توسط فیلیپس و سایر تامین کنندگان پذیرفته شده است. در حال حاضر، مشخصات باس I 2 C با موارد زیر تکمیل شده است:

  • حالت سریع که به شما امکان می دهد سرعت انتقال داده را چهار برابر کنید
  • آدرس دهی 10 بیتی اجازه 1024 آدرس اضافی را می دهد

دو دلیل برای ایجاد این اضافات وجود دارد:

  • برنامه های جدید نیاز به انتقال حجم زیادی از اطلاعات دارند، بنابراین به پهنای باند گذرگاه بیشتری نیاز دارند. فناوری بهبود یافته تولید تراشه امکان چهار برابر شدن سرعت انتقال داده را بدون تغییر قیمت تمام شده محصول فراهم کرده است.
  • اکثر 112 آدرس مجاز در آدرس دهی 7 بیتی قبلاً بیش از یک بار استفاده شده اند. برای جلوگیری از مشکلات در قرار دادن آدرس دستگاه های جدید، داشتن تعداد بیشتری از ترکیب آدرس ها مطلوب است. با استفاده از آدرس دهی 10 بیتی جدید، تقریباً ده برابر افزایش در تعداد آدرس های موجود به دست آمد.

همه دستگاه های جدید با رابط I 2 C در حالت سریع کار می کنند. ترجیحاً باید بتوانند داده ها را با سرعت 400 کیلوبیت بر ثانیه دریافت و/یا ارسال کنند. حداقل، آنها باید بتوانند همزمان سازی را در یک حالت سریع وارد کنند تا نرخ انتقال (با افزایش دوره LOW SCL) به مقدار قابل قبول کاهش یابد. دستگاه های سریع باید به سمت بالا سازگار باشند، به این معنی که آنها می توانند با دستگاه های استاندارد از طریق اتوبوس آهسته کار کنند.

بدیهی است که دستگاه های استاندارد قادر به کار در یک اتوبوس سریع نیستند زیرا نمی توانند با سرعت بالا همگام شوند و وضعیت آنها غیرقابل پیش بینی می شود.

دستگاه های Fast Slave می توانند یک آدرس 7 بیتی یا 10 بیتی داشته باشند. با این حال، آدرس 7 بیتی ترجیح داده می شود، زیرا اجرای سخت افزاری آن ساده تر و طول پیام کوتاه تر است.

دستگاه هایی با آدرس های 7 بیتی و 10 بیتی را می توان به طور همزمان در یک گذرگاه بدون توجه به نرخ باود استفاده کرد. هر دو استاد موجود و آینده قادر خواهند بود هر دو آدرس 7 بیتی و 10 بیتی تولید کنند.

12.0 حالت سریع

در حالت سریع، پروتکل، فرمت، سطوح منطقی و حداکثر بار خازنی خطوط اتوبوس بدون تغییر باقی می مانند. تغییرات در مشخصات عبارتند از:

  • حداکثر سرعت انتقال به 400 کیلوبیت بر ثانیه افزایش یافت
  • همگام سازی خطوط SDA و SCL تغییر کرده است. سازگاری با دستگاه های CBUS لازم نیست زیرا نمی توانند با سرعت بالا کار کنند
  • مدارهای ورودی دستگاه سریع باید دارای سرکوب داخلی و یک ماشه اشمیت در هر دو خط باشند.
  • بافر خروجی دستگاه های سریع باید یک آبشار با کنترل زمان لبه سقوط خطوط SDA و SCL داشته باشد.
  • اگر ولتاژ منبع تغذیه دستگاه های سریع خاموش باشد، خطوط باید به حالت سوم بروند
  • دستگاه‌های بیرون‌کش خارجی متصل به خطوط اتوبوس باید برای اطمینان از زمان‌های قابل قبول افزایش لبه بالارونده اصلاح شوند. برای بارهای باس تا 200 pF این دستگاه pull-up می تواند یک مقاومت ساده باشد و برای بارهای 200 pF تا 400 pF باید منبع جریان (حداکثر 3 میلی آمپر) یا مدار مقاومت سوئیچ شده باشد همانطور که در شکل نشان داده شده است. 37

آدرس دهی 10 بیتی 13.0

آدرس دهی 10 بیتی فرمت گذرگاه را تغییر نمی دهد. برای این کار، از ترکیب آدرس رزرو شده 1111ХХХ از هفت بیت اول بایت اول استفاده می شود (نگاه کنید به. بخش 9.1). آدرس دهی 10 بیتی روی آدرس دهی 7 بیتی موجود تأثیر نمی گذارد. دستگاه های دارای آدرس دهی 7 بیتی و 10 بیتی را می توان به یک گذرگاه متصل کرد.

اگرچه هشت ترکیب ممکن از دنباله 1111XXX وجود دارد، تنها چهار مورد استفاده شده است - 11110XX. ترکیباتی مانند 11111XX برای بهبود بیشتر تایرها در نظر گرفته شده است.

13.1 تخصیص بیت دو بایت اول

آدرس 10 بیتی از دو بایت اول تشکیل می شود. هفت بیت اول بایت اول ترکیبی از فرم 11110XX است، که در آن دو بیت کم اهمیت (XX) دو بیت مهم (9 و 8) از آدرس 10 بیتی هستند. هشتمین بیت از بایت اول، بیت جهت است. "صفر" در این بیت به این معنی است که master قرار است اطلاعاتی را برای Slave بنویسد، و "یک" به این معنی است که master قرار است اطلاعاتی را از Slave بخواند.

اگر بیت جهت صفر باشد، بایت دوم حاوی 8 بیت باقی مانده از آدرس 10 بیتی است. اگر بیت جهت برابر با یک باشد، بایت بعدی حاوی داده هایی است که از Slave به Master منتقل شده است.

13.2 فرمت های 10 بیتی

ترکیب های مختلفی از فرمت های پیام 10 بیتی ممکن است:

  • فرستنده اصلی اطلاعات را به گیرنده slave منتقل می کند (شکل 29). جهت ارسال تغییر نمی کند. هنگامی که شروع یک آدرس 10 بیتی بعد از سیگنال START ظاهر می شود، هر slave در گذرگاه هفت بیت اول بایت اول را با آدرس خود مقایسه می کند و اطمینان حاصل می کند که بیت جهت صفر است. تشخیص تطابق و تولید سیگنال تصدیق (A1) برای بیش از یک دستگاه قابل قبول است. همه بردها با آدرس های منطبق به مقایسه 8 بیت بعدی آدرس ادامه می دهند و فقط یک دستگاه مطابقت را تشخیص می دهد و یک تأیید (A2) ایجاد می کند. این دستگاه تا زمانی که استاد یک سیگنال STOP یا یک سیگنال شروع مجدد با آدرس دیگری ارسال نکند، انتخاب شده باقی می ماند.
  • گیرنده اصلی داده ها را از فرستنده slave دریافت می کند. جهت انتقال بعد از بیت جهت دوم تغییر می کند (شکل 30). این روش تا لحظه تایید دوم (A2) مشابه روشی است که در بالا توضیح داده شد. سپس یک سیگنال شروع مجدد ارسال می شود. برده انتخاب شده به خاطر می آورد که قبلاً به آن پرداخته شده بود. این برده هفت بیت اول آدرس را با آدرس آن مقایسه می کند و همچنین مطمئن می شود که بیت جهت یک است. اگر تطابق وجود داشته باشد، برده فرض می کند که به عنوان فرستنده خطاب شده است و یک تصدیق (A3) ایجاد می کند. برده فرستنده تا زمانی که یک سیگنال STOP یا یک سیگنال شروع مجدد با آدرسی متفاوت برسد آدرس دهی می شود. پس از سیگنال شروع مجدد، تمام دستگاه های دیگر نیز هفت بیت اول را با آدرس خود مقایسه می کنند و بیت جهت را بررسی می کنند. با این حال، هیچ یک از آنها آدرس پذیر نیستند زیرا بیت جهت یک است (برای دستگاه های 10 بیتی) یا چنین آدرسی وجود ندارد (برای دستگاه های 7 بیتی).
  • فرمت ترکیبی Master داده ها را به Slave ارسال می کند و سپس داده ها را از همان Slave می خواند (شکل 31). یک استاد اتوبوس را برای کل زمان انتقال اشغال می کند. جهت ارسال پس از بیت جهت دوم تغییر می کند
  • فرمت ترکیبی Master داده ها را به یک Slave منتقل می کند و سپس داده ها را به Slave دیگر ارسال می کند (شکل 32). یک استاد اتوبوس را برای کل زمان انتقال اشغال می کند
  • فرمت ترکیبی آدرس دهی 10 بیتی و 7 بیتی در یک بسته استفاده می شود (شکل 33). پس از هر سیگنال START یا مکرر START، یک آدرس 10 بیتی یا 7 بیتی ارسال می شود. شکل 33 نشان می دهد که چگونه Master داده ها را به یک Slave با یک آدرس 7 بیتی ارسال می کند و سپس داده ها را به یک Slave دوم با یک آدرس 10 بیتی ارسال می کند. یک استاد اتوبوس را برای کل زمان انتقال اشغال می کند.

شکل 32. فرمت ترکیبی. Master داده ها را به دو برده، هر دو 10 بیتی ارسال می کند

  1. آدرس برده (7 بیت اول)
  2. رکورد
  3. آدرس برده (بایت دوم)
  4. داده ها
  5. سیگنال شروع مکرر
  6. سیگنال STOP

با رتبه بندی از 10 اهم تا 1 MOhm)؛

  • 2 مقاومت 4.7 کیلو اهم (از همان مجموعه)؛
  • سیم های اتصال (به عنوان مثال، در اینجا یک مجموعه خوب است)؛
  • کامپیوتر با آردوینو IDE.
  • 1 شرحرابط I2C

    IIC سریال (همچنین I2C - مدارهای یکپارچه شده نامیده می شود) از دو خط ارتباطی دو طرفه به نام گذرگاه داده سریال برای انتقال داده ها استفاده می کند. SDA (داده های سریال)و اتوبوس ساعت SCL (ساعت سریال). دو خط برق نیز وجود دارد. باس های SDA و SCL از طریق مقاومت ها به گذرگاه قدرت کشیده می شوند.

    حداقل یک مورد آنلاین وجود دارد دستگاه اصلی، که انتقال داده را آغاز می کند و سیگنال های همگام سازی را تولید می کند. شبکه نیز دارد دستگاه های برده، که داده ها را به درخواست رهبر منتقل می کند. هر دستگاه Slave یک آدرس منحصر به فرد دارد که توسط master برای دسترسی به آن استفاده می شود. آدرس دستگاه در برگه اطلاعات نشان داده شده است. حداکثر 127 دستگاه، از جمله چندین Master را می توان به یک گذرگاه I2C متصل کرد. دستگاه ها را می توان در حین کار به اتوبوس متصل کرد، یعنی. از اتصال داغ پشتیبانی می کند.

    بیایید به نمودار زمان بندی تبادل از طریق پروتکل I2C نگاه کنیم. چندین گزینه مختلف وجود دارد، بیایید به یکی از رایج ترین آنها نگاه کنیم. بیایید از یک تحلیلگر منطقی متصل به گذرگاه های SCL و SDA استفاده کنیم.

    استاد مبادله را آغاز می کند. برای انجام این کار، شروع به تولید پالس های ساعت می کند و آنها را در امتداد خط SCL در یک بسته 9 تکه می فرستد. در همان زمان، روی خط داده SDA تنظیم می کند آدرس دستگاه، که با آن لازم است ارتباط برقرار شود، که توسط 7 پالس ساعت اول کلاک می شوند (از این رو محدودیت در محدوده آدرس: 2 7 = 128 منهای آدرس صفر). بیت بعدی پیام این است کد عملیات(بخوان یا بنویس) و یک بیت دیگر - بیت تصدیق(ACK) که دستگاه برده درخواست را پذیرفته است. اگر بیت تایید نرسد، تبادل به پایان می رسد. یا استاد به ارسال درخواست های مکرر ادامه می دهد.

    این در شکل زیر نشان داده شده است، برای مثال، اجازه دهید دستگاه برده را از اتوبوس جدا کنیم. مشاهده می شود که استاد در تلاش است با دستگاه با آدرس 0x27 ارتباط برقرار کند اما تاییدیه (NAK) را دریافت نمی کند. تبادل به پایان می رسد.


    حالا دستگاه Slave را به باس I2C متصل کرده و عملیات را تکرار کنید. وضعیت تغییر کرده است. اولین بسته با آدرس یک تأییدیه (ACK) از برده دریافت کرد. مبادله ادامه یافت. اطلاعات نیز در بسته های 9 بیتی منتقل می شود، اما اکنون 8 بیت اشغال شده است داده هاو 1 بیت - بیت تصدیق Slave هر بایت داده را دریافت می کند. اگر هر لحظه اتصال قطع شود و بیت تصدیق نرسد، Master ارسال را متوقف خواهد کرد.

    2 پیاده سازی I2Cدر آردوینو

    آردوینو از دو پورت برای کار از طریق رابط I2C استفاده می کند. به عنوان مثال، در آردوینو UNO و آردوینو نانو، پورت آنالوگ A4 مربوط به SDA، پورت آنالوگ A5 مربوط به SCL است.


    برای سایر مدل های برد، مطابقت پین به شرح زیر است:

    3 کتابخانه "سیم"برای کار با IIC

    برای تسهیل تبادل داده با دستگاه ها از طریق گذرگاه I2C، یک کتابخانه استاندارد برای آردوینو نوشته شده است سیم. دارای توابع زیر است:

    تابعهدف
    شروع (آدرس) راه اندازی کتابخانه و اتصال به گذرگاه I2C. اگر آدرس مشخص نشده باشد، دستگاه متصل اصلی در نظر گرفته می شود. آدرس دهی 7 بیتی استفاده می شود.
    درخواست از() توسط master برای درخواست تعداد معینی بایت از Slave استفاده می شود.
    شروع انتقال (آدرس) شروع انتقال داده به دستگاه برده در یک آدرس خاص؛
    endTransmission() توقف انتقال داده به برده؛
    نوشتن() ثبت داده ها از برده در پاسخ به درخواست؛
    در دسترس() تعداد بایت های اطلاعات موجود برای دریافت از برده را برمی گرداند.
    خواندن() خواندن یک بایت که از یک برده به یک استاد یا از یک استاد به یک برده منتقل می شود.
    onReceive() تابعی را نشان می دهد که باید زمانی که Slave یک ارسال از master دریافت می کند فراخوانی شود.
    بنا به درخواست() تابعی را نشان می دهد که باید زمانی که master یک انتقال از Slave دریافت می کند، فراخوانی شود.

    4 اتصال دستگاه I2Cبه آردوینو

    بیایید ببینیم چگونه با استفاده از آردوینو با گذرگاه I2C کار کنیم.

    ابتدا بیایید یک مدار را مانند شکل جمع کنیم. ما روشنایی LED را با استفاده از یک پتانسیومتر 64 موقعیت دیجیتال AD5171 کنترل می کنیم (به توضیحات فنی مراجعه کنید)، که به گذرگاه I2C متصل است. آدرسی که در آن به پتانسیومتر دسترسی خواهیم داشت 0x2c (44 در اعشار) است.


    5 مدیریت دستگاهاز طریق اتوبوس IIC

    بیایید به نمودارهای تبادل اطلاعات با پتانسیومتر دیجیتال AD5171 که در توضیحات فنی ارائه شده است نگاه کنیم:


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

    بیایید طرحی را از نمونه های کتابخانه "Wire" باز کنیم: فایل نمونه سیم دیجیتال_پتانسیومتر. بیایید آن را در حافظه آردوینو بارگذاری کنیم.

    #عبارتند از // بایت کتابخانه "Wire" را وصل کنید val = 0; مقدار // برای انتقال به پتانسیومتر void setup() ( Wire.begin(); // به‌عنوان اصلی به گذرگاه I2C متصل شوید } حلقه خالی() ( Wire.beginTransmission(44); // شروع تبادل با دستگاهی با آدرس I2C "44" (0x2C) Wire.write(byte(0x00)); // ارسال یک دستورالعمل نوشتن به رجیستر RDAC Wire.write(val); // موقعیت پتانسیومتر 64 موقعیت را تنظیم کنید Wire.endTransmission(); // انتقال کامل I2C val++; // افزایش val توسط 1 if (val == 63) ( // وقتی پتانسیومتر به حداکثر val = 0 می رسد; // reset val ) delay(500); }

    پس از روشن شدن، می بینید که چگونه روشنایی LED به صورت دوره ای افزایش می یابد و سپس خاموش می شود. در این حالت پتانسیومتر را با استفاده از آردوینو از طریق گذرگاه I2C کنترل می کنیم.

    زنگ

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