CANNY 7, Драйвер I2C

Материал из CANNY Wiki
Перейти к: навигация, поиск

Общее описание[править]

В качестве линий связи (SDA и SCL) может быть назначена любая пара каналов контроллера CANNY 7. При этом, данные каналы должны быть подтянуты к напряжению 5В резисторами номиналом от 1 кОм до 10 кОм снаружи. Особенность реализации протокола I2C в контроллерах CANNY7 состоит в том, что CANNY7 может выступать только в качестве ведущего (Master) узла сети и обмен данными между устройствами, который может быть как одно- так и двунаправленным, происходит отдельными сеансами, с максимальной длиной сообщения I2C внутри одного сеанса равной 16 байтам, т. е. открытие одновременно несколько сеансов с разными устройствами не допускается. Скорость обмена фиксированная и составляет 100 кбит/с. Общее число ведомых устройств на линии может достигать нескольких десятков.

Драйвер I2C в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации драйвера I2C, для задействованных в его работе каналов, изменение значений в связанных с ними регистрах драйвера дискретного ввода-вывода будет проигнорировано контроллером.

Регистры драйвера I2C[править]

Ниже приведено описание допустимых значений регистров управления работой драйвера I2C.

Регистры конфигурации драйвера I2C.

Регистр Ожидаемые значения
Регистр адреса I2C
2...254 = четное число, адрес slave-устройства, с которым будет производиться обмен данными по шине I2C.
Регистр активации драйвера I2C
≥ 1 = активировать драйвер I2C, передать ему управление каналами контроллера, используемыми в качестве линий SDA и SCL;
0 = дезактивировать драйвер I2C, вернуть управление каналами драйверу ввода-вывода и разрешить изменения их состояний из функциональной диаграммы.
Регистр номера канала SDA драйвера I2C
0...10 = установить номер канала контроллера для использования драйвером I2C в качестве линии передачи данных.
Регистр номера канала SCL драйвера I2C
0...10 = установить номер канала контроллера для использования драйвером I2C в качестве линии передачи тактирующих импульсов.
Примечание: Для линии SDA и линии SCL должны быть назначены отдельные каналы контроллера.

Регистры диагностики драйвера I2C.

Регистр Возвращаемые значения
Регистр ошибки приема/передачи данных I2C
1 = во время приема или отправки сообщения I2C произошла ошибка;
0 = драйвер работает в нормальном режиме.

Регистры приема драйвера I2C.

Регистр Возвращаемые значения
Регистр наличия принятых данных I2C
1 = сообщение успешно получено и доступно в регистрах буфера приема драйвера I2C;
0 = в буфере приема драйвера I2C отсутствуют актуальные данные.
Регистр длины принимаемого сообщения I2C
0...16 = значение, равное количеству байт, которые должны быть приняты в сообщении I2C.
Регистр принятых данных I2C D1:D0
...
Регистр принятых данных I2C D15:D14
0...0xFFFF = значения соответствующих байт данных приемного буфера I2C, по два байта на регистр.

Регистры передачи драйвера I2C.

Регистр Ожидаемые значения
Регистр начала обмена данными I2C
≥ 1 = загрузить данные из регистров передачи в буфер передачи / загрузить данные из буфера приема в регистры принятых данных драйвера I2C;
0 = не загружать данные в буфер передачи / не считывать данные из буфера приема драйвера I2C.
Регистр длины передаваемого сообщения I2C
0...16 = количество байт сообщения I2C, которое будет необходимо передать при получении команды на отправку данных.
Регистр передаваемого сообщения I2C D1:D0
...
Регистр передаваемого сообщения I2C D15:D14
0...0xFFFF = значения соответствующих байт сообщения I2C для передачи, по два байта на регистр.


Особенности работы драйвера I2C[править]

Обмен данными в сети I2C с использованием контроллера CANNY7 определяется комбинацией значений регистров длинны передаваемого и принимаемого сообщения, установленных пользователем (смотри таблицу).

Значение регистра длины передаваемого сообщения I2C Значение регистра длины принимаемого сообщения I2C Направление обмена данными
> 0 = 0 Только передача данных от CANNY7 (Master) ведомому (Slave) устройству с адресом, указанным в соответствующем регистре.
> 0 > 0 Передача данных от CANNY7 (Master) ведомому (Slave) устройству с адресом, указанным в соответствующем регистре, и получение от него ответных данных.
= 0 > 0 Только прием данных CANNY7 (Master) от ведомого (Slave) устройства с адресом, указанным в соответствующем регистре.


Примеры[править]

Пример функциональной диаграммы получения данных от датчика температуры TCN75. В процессе работы контроллер выступает в качестве ведущего (Master) узла шины I2C, выполняя опрос датчика температуры 2 раза в секунду.

6 11 3 1.png

В этом примере CANNY7 (Master) выступает в качестве приемника, запрашивающего данные, а термодатчик (Slave) — в качестве передатчика. Такое направление передачи данных задается записью в регистры длины передаваемого сообщения I2C (Рег.длины передачи I2C) и длины принимаемого сообщения I2C (Рег.длины приема I2C) значений отличных от «0», соответствующих количеству передаваемых (запроса температуры) и получаемых (значения температуры) данных.

Для подключения к термодатчику используются каналы контроллера №№8 (SCL) и 9 (SDA). Каждые 500мс в шину, ведомому узлу с адресом 0х90, передается запрос на получение значения температуры. В ответ предполагается получение 2 байт данных.

При получении данных от термодатчика выполняется их предварительная обработка, результаты которой сохраняются в именованной сети «данные датчика».


Смотри также[править]

CANNY 7

CANNY 7, Драйвер Dallas 1-Wire