I2C (TWI)

К СВЕДЕНИЮ

  • Контроллер 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();


69 просмотров0 комментариев

Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Разделы

Навигация

ВойтиРегистрация