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