گاهی اوقات به این اتوبوس "مربع" یا "مربع" یا "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 استفاده می شود.
سرعت انتقال داده
با توجه به مشخصات، رابط از سه حالت انتقال با سرعت بالا پشتیبانی می کند:
- رایج ترین آنها تا 100 کیلوبیت در ثانیه است، فرکانس ساعت خط SCL تا 100 کیلوهرتز است، مدت زمان سطوح بالا و پایین حداقل 5 میکرو ثانیه است.
- حالت سرعت تا 400 کیلوبیت بر ثانیه، فرکانس ساعت تا 400 کیلوهرتز.
- حالت پرسرعت تا 3.4 مگابیت بر ثانیه، فرکانس ساعت تا 3.4 مگاهرتز.
حالت استاندارد تا 100 کیلوبیت در ثانیه توسط همه دستگاه ها پشتیبانی می شود.
پیاده سازی نرم افزار رابط I2C
همه میکروکنترلرهای سری PIC16 دارای ماژول I2C سخت افزاری داخلی نیستند، اما این رابط را می توان در نرم افزار پیاده سازی کرد و روی هر میکروکنترلری استفاده کرد. در زیر کدی وجود دارد که عملکردهای Master را در رابطه با میکروکنترلر PIC16F628A پیاده سازی می کند:
#عبارتند از
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #عبارتند از 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 نیز شناخته می شود. SDA - خط داده سیگنال های START و STOP
توجه داشته باشید که دستورات استفاده شده در این مثال را می توان در مستندات DS1624 یافت. تمرین در لوازم خانگی، تجهیزات مخابراتی و الکترونیک صنعتی، راه حل های مشابه اغلب در محصولات به ظاهر نامرتبط یافت می شود. به عنوان مثال، تقریباً هر سیستمی شامل موارد زیر است:
برای استفاده از این راه حل های رایج به نفع طراحان و سازندگان، و همچنین برای افزایش کارایی سخت افزار و ساده سازی طراحی مدار، فیلیپس یک گذرگاه دو سیمه ساده، دو طرفه برای کنترل کارآمد بین آی سی توسعه داده است. گذرگاه InterIC یا گذرگاه IIC (I 2 C) نامیده می شود. در حال حاضر، مجموعه محصولات فیلیپس شامل بیش از 150 دستگاه CMOS و دوقطبی I 2 C-سازگار است که از نظر عملکردی برای کار در هر سه دسته تجهیزات الکترونیکی فوق طراحی شده اند. همه دستگاه های سازگار با I 2 دارای یک رابط داخلی هستند که به آنها اجازه می دهد از طریق گذرگاه I 2 C با یکدیگر ارتباط برقرار کنند. در اینجا برخی از مزایای اتوبوس I 2 C آورده شده است:
برنج. شکل 1 دو نمونه کاربردی از گذرگاه I 2 C را نشان می دهد. 1.1 مزایای برای طراحآی سی های سازگار I 2 C روند توسعه را از نمودار عملکردی به نمونه اولیه سرعت می بخشد. علاوه بر این، از آنجایی که چنین تراشههایی مستقیماً بدون هیچ مدار اضافی به گذرگاه متصل میشوند، امکان اصلاح و ارتقای سیستم نمونه اولیه با اتصال و جدا کردن دستگاهها از گذرگاه وجود دارد. در اینجا برخی از مزایای ریز مدارهای سازگار با I 2 C وجود دارد که طراحان را نگران می کند:
علاوه بر این مزایا، آی سی های سازگار با CMOS I2C راه حل های ویژه ای را برای طراحان ارائه می دهند که به ویژه برای تجهیزات قابل حمل و سیستم های باتری دار جذاب هستند:
شکل 1. دو نمونه از کاربردهای I 2 C
|
اصطلاح (انگلیسی) | اصطلاح (روس) | شرح |
فرستنده | فرستنده | دستگاه ارسال داده به اتوبوس |
گیرنده | گیرنده | دریافت دستگاه از اتوبوس |
استاد | منتهی شدن | انتقال داده را شروع می کند، پالس های ساعت تولید می کند، انتقال داده را پایان می دهد |
برده | برده | دستگاه خطاب شده توسط استاد |
چند استاد | - | چندین استاد می توانند همزمان بدون ایجاد اختلال در اطلاعات ارسال شده، اتوبوس را ضبط کنند |
داوری | داوری | رویه ارائه Multi-Master |
هماهنگ سازی | همگام سازی | رویه همگام سازی دو دستگاه |
شکل 3. مثال I 2 پیکربندی باس C با دو میکروکنترلر
- میکروکنترلر A
- آرایه
- درایور LCD
- رم استاتیک یا PROM
- میکروکنترلر B
گذرگاه I 2 C به چندین استاد اجازه می دهد. این بدان معنی است که بیش از یک دستگاه با قابلیت کنترل اتوبوس می تواند به آن متصل شود. از آنجایی که میکروکنترلرها معمولاً به عنوان Master عمل می کنند، اجازه دهید به مثالی از ارسال داده بین دو میکروکنترلر متصل به یک اتوبوس نگاه کنیم (شکل 3). یک مثال روابط فرستنده-گیرنده و master-slave را نشان می دهد که در گذرگاه I 2 C وجود دارد. انتقال داده ها به صورت زیر انجام می شود:
- اجازه دهید میکروکنترلر A بخواهد اطلاعاتی را به میکروکنترلر B ارسال کند:
- میکروکنترلر A (فرستنده اصلی) داده ها را به میکروکنترلر B (گیرنده-گیرنده) ارسال می کند.
- اجازه دهید میکروکنترلر 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 به اتوبوس
- SDA (خط داده)
- SCL (خط همگام سازی)
- همگام سازی خروجی
- همگام سازی ورودی
- خروجی داده
- ورود اطلاعات
- مقاومت های کششی
- ولتاژ تغذیه
ارسال 5.0 بیت
به دلیل فناوریهای مختلف تراشه (CMOS، LMOS، دوقطبی) که میتوانند به گذرگاه متصل شوند، سطوح منطقی صفر ("LOW") و منطق یک ("HIGH") ثابت نیستند و به سطح Vdd مربوطه بستگی دارند (نگاه کنید به) بخش 15.0 برای پارامترهای الکتریکی). برای هر بیت ارسالی یک پالس ساعت ایجاد می شود.
5.1 اعتبار داده ها
داده های خط SDA باید در طول دوره ساعت HIGH پایدار باشد. حالت HIGH یا LOW خط داده تنها در صورتی باید تغییر کند که خط ساعت در حالت LOW باشد (شکل 5 را ببینید).
شکل 5. ارسال بیت در گذرگاه I 2 C
- خط داده در حالت پایدار است، داده ها تعریف شده است
- تغییرات داده مجاز است
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
- سیگنال شروع
- سیگنال STOP
فرمت 6.1 بایت
هر بایت ارسال شده از طریق خط SDA باید شامل 8 بیت باشد. تعداد بایت های منتقل شده در هر جلسه ارتباط نامحدود است. هر بایت باید با یک بیت تصدیق پایان یابد. داده ها با مهم ترین بیت شروع می شود (شکل 7 را ببینید). اگر گیرنده نتواند بایت کامل دیگری را بپذیرد تا زمانی که عملکرد دیگری را انجام دهد (مانند سرویس یک وقفه داخلی)، می تواند خط SCL را LOW نگه دارد و فرستنده را در حالت خواب قرار دهد. انتقال داده زمانی ادامه می یابد که گیرنده برای بایت بعدی آماده شود و خط SCL را آزاد کند.
در برخی موارد، لازم است از یک فرمت داده متفاوت (مثلا CBUS) استفاده شود. پیامی که با چنین آدرسی مخابره می شود ممکن است با صدور یک سیگنال STOP خاتمه یابد، حتی اگر این اتفاق در حین ارسال بایت رخ دهد. در این مورد، هیچ تاییدیه ای ایجاد نمی شود (به بخش 9.1.3 مراجعه کنید).
شکل 7. انتقال داده در گذرگاه I 2 C
- سیگنال شروع
- بایت بالا
- سیگنال تایید از گیرنده
- دریافت بایت تکمیل شد. وقفه در داخل گیرنده
- خط ساعت پایین نگه داشته می شود در حالی که وقفه در حال سرویس است.
- سیگنال تایید از گیرنده
- سیگنال STOP
6.2 تایید
تأیید هنگام انتقال داده ها مورد نیاز است. پالس هماهنگ سازی مربوطه توسط استاد تولید می شود. فرستنده خط SDA (HIGH) را در طول ساعت تصدیق آزاد می کند. گیرنده باید خط SDA را در طول حالت HIGH ساعت تصدیق در حالت LOW پایدار نگه دارد (شکل 8). البته زمان راه اندازی و نگهداری نیز باید در نظر گرفته شود (پارامترهای الکتریکی و زمان بندی).
به طور معمول، گیرنده آدرسدهی شده باید پس از دریافت هر بایت، یک تأیید ایجاد کند، مگر اینکه پیام با یک آدرس CBUS شروع شود (به سازگاری CBUS مراجعه کنید).
در صورتی که برده گیرنده نتواند آدرس خود را تأیید کند (به عنوان مثال، زمانی که در حال حاضر برخی از عملکردهای بلادرنگ را انجام می دهد)، خط داده باید HIGH رها شود. سپس Master می تواند یک سیگنال STOP برای قطع انتقال داده صادر کند.
اگر گیرنده slave آدرس خود را تأیید کرده باشد، اما پس از مدتی دیگر نمی تواند داده را دریافت کند، Master نیز باید ارسال را لغو کند. برای انجام این کار، Slave بایت بعدی را تأیید نمی کند، خط داده را در حالت HIGH رها می کند و master یک سیگنال STOP تولید می کند.
اگر یک گیرنده اصلی در انتقال دخالت داشته باشد، باید پایان انتقال به فرستنده برده را با عدم تایید آخرین بایت نشان دهد. برده فرستنده باید خط داده را آزاد کند تا به Master اجازه دهد سیگنال STOP صادر کند یا سیگنال START را تکرار کند.
شکل 8. تایید
- داده های ارسال شده توسط فرستنده
- داده های ارسال شده توسط گیرنده
- SCL از میزبان
- سیگنال شروع
- تایید پالس همگام سازی
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. همگام سازی در طول داوری
- حالت انتظار
- شروع دوره ساعت 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. ارسال داده ها
- سیگنال شروع
- نشانی
- بیت جهت (R/W^)
- تائیدیه
- داده ها
- سیگنال STOP
فرمت های آدرس 8.0 7 بیتی
انتقال داده ها در قالب نشان داده شده در شکل انجام می شود. 11. پس از سیگنال START، آدرس برده ارسال می شود. بعد از 7 بیت آدرس، بیت جهت داده (R/W^)، "صفر" به معنای ارسال (نوشتن) و "یک" به معنای دریافت (خواندن) می آید. انتقال داده همیشه با یک سیگنال STOP تولید شده توسط Master به پایان می رسد. با این حال، اگر استاد بخواهد بیشتر در اتوبوس بماند، باید یک سیگنال استارت دوم و سپس آدرس دستگاه بعدی را صادر کند. با این فرمت ارسال، ترکیب های مختلف خواندن/نوشتن امکان پذیر است.
فرمت های ممکن:
- فرستنده اصلی به گیرنده برده ارسال می کند. جهت انتقال داده ها تغییر نمی کند
- Master بلافاصله پس از ارسال اولین بایت، Slave را می خواند (شکل 13). در لحظه تایید اول، فرستنده اصلی به گیرنده اصلی و گیرنده برده تبدیل به فرستنده برده می شود.
- با این وجود، تصدیق توسط برده ایجاد می شود. سیگنال STOP توسط Master تولید می شود
- فرمت ترکیبی (شکل 14). هنگام تغییر جهت انتقال داده، سیگنال START و آدرس برده تکرار می شوند، اما بیت جهت داده معکوس می شود. اگر گیرنده اصلی یک سیگنال START مکرر ارسال کند، ابتدا باید یک سیگنال غیر تایید ارسال کند.
شکل 12. فرستنده اصلی گیرنده برده را با یک آدرس 7 بیتی آدرس می دهد. جهت ارسال تغییر نمی کند
- از ارباب تا برده
- از پیرو تا رهبر
- آدرس برده
- بیت جهت
- داده ها
- داده ارسال شده (n بایت + تایید)
- الف - تأیید
- عدم تایید
- سیگنال شروع
- سیگنال STOP
شکل 13. Master بلافاصله بعد از اولین بایت از Slave می خواند
شکل 14. فرمت ترکیبی
- آدرس برده
- بخوان یا بنویس
- n بایت + تصدیق
- سیگنال راه اندازی مجدد
- جهت ارسال ممکن است در این مرحله تغییر کند
- جهت ارسال داده ها و بیت های تایید به بیت های جهت بستگی دارد
یادداشت:
- برای مثال می توان از فرمت های ترکیبی برای مدیریت حافظه سریال استفاده کرد. در طول اولین بایت داده، یک آدرس حافظه را می توان منتقل کرد که به یک لچ داخلی نوشته می شود. پس از تکرار سیگنال START و آدرس برده، داده ها از حافظه بازیابی می شوند.
- تمام تصمیمات در مورد افزایش یا کاهش خودکار آدرسی که قبلاً به آن دسترسی داشتید توسط طراح دستگاه گرفته می شود.
- هر بایت با یک بیت تصدیق پایان می یابد که در شکل ها A یا A^ مشخص شده است.
- I 2 دستگاه های سازگار با C باید هنگام دریافت سیگنال START یا START مجدد، منطق اتوبوس را تنظیم کرده و برای دریافت آدرس آماده شوند.
آدرس دهی 7 بیتی 9.0
(به آدرس دهی 10 بیتی مراجعه کنید).
رویه آدرس دهی در گذرگاه I2C به این صورت است که اولین بایت بعد از سیگنال START مشخص می کند کدام slave توسط master برای کار کردن انتخاب می شود. استثنا آدرس "تماس عمومی" است که به تمام دستگاه های موجود در اتوبوس آدرس می دهد. هنگامی که از این آدرس استفاده می شود، همه دستگاه ها در تئوری باید یک سیگنال تایید ارسال کنند. با این حال، دستگاهها میتوانند این آدرس را نادیده بگیرند. بایت دوم ارسال همه تماس، اقدامی را که دستگاه ها باید انجام دهند را مشخص می کند. این روش با جزئیات بیشتر در بخش هدف بیت های اولین بایت توضیح داده شده است.
9.1 تخصیص بیت اولین بایت
هفت بیت اول بایت اول آدرس برده را تشکیل می دهد (شکل 15 را ببینید). هشتمین بیت، کم اهمیت ترین، جهت انتقال داده را تعیین می کند. "صفر" به این معنی است که Master اطلاعات را برای Slave انتخاب شده می نویسد. "یک" به این معنی است که master اطلاعاتی را از Slave خواهد خواند.
شکل 15. اولین بایت بعد از سیگنال START
- رتبه ارشد
- رتبه نوجوانان
- آدرس برده
پس از ارسال آدرس، هر دستگاه در سیستم هفت بیت اول پس از سیگنال START را با آدرس خود مقایسه می کند. اگر مطابقت وجود داشته باشد، دستگاه خود را به عنوان گیرنده برده یا فرستنده فرستنده بسته به بیت جهت انتخاب می کند.
آدرس برده می تواند از یک قسمت ثابت و قابل برنامه ریزی تشکیل شده باشد. این احتمال وجود دارد که چندین دستگاه مشابه در سیستم وجود داشته باشد، بنابراین، با استفاده از قسمت قابل برنامه ریزی آدرس، می توان حداکثر تعداد ممکن از این دستگاه ها را به اتوبوس متصل کرد. تعداد بیت های قابل برنامه ریزی در آدرس به تعداد پایه های آزاد ریز مدار بستگی دارد. به عنوان مثال، اگر دستگاهی دارای 4 بیت آدرس ثابت و 3 بیت قابل برنامه ریزی باشد، در مجموع می توان 8 دستگاه یکسان را به اتوبوس متصل کرد.
کمیته I 2 C تخصیص آدرس های I 2 C را هماهنگ می کند. اطلاعات بیشتر را می توان از نمایندگان فیلیپس که روی جلد فهرست شده اند دریافت کرد. دو گروه از هشت آدرس (0000XXX و 1111XXX) برای اهداف مشخص شده در جدول 2 رزرو شده اند. ترکیب بیت آدرس 11110XX برای آدرس دهی 10 بیتی رزرو شده است (به بخش 13.0 مراجعه کنید).
یادداشت:
- دستگاه ها از تأیید دریافت بایت START منع می شوند.
- آدرس CBUS برای اجازه استفاده از دستگاه های سازگار با CBUS و I 2 C در یک سیستم رزرو شده است. دستگاه های سازگار I 2 C از پاسخگویی به دریافت این آدرس منع می شوند.
- آدرسی که برای اتوبوس های فرمت های دیگر رزرو شده است نیز برای استفاده ترکیبی از پروتکل های مختلف در نظر گرفته شده است. فقط دستگاه هایی که می توانند با فرمت متفاوتی کار کنند می توانند به این آدرس پاسخ دهند.
9.1.1. آدرس تماس عمومی
آدرس تماس عمومی به تمام دستگاه های موجود در اتوبوس آدرس می دهد. با این حال، اگر دستگاه به هیچ داده ای که ممکن است در تماس عمومی منتقل شود نیاز نداشته باشد، ممکن است با عدم صدور تاییدیه، تماس را نادیده بگیرد. اگر دستگاهی به دادههای تمام تماس نیاز داشته باشد، یک تأیید تولید میکند و به یک برده دریافتکننده تبدیل میشود. بایت دوم و پس از آن باید توسط هر برد گیرنده ای که قادر به پردازش این داده ها است تأیید شود. اگر Slave نتواند یکی از بایت ها را پردازش کند، یک Acknowledgment ایجاد نمی کند. مقدار فراخوانی عمومی همیشه توسط بایت دوم تعیین می شود (شکل 16).
دو گزینه وجود دارد:
- زمانی که بیت جهت بایت دوم صفر باشد
- زمانی که بیت جهت بایت دوم یک باشد
هنگامی که بیت "0" بیت دوم به معنای زیر است:
- 00000110. دستگاه را ریست کنید و قسمت قابل برنامه ریزی آدرس را یادداشت کنید. با دریافت این بسته، تمامی دستگاه ها ریست شده و قسمت قابل برنامه ریزی آدرس آنها بازخوانی می شود. قبل از صدور فرمان، باید مطمئن شوید که دستگاه ها پس از اعمال برق، خطوط اتوبوس را پایین نگه نمی دارند.
- 00000100. قسمت قابل برنامه ریزی آدرس را بنویسید. تمام دستگاه هایی که قابلیت تنظیم قسمت قابل برنامه ریزی آدرس را دارند، هنگام پذیرش این دستور، مقدار آدرس فعلی را قفل می کنند. دستگاه ها ریست نمی شوند
- 00000000. این کد برای استفاده به عنوان بایت دوم معتبر نیست
توالی مراحل برنامه نویسی در مشخصات فنی مربوطه منتشر شده است.
کدهای باقی مانده تنظیم نشده اند و دستگاه ها باید آنها را نادیده بگیرند.
هنگامی که بیت "1" است، دنباله دو بایتی "تماس کلی سخت افزار" نامیده می شود. این بدان معنی است که توالی توسط یک دستگاه اصلی سخت افزاری (مانند اسکنر صفحه کلید) که نمی تواند برای خروجی یک آدرس برده خاص برنامه ریزی شود، منتقل می شود. از آنجایی که استاد سختافزار نمیداند پیام به کدام دستگاه ارسال میشود، فقط میتواند یک تماس اصلی سختافزار و آدرس خود ایجاد کند - خود را به سیستم شناسایی کند (شکل 17).
هفت بیت باقی مانده در بایت دوم حاوی آدرس استاد سخت افزار است. این آدرس توسط یک دستگاه هوشمند (میکروکنترلر) شناسایی می شود که سپس اطلاعات را از استاد سخت افزار دریافت می کند. اگر دومی بتواند به عنوان برده نیز عمل کند، آدرس آن همان آدرس ارباب است.
از سوی دیگر، در برخی از سیستمها، فرستنده اصلی سختافزار بلافاصله پس از تنظیم مجدد به حالت گیرنده برده میشود. به این ترتیب، استاد پیکربندی کننده سیستم می تواند به استاد سخت افزار (که در حالت گیرنده برده است) بگوید که داده ها باید به کدام آدرس ارسال شوند (شکل 18 پس از این روش، استاد سخت افزار در حالت فرستنده اصلی می ماند).
شکل 16. فرمت تمام آدرس تماس
- بایت اول
- بایت دوم
- رتبه نوجوانان
شکل 17. ارسال اطلاعات از فرستنده اصلی سخت افزار
- آدرس تماس عمومی
- بایت دوم
- N بایت + تایید
شکل 18: انتقال داده با استادان سخت افزاری که قادر به ارسال مستقیم داده ها به بردگان هستند
(الف) پیکربندی اصلی آدرس شروع داده را به استاد سخت افزار ارسال می کند
(ب) استاد سخت افزار داده ها را به برده انتخاب شده ارسال می کند
- آدرس اصلی سخت افزار
- رکورد
- آدرس شروع داده برای استاد سخت افزار
- آدرس شروع داده ها از استاد سخت افزار
- 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. روش شروع بایت
- شروع بایت
- تأیید جعلی (بالا)
- سیگنال شروع (S)
- سیگنال راه اندازی مجدد (Sr)
شکل 20. فرمت داده هنگام ارسال با فرستنده/گیرنده CBUS
- سیگنال شروع
- آدرس CBUS
- بیت جهت انتقال
- تایید پالس همگام سازی
- n بیت داده
- سیگنال 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 بیتی ارسال می کند
- آدرس برده (7 بیت اول)
- رکورد
- آدرس برده (بایت دوم)
- داده ها
- سیگنال شروع مکرر
- سیگنال STOP
با رتبه بندی از 10 اهم تا 1 MOhm)؛
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" باز کنیم: فایل نمونه سیم دیجیتال_پتانسیومتر. بیایید آن را در حافظه آردوینو بارگذاری کنیم.
#عبارتند از
پس از روشن شدن، می بینید که چگونه روشنایی LED به صورت دوره ای افزایش می یابد و سپس خاموش می شود. در این حالت پتانسیومتر را با استفاده از آردوینو از طریق گذرگاه I2C کنترل می کنیم.
کلیدواژه ها را وارد کنید.