Общее описание
В качестве линий связи (SDA и SCL) может быть назначена любая пара каналов контроллера CANNY 7. При этом, данные каналы должны быть подтянуты к напряжению 5В резисторами номиналом от 1 кОм до 10 кОм снаружи. Особенность реализации протокола I²C в контроллерах CANNY7 состоит в том, что CANNY7 может выступать только в качестве ведущего (Master) узла сети и обмен данными между устройствами, который может быть как одно- так и двунаправленным, происходит отдельными сеансами, с максимальной длиной сообщения I²C внутри одного сеанса равной 16 байтам, т. е. открытие одновременно несколько сеансов с разными устройствами не допускается. Скорость обмена фиксированная и составляет 100 кбит/с. Общее число ведомых устройств на линии может достигать нескольких десятков.
Драйвер I²C в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации драйвера 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 раза в секунду.
В этом примере 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
Dallas® 1-Wire®