This documentation is out of date.

The new version of the documentation is here: https://cannylogic.com/docs

CANNY 7, I²C Driver

From CANNY Wiki
Revision as of 01:48, 18 March 2016 by MEGA (Talk | contribs) (Общее описание)


Jump to: navigation, search

General Description

As communication lines (SDA and SCL) can be assigned to any pair of controller channels. In this case, the data channels must be pulled up to 5V with resistor of 1 k to 10 k outside of he controller. Particularity of I²C protocol implementation in CANNY7 controller is that CANNY7 can only act as a Master node. Data exchange between devices, which can be either mono- or bidirectional, occurs in separate sessions, the maximum message length I²C within one session is 16 bytes, ie opening of multiple sessions with different devices is not allowed. The rate of exchange is fixed at 100 kbit/s. The total number of slaves on the line can reach several tens.

I²C driver operates using the controller channel resources, but has a higher priority than a discrete input-output driver. Thus, upon activation I²C driver, for channels involved in to its operation, changing values in registers associated with digital input-output driver will be ignored by the controller.

Регистры драйвера I²C

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

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

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

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

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

Регистры приема драйвера I²C.

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

Регистры передачи драйвера I²C.

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


Особенности работы драйвера I²C

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

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

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

6 11 3 1.png

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

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

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

Режим экономии энергии (режим пониженного энергопотребления)

Для экономии энергии спецификацией LIN предусмотрена возможность перехода всех узлов сети LIN в режим пониженного энегропотребления. Чаще всего, такой переход инициируется ведущим устройством путем отправки соответствующего сообщения в шину, либо осуществляется ведомыми устройствами самостоятельно, при отсутствии активности на шине в течение определенного интервала времени. Выход из режима сна может быть инициирован любым узлом шины. MASTER-узел инициирует пробуждение шины обычным началом опроса SLAVE-узлов. Пробуждение же по инициативе SLAVE-узла, осуществляется кратковременной установкой на линии потенциала GND.

В драйвере LIN контроллеров CANNY 7 для пробуждения шины MASTER-устройству достаточно начать передачу данных или запросов ведомым устройствам. SLAVE-узлы отправляют запрос на пробуждение шины передачей сообщения с любым идентификатором, но имеющим нулевую длину, т. е. «Регистр сообщения передачи LINх LEN» = 0.

Смотри также

CANNY 7

CANNY 7, Dallas 1-Wire Driver