Raspberry-Pi - I2C (TWI)


20.11.2014

Raspberry Pi B имеет две шины I2C (TWI), которые выведены на различные разъемы. Линии SDA, SCL шины 1 выведены на разъем P1. SDA, SCL шины 0 выведены на разъем P5.

P5:

RaspberryPi_B_Rev2_P5 RaspberryPi_B_Rev2_I2C0

P1:

RaspberryPi_B_Rev2_I2C1

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

Успехов!

Смотри также:

Коментарі:

Додати коментар

* - обов'язкові поля

Архіви