Raspberry-Pi - I2C (TWI)
Raspberry Pi B має дві шини I2C (TWI), які виведені на різні роз’єми. Лінії SDA, SCL шини 1 виведені на роз’єм P1. SDA, SCL шини 0 виведені на роз’єм P5.
P5:
P1:
I2C налаштування
Для включення I2C шини на Raspberry Pi потрібно виконати операції, що описані нижче.Відредагуємо файл: /etc/modprobe.d/raspi-blacklist.conf:
nano /etc/modprobe.d/raspi-blacklist.conf
Закоментуємо рядок blacklist i2c-bcm2708. Приклад вмісту файлу:
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
Коригуємо файл /etc/modules:
sudo nano /etc/modules
Додаємо рядки:
i2c-bcm2708
i2c-dev
Встановлюємо i2c-tools утиліти:
sudo apt-get install python-smbus i2c-tools
Перезавантажуємо Raspberry Pi:
reboot
Після перезавантаження можемо переглянути всі підключені прилади до шин I2C:
sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
В даному випадку на шині 1 тільки один пристрій за адресою 0x27
Якщо команда выдає помилку: Error: Could not open file `/dev/i2c-0` or `/dev/i2c/0`: No such file or directory
треба додати у файл /boot/config.txt рядок:
dtparam=i2c_arm=on і перезавантажити систему.
Дві шини I2C
Виконуючи команду sudo i2cdetect -y 1 ми вказуємо номер шини I2C, у нашому випадку - 1. Зверніть увагу: у попередніх версіях Raspberry Pi на основний роз’єм може бути виведена шина 0. У нових Raspberry Pi шина 0 виведена на роз’єм P5. Цей роз’єм, зазвичай, не запаяний. При потребі є можливість впаяти роз’єм і використовувати обидві лінії I2C.Утиліти I2C
i2cdetect - дозволяє переглянути адреси усіх підключених до шини I2C пристроїв. Приклад:
i2cdetect -y 1
де 1 - номер шини I2C.
i2cget - зчитує дані з вказаної адреси вказаного пристрою. Приклад:
i2cget -y 1 0x27 0xA0
де: 1 - номер шини I2C; 0x27 - адреса пристрою; 0xA0 - адреса, з якої виконується зчитування.
i2cset - записує дані до вказаної адреси вказаного пристрою. Приклад:
i2cset -y 1 0x27 0xA0 0xFF
де: 1 - номер шини I2C; 0x27 - адреса пристрою; 0xA0 - адреса, до якої виконується запис; 0xFF - значення, що записуються.
Проблеми I2C. Зменшення швидкості шини I2C (TWI)
Деякі повільні пристрої при роботі з шиною I2C можуть виконувати зупинку тактування (clock stretching). Це прописано в протоколі I2C, але на момент написання статті не підтримується драйверами Raspberry Pi. Це може стати причиною неможливості зчитування даних або їх спотворення. Зазвичай, робоча частота шини I2C - 100КГц. Для забезпечення стабільної роботи доводиться знижати її. Це можна зробити, вказавши потрібну швидкість в одному з конфіг-файлів у директорії /etc/modprobe.d/ . Наприклад, створивши файл i2c.conf таким чином:
echo options i2c_bcm2708 baudrate=32000 > /etc/modprobe.d/i2c.conf
де, 32000 - частота роботи шини. Після змін у конфігурації треба перезавантажити Raspberry Pi.
Якщо Вам потрібно працювати зі швидкими та повільними пристроями, які підключені до однієї шини, зменшення частоти роботи шини може викликати небажані затримки. Існує інший шлях вирішення проблеми з повільними пристроями. Ви можете скачати і використовувати утиліти, які можуть уповільнювати роботу шини I2C і повертати її в початковий стан. Скачайте архів з цими програмами:
wget http://www.hobbytronics.co.uk/download/rpi_i2c.zip
Розпакуйте архів:
unzip rpi_i2c.zip
Добавимо атрибут можливості запуску:
chmod +x i2c_fast i2c_slow
Тепер, перед роботою з повільними пристроями, можемо уповільнити швидкість шини I2C, а після - повернути до початкового стану:
sudo ./i2c_slow
i2cget -y 1 0x27 0xA1
sudo ./i2c_fast
Успіхів.
Дивись також:
- Raspberry Pi — що це таке?
- Raspberry Pi — GPIO
- Raspberry Pi — UART
- Raspberry Pi — FT232
- Raspberry Pi — PWM і Сервопривод
- Raspberry Pi — DHT11
- Raspberry Pi - FM Transmitter
- Прошивка AVR мікроконтролерів за допомогою Raspberry Pi
- Raspberry Pi — LCD display 1602
- Raspberry Pi — WiFi
- Raspberry-Pi — I2C (TWI)
- Raspberry Pi - DS18B20
- Raspberry Pi Camera
- nRF24L01+ ATMEGA + Raspberry Pi
- BMP180 + Raspberry Pi + WH1602
- Wi-Fi Метео станція
- Raspbian. Apache + PHP + Python + MySQL
- Встановлюємо Raspbian на Raspberry Pi без клавіатури та монітору
- IR-дистанційне керування. Використання LIRC у Python
- Raspberry Pi. Raspbian. Відправлення пошти через аккаунт Gmail
- Neoway M590 – GSM/GPRS modem
- MPU-6050 – гіроскоп – акселерометр
- HMC5883L Магнітометр
- PWM контролер з інтерфейсом I2С на базі мікросхеми PCA9685
- Метеостанція на Raspberry Pi своїми руками
- Raspberry Pi. Live-stream video
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви