مقدمه
- I2C یک ارتباط سریال همزمان است که ارتباط بین دو دستگاه را فراهم میکند.
- این پروتکل یک پروتکل ارباب-برده (master-slave) است که میتواند یک یا چند ارباب و یک یا چند برده داشته باشد، درحالی که پروتکل SPI تنها یک ارباب دارد.
- این پروتکل عموماً برای ارتباطات مسافت کوتاه استفاده میشود.
- دستگاه I2C یک آدرس یکتای ۷ بیتی یا ۱۰ بیتی دارد. بنابراین، برای دسترسی به این دستگاهها، ارباب باید آنها را با آدرس ۷ بیتی یا ۱۰ بیتیشان خطاب قرار دهد.
- I2C کاربردهای فراوانی مانند خواندن RTC (ساعت بلادرنگ)، دسترسی به حافظههای EEPROM خارجی دارد. همچنین از این پروتکل برای ماژولهای سنسور مانند ژیرو، مگنومتر و… به کار میرود.
- این ارتباط همچنین با نام رابط دو سیمه Two Wire Interface) TWI) نیز شناخته میشود.
I2C در رزبریپای
- رزبریپای یک پردازندهی Broadcom دارد که دارای یک کنترلر سریال BSC) Broadcom) میباشد. این کنترلر، یک کنترلر BSC ارباب با مد سریع (400Kb/s) میباشد. گذرگاه (باس) BSC سازگار با گذرگاه I2C فیلیپس میباشد.
- از هردو آدرسدهی ۷ بیتی و ۱۰ بیتی پشتیبانی میکند.
- همچنین دارای یک ارباب BSC2 میباشد که اختصاصا برای ارتباط با HDMI قرار داده شده و نباید در دسترس کاربر قرار گیرد.
- گذرگاه/رابط I2C برای ارتباط با دستگاههای خارجی نظیر RTC ،MPU6050، مغناطیسسنج و … تنها با ۲ خط به کار گرفته میشود. در صورت داشتن آدرسهای مختلف میتوان از طریق I2C به دستگاههای بیشتری نیز وصل شد.
برای دسترسی به گذرگاه I2C در رزبریپای، باید مقداری پیکربندی انجام گیرد. رزبریپای دارای پین I2C بوده که در ادامه خواهد آمد.
پینهای I2C رزبریپای
پیکربندیهای رزبریپای
پیش از برقراری ارتباط دستگاههای I2C با رزبریپای، مقداری پیکربندی اولیه باید انجام داد. این پیکربندیها در زیر آمده است.
اولا، باید I2C رزبریپای را فعال کنیم. این کار را از طریق ترمینال با دستور زیر شروع میکنیم.
sudo raspi-config
گزینهی Interface Configurations را انتخاب کنید.
در Interfacing Options، گزینهی I2C را انتخاب کنید.
I2C را فعال کنید.
هنگامی که درخواست راهاندازی مجدد را داد، Yes را انتخاب کنید.
حال پس از راهاندازی رزبریپای، حالت کاربر (user-mode) پورت I2C را با دستور زیر چک میکنیم.
ls /dev/*i2c*
رزبریپای نام پورت I2C را نمایش میدهد.
پاسخ فوق مد کاربر رابط I2C را نشان میدهد. نسخههای قدیمیتر رزبریپای ممکن است پورت مد کاربر را به صورت i2c-0 نشان دهند.
جستجو یا تست دستگاه I2C روی رزبریپای
اکنون میتوان هر دستگاه I2C متصل به بورد رزبریپای را با نصب i2c tools جستجو و یا تست کنید. میتوان با برنامه مدیریت پکیجهای apt برنامه i2c tools را نصب کرد. دستور زیر را در ترمینال رزبریپای وارد کنید.
sudo apt-get install -y i2c-tools
اکنون هر دستگاه مبتنی بر I2C را که میخواهید به پورت مد کاربر وصل کنید و با استفاده از دستور زیر آن پورت را جستجو کنید.
sudo i2cdetect -y 1
این دستور آدرس دستگاه را به عنوان پاسخ برمیگرداند. مثلا در اینجا، ما یک دستگاه MPU6050 مبتنی بر I2C را به رزبریپای وصل کرده و سعی در شناسایی آن داریم، روند این کار در شکل زیر آمده است.
دستور i2cdetect پورت I2C را برای گرفتن آدرس دستگاه متصل به آن جستجو میکند.
اگر هیچ دستگاهی به پورت I2C متصل نباشد، این دستور مقدار (- -) را برمیگرداند.
میتوان همچنین داده دستگاه I2C را با دستورات زیر دریافت کرد و یا آن را ست کرد.
i2cget, i2cset, ...
مثال
sudo i2cget -y I2C_user_mode_Port address_of_device Register_addresssudo i2cget 1 0x68 0x01
sudo i2cget 1 0x68 0x01
این دستور داده موجود در رجیستر با آدرس 0x01 را برمیگرداند.
دسترسی به دستگاههای I2C با استفاده از SMBus
میتوان با استفاده از SMBus به گذرگاه I2C رزبریپای دسترسی یافت. SMBus زیرمجموعهای از گذرگاه/رابط I2C میباشد. SMBus پشتیبانی از دستگاههای مبتنی بر I2C را فراهم میکند. میتوان هنگام نوشتن برنامه برای دسترسی به دستگاه I2C، از دستورات SMBus بهره برد.
هنگام توسعه برنامه برای ارتباط I2C با رزبریپای در پایتون، از پکیج کتابخانهی SMBus استفاده کنید که پشتیبانی قدرتمندی برای دسترسی به دستگاههای I2C فراهم میکند. بنابراین، باید با استفاده از برنامه مدیریت پکیجهای SMBus ،apt را برای پایتون اضافه کنیم.
sudo apt-get install python-smbus
- منبع: ترجمه از سایت electronicwings.com
اگر آموزش «I2C در رزبریپای» براتون مفید واقع شده ما را نیز دعا کنید و اگر خواستین میتوانید از محتوای رایگان آموزشی حمایت مالی کنید. همچنین نظرات، پیشنهادات و درخواستهای خود را در کامنتها ⇓ بنویسید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.