Skip to main content

I2C (TWI)

info
  • Контроллер I2C1 подключен к контактам SDA: PA12 и SCL: PA11, и доступен на 2-9 вариантах распиновки GPIO-разъема.

  • Контроллер I2C2 подключен к контактам SDA: PA19 и SCL: PA18, и доступен на 4 варианте распиновки GPIO-разъема.

Для передачи данных по I2C (TWI) интерфейсу в настоящее время используется протокол SMBus. Скорость передачи данных до 100 кГц.

i2cSetup()

Инициализирует функцию передачи данных с использованием I2C интерфейса.

Синтаксис

int i2cSetup(const int i2cBus, const int devId)

Параметры

i2cBus - дескриптор порта I2C, доступные значения:

  • I2C1_BUS - порт I2C1.
  • I2C2_BUS - порт I2C2.

devId - Адрес slave-устройства на шине I2C.

Возврат

Файловый дескриптор порта I2C.

i2cRelease()

Высвобождает ресурсы задействованные функцией передачи данных с использованием I2C интерфейса.

Синтаксис

int i2cRelease(int fd)

Параметры

fd - Файловый дескриптор порта I2C.

Возврат

Ничего.

i2cRead()

Получает данные с устройства напрямую (без выполнения транзакции с регистрами).

Синтаксис

int i2cRead(int fd)

Параметры

fd - Файловый дескриптор порта I2C.

Возврат

Данные полученные от устройства.

i2cReadReg8()

Получает данные из 8-ми битного регистра устройства

Синтаксис

int i2cReadReg8(int fd, int reg)

Параметры

fd - Файловый дескриптор порта I2C.

reg - адрес 8-ми битного регистра.

Возврат

Данные полученные из регистра устройства.

i2cReadReg16()

Получает данные из 16-ти битного регистра устройства

Синтаксис

int i2cReadReg16(int fd, int reg)

Параметры

fd - Файловый дескриптор порта I2C.

reg - адрес 16-ти битного регистра.

Возврат

Данные полученные из регистра устройства.

i2cWrite()

Записывает данные в устройство напрямую (без выполнения транзакции с регистрами).

Синтаксис

int i2cWrite(int fd, int data)

Параметры

fd - Файловый дескриптор порта I2C.

data - данные передаваемые устройству.

Возврат

0 при успешном выполнении, или отрицательное значение в случае ошибки.

i2cWriteReg8()

Записывает данные в 8-ми битный регистр устройства.

Синтаксис

int i2cWriteReg8(int fd, int reg, int data)

Параметры

fd - Файловый дескриптор порта I2C.

reg - адрес 8-ми битного регистра.

data - данные передаваемые устройству.

Возврат

0 при успешном выполнении, или отрицательное значение в случае ошибки.

i2cWriteReg16()

Записывает данные в 16-ти битный регистр устройства.

Синтаксис

int i2cWriteReg16(int fd, int reg, int data)

Параметры

fd - Файловый дескриптор порта I2C.

reg - адрес 16-ти битного регистра.

data - данные передаваемые устройству.

Возврат

0 при успешном выполнении, или отрицательное значение в случае ошибки.

Пример использования функций I2C

Код для обмена данными с модулем ЦАП/АЦП на основе чипа PCF8591, подключенного к шине i2c2.

#include <stdlib.h>
#include "wiringRP.h"
#include "wire.h"

// Глобальные переменные и константы
int i2c1_fd, i2c2_fd;
const int PCF8591_ADR = 0x48;
const int AOUT = 0x40;
const int AIN3 = 0x43;

void setup() {
// Инициализация библиотек wiringRP
if (setupWiringRP(WRP_MODE_SUNXI) < 0)
goto error;

// Инициализация пользовательских объектов
i2c1_fd = i2cSetup(I2C1_BUS, PCF8591_ADR);
i2c2_fd = i2cSetup(I2C2_BUS, PCF8591_ADR);

if (i2c1_fd < 0 || i2c2_fd < 0)
goto error;
return;

error:
onClose(2);
}

void loop() {
// Основной цикл программы
i2cReadReg8(i2c2_fd, AIN3);
int val = i2cReadReg8(i2c2_fd, AIN3);
val = map(val, 0, 255, 120, 255);

i2cWriteReg8(i2c2_fd, AOUT, val);
delay(100);
}

ONDESTROY() {
// Освобождение занятых ресурсов, выключение напряжения на пинах
i2cWriteReg8(i2c1_fd, AOUT, 0);
i2cWriteReg8(i2c2_fd, AOUT, 0);

// Завершение работы библиотек
i2cRelease(i2c1_fd);
i2cRelease(i2c2_fd);
releaseWiringRP();
exit(0); // выход из программы
}

MAIN_WIRINGRP();