Установки и использование I2C


Для установки или использования I2C необходима функция pid_ioctl. Доступны следующие команды:

Команда Саб-команда Описание
set mode sm скорость передачи данных: стандартная - 100 Kbps
fm скорость передачи данных: быстрая - 400 Kbps
daddr [A] настройка адреса: адрес локального устройства
saddr [A] настройка адреса: адрес ведомого устройства
get rxlen получение количества отложенных байтов в буфере приема
txlen получение количества отложенных байтов в буфере отправки
error nack получение количества NACK в последней транзакции
bus получение номера ошибки шины в последней транзакции
state 0 - idle, и т.п. - внутренняя операция I2C
req read [N] запрос на чтение
write - запрос на запись
wait запрос на запись и ожидание (требуется "req stop")
stop запрос на прекращение записи данных (требуется "req wait")
reset запрос на сброс шины

Настройка I2C

Вы можете утановить режим связи и адрес устройства при помощи команды "set".

Установить скорость передачи данных

PHPoC предоставляет стандартный и быстрый режимы. Стандартный режим является режимом по умолчанию.

Режим связи Синтаксис
стандартный pid_ioctl($pid, "set mode sm");
быстрый pid_ioctl($pid, "set mode fm");

Настройка адреса устройства

Ведущее устройство I2C использует адрес устройства для выбора ведомого устройства для передачи данных. Для установки своего собственного адреса устройства используется адрес локального. Как установить данные адреса:

Тип Синтаксис
адрес ведомого устройства pid_ioctl($pid, "set saddr [A]");
адрес локального устройства pid_ioctl($pid, "set daddr [A]");

Каждый адрес устройства должен быть введен в двухзначном шестнадцатеричном числе. LSB этого байта всегда равно нулю, потому что PHPoC поддерживает 7-битовую адресацию для I2C. Обратите внимание, что есть некоторые зарезирвированные адреса. Если вы используете эти адреса, PHPoC остановится из-за ошибок.

Адрес (двоичный) Пример (Hexa) Комментарий
7 6 5 4 3 2 1 0
X X X X X X X 1 E1, A3, 1B LSB равно 1
0 0 0 0 X X X X 00 ~ 0F Все 4 верхние биты равны 0
1 1 1 1 X X X X F0 ~ FF Все 4 верхние биты равны 1

Получение статуса/состояния I2C

Вы можете получить статус I2C, используя команду "get".

Получение количества ожидающих байтов в буфере отправки и получения

Ниже показано, как получить количество ожидающих байтов в буфере отправки и получения:

Раздел Синтаксис
Буфер отправки pid_ioctl($pid, "get txlen");
Буфер получения pid_ioctl($pid, "get rxlen");

Получить количество ошибок

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

Раздел Синтаксис
NACK pid_ioctl($pid, "get error nack");
Ошибки шины/bus Error pid_ioctl($pid, "get error bus");

Получение статуса/состояния

Получение состояния I2C происходит следующим образом: 0 будет возвращен при состоянии бездействия(idle), во всех других случаях будут возвращены другие значения.

Раздел Синтаксис
Состояние/State pid_ioctl($pid, "get state");

Использование I2C

Запрос на чтение данных

При помощи данной команды ведущий I2C запрашивает данные из ведомого устройства I2C. После отправки данных, вы сможете прочитать их в ведовом устройстве при помощи функции pid_read.

Раздел Синтаксис
Запрос на чтение данных pid_ioctl($pid, "req read [N]");

Запрос на запись данных

При помощи данной команды ведущий I2C запрашивает запись данных в веломое устройство I2C. Существуют 2 способа:

Раздел Синтаксис
Запрос на запись данных pid_ioctl($pid, "req write");
Запрос на запись данных и ожидание pid_ioctl($pid, "req write wait");
Остановить запись данных pid_ioctl($pid, "req stop");

Когда выполняется команда "req write", ведущий незамедлительно отправляет данные. Таким образом, перед запуском данной команды вам необходимо ввести данные в буфер. С другой стороны, команда "req wait" изменяет состояние шины(bus) на начальное состояние и не меняет его на состояние «stop» до тех пор, пока команда "req stop" не будет запущена. Таким образом, вы можете записывать данные в ведомое устройство, используя функцию pid_write перед выполнением команды "req stop".

Запрос на сброс шины

Когда связь плохая, вы можете сбросить шину I2C при помощи данной команды.

Команда Синтаксис
Запрос на сброс шины pid_ioctl($pid, "req reset");