сайт для палких паяльників

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

Успехов!

Смотри также:
Translate
Архіви

© 2011-2019 Андрій Корягін, Кременчук - Київ, Україна