К СВЕДЕНИЮ
-
Контроллер
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();