Общее описание[править]
Два из восемнадцати каналов ввода-вывода CANNY 5 nano, а именно каналы №2 и №4, поддерживают работу в режиме приема/передачи данных, с использованием интерфейса I2C, и могут быть использованы для связи контроллеров с внешним оборудованием поддерживающим данный вид связи.
Контроллер CANNY5 nano может выступать только в качестве ведущего узла сети, при этом он имеет возможность как передавать данные ведомым устройствам, так и отправлять запросы на получение данных от них. Обмен данными между устройствами происходит отдельными сеансами, с максимальной длиной сообщения I2C внутри одного сеанса равной 32 байтам, т. е. открытие одновременно несколько сеансов с разными устройствами не допускается. Скорость обмена фиксированная и составляет 100 кбит/с. Общее число ведомых устройств на линии может достигать нескольких десятков.
Драйвер I2C в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации драйвера I2C, для задействованных в его работе каналов, изменение значений в связанных с ними регистрах драйвера дискретного ввода-вывода будет проигнорировано контроллером.
Каналы №№2 и 4 активируются совместно, одновременно с установкой конфигурации драйвера I2C контроллера, т. е. его активацией. Канал №2 используется в качестве линии данных (SDA), канал №4 — как тактирующий канал (SCL).
Примечание:
|
Активация драйвера I2C автоматически переводит каналы №2 и №4 в режим передачи/приема данных, делая невозможным их использование в качестве дискретных входов или выходов драйвера ввода-вывода, т. к. драйвер I2C имеет более высокий приоритет.
|
Регистры драйвера I2C[править]
Ниже приведено описание допустимых значений регистров управления работой драйвера I2C.
Регистры конфигурации драйвера I2C.
Регистр
|
Ожидаемые значения
|
|
|
Регистр активации драйвера I2C
|
|
≥ 1
|
=
|
активировать драйвер I2C, передать ему управление каналами контроллера, используемыми в качестве линий SDA и SCL;
|
0
|
=
|
дезактивировать драйвер I2C, вернуть управление каналами драйверу ввода-вывода и разрешить изменения их состояний из функциональной диаграммы.
|
|
Регистры диагностики драйвера I2C.
Регистр
|
Возвращаемые значения
|
Регистр ошибки приема/передачи данных I2C
|
|
1
|
=
|
во время приема или отправки сообщения I2C произошла ошибка;
|
0
|
=
|
драйвер работает в нормальном режиме.
|
|
Регистр переполнения буфера передачи I2C
|
|
1
|
=
|
ошибка, буфер I2C переполнен;
|
0
|
=
|
переполнение буфера приема отсутствует.
|
|
Регистр готовности буфера передачи данных I2C
|
|
1
|
=
|
буфер передачи данных драйвера I2C свободен и готов к загрузке новых данных;
|
0
|
=
|
буфер передачи данных драйвера I2C не готов.
|
|
Регистры приема драйвера I2C.
Регистр
|
Возвращаемые значения
|
Регистр наличия принятых данных I2C
|
|
1
|
=
|
сообщение успешно получено и доступно в регистрах буфера приема драйвера I2C;
|
0
|
=
|
в буфере приема драйвера I2C отсутствуют актуальные данные.
|
|
Регистр длины принимаемого сообщения I2C
|
|
0...32
|
=
|
значение, равное количеству байт, которые должны быть приняты в сообщении I2C.
|
|
Регистр принятых данных I2C D1:D0
|
...
|
Регистр принятых данных I2C D31:D30
|
|
0...0xFFFF
|
=
|
значения соответствующих байт данных приемного буфера I2C, по два байта на регистр.
|
|
Регистры передачи драйвера I2C.
Регистр
|
Ожидаемые значения
|
Регистр начала обмена данными I2C
|
|
≥ 1
|
=
|
загрузить данные из регистров передачи в буфер передачи / загрузить данные из буфера приема в регистры принятых данных драйвера I2C;
|
0
|
=
|
не загружать данные в буфер передачи / не считывать данные из буфера приема драйвера I2C.
|
|
Регистр длины передаваемого сообщения I2C
|
|
0...32
|
=
|
количество байт сообщения I2C, которое будет необходимо передать при получении команды на отправку данных.
|
|
Регистр передаваемого сообщения I2C D1:D0
|
...
|
Регистр передаваемого сообщения I2C D31:D30
|
|
0...0xFFFF
|
=
|
значения соответствующих байт сообщения I2C для передачи, по два байта на регистр.
|
|
Особенности работы драйвера I2C[править]
Для учета особенностей передачи адресов I2C-устройств, в Регистр адерса I2C регистров конфигурации драйвера контроллера необходимо записывать значение адреса, указанного в документации на Slave-устройство, со сдвигом влево на 1 бит. Например, если в документации устройства указан адрес 0х68, то в Регистр адреса I2C нужно записать значение (0x68 << 1) = 0хD0.
Обмен данными в сети I2C с использованием контроллера CANNY 5 nano определяется комбинацией значений регистров длинны передаваемого и принимаемого сообщения, установленных пользователем (смотри таблицу).
Значение регистра длины передаваемого сообщения I2C
|
Значение регистра длины принимаемого сообщения I2C
|
Направление обмена данными
|
> 0
|
= 0
|
Только передача данных от CANNY 5 nano (Master) ведомому (Slave) устройству с адресом, указанным в соответствующем регистре.
|
> 0
|
> 0
|
Передача данных от CANNY 5 nano (Master) ведомому (Slave) устройству с адресом, указанным в соответствующем регистре, и получение от него ответных данных.
|
= 0
|
> 0
|
Только прием данных CANNY 5 nano (Master) от ведомого (Slave) устройства с адресом, указанным в соответствующем регистре.
|
Пример функциональной диаграммы получения данных от датчика температуры TCN75. В процессе работы контроллер выступает в качестве ведущего (Master) узла шины I2C, выполняя опрос датчика температуры 2 раза в секунду. В этом примере CANNY5 nano (Master) выступает в качестве приемника, запрашивающего данные, а термодатчик (Slave) — в качестве передатчика. Такое направление передачи данных задается записью в регистры длины передаваемого сообщения I2C (Рег.длины передачи I2C) и длины принимаемого сообщения I2C (Рег.длины приема I2C) значений отличных от «0», соответствующих количеству передаваемых (запроса температуры) и получаемых (значения температуры) данных.
Каждые 500мс в шину, если буфер передачи CANNY5 nano свободен и готов к приему нового сообщения, ведомому узлу с адресом 0х90, передается запрос на получение значения температуры. В ответ предполагается получение 2 байт данных.
При получении данных от термодатчика выполняется их предварительная обработка, результаты которой сохраняются в именованной сети «данные датчика».
ВНИМАНИЕ!
|
Канал №4 CANNY5 nano параллельно используется для управления встроенным контрольным светодиодом (LED — смотри принципиальную электрическую схему контроллера), в следствие чего, его работа в режиме I2C требует дополнительной подтяжки к напряжению +5В с помощью внешнего резистора, номиналом 400...600 Ом, либо удаления с платы CANNY5 nano контрольного светодиода.
|
CANNY 5 nano