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
Tags
dma dc-dc lcd eb-500 raspberry-pi tim wifi eeprom gpio piezo rfid usb encoder capture avr mongodb adc soldering ngnix gps css python options examples ethernet motor atmega sensors bkp exti led meteo mpu-9250 remap solar smd html docker hih-4000 programmator displays mpx4115a battery brushless web pmsm nodemcu watchdog rtc servo uart i2c mpu-6050 pwm usart sms git ssd1331 3d-printer flash nvic books websocket st-link ssd1306 max1674 foc stm32 java-script esp8266 timer bmp280 barometer dht11 rs-232 bluetooth bldc flask bme280
Архіви


