This documentation is out of date.

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

Difference between revisions of "CANNY 7, I²C Driver"

From CANNY Wiki
Jump to: navigation, search
[unchecked revision][unchecked revision]
m (Support moved page CANNY 7 I²C Driver to CANNY 7, I²C Driver without leaving a redirect)
(Смотри также)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
=== Общее описание ===
+
=== General Description ===
  
В качестве линий связи (SDA и SCL) может быть назначена любая пара каналов контроллера CANNY 7. При этом, данные каналы должны быть подтянуты к напряжению 5В резисторами номиналом от 1 кОм до 10 кОм снаружи. Особенность реализации протокола '''[https://en.wikipedia.org/wiki/I%C2%B2C I²C]''' в контроллерах CANNY7 состоит в том, что CANNY7 может выступать только в качестве ведущего (Master) узла сети и обмен данными между устройствами, который может быть как одно- так и двунаправленным, происходит отдельными сеансами, с максимальной длиной сообщения I²C внутри одного сеанса равной 16 байтам, т. е. открытие одновременно несколько сеансов с разными устройствами не допускается. Скорость обмена фиксированная и составляет 100 кбит/с. Общее число ведомых устройств на линии может достигать нескольких десятков.
+
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 '''[https://en.wikipedia.org/wiki/I%C2%B2C 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 в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации драйвера I²C, для задействованных в его работе каналов, изменение значений в связанных с ними регистрах драйвера дискретного ввода-вывода будет проигнорировано контроллером.
+
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 Driver Registers ===
  
Ниже приведено описание допустимых значений регистров управления работой драйвера I²C.
+
The following are descriptions of valid register values for I²C driver control operation.
  
Регистры конфигурации драйвера I²C.
+
I²C Driver Configuration Registers.
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
|- align="center" valign="top"
 
|- align="center" valign="top"
!width="250px"|Адрес
+
!width="250px"|Address
!Ожидаемые значения
+
!Expected Values
 
|- valign="top"
 
|- valign="top"
 
|
 
|
 
{|border="0" align="left"
 
{|border="0" align="left"
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр адреса I²C
+
|style="padding-left:0.5em;"|I²C Address Setup register
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 25: Line 25:
 
|width="70px" style="padding-left:0.5em;"|2...254
 
|width="70px" style="padding-left:0.5em;"|2...254
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|четное число, адрес slave-устройства, с которым будет производиться обмен данными по шине I²C.
+
|style="padding-left:0.5em;"|even number, slave-node address , which will have data exchange on the I²C bus.
 
|}
 
|}
 
|- valign="top"
 
|- valign="top"
Line 31: Line 31:
 
{|border="0" align="left"
 
{|border="0" align="left"
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр активации драйвера I²C
+
|style="padding-left:0.5em;"|I²C Enable Register 
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 38: Line 38:
 
|width="70px" style="padding-left:0.5em;"|1...65535
 
|width="70px" style="padding-left:0.5em;"|1...65535
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|активировать драйвер I²C, передать ему управление каналами контроллера, используемыми в качестве линий SDA и SCL;
+
|style="padding-left:0.5em;"|activate I²C driver , give it control of the controller channels, used as the SDA and SCL lines;
 
|- valign="top"
 
|- valign="top"
 
|width="70px" style="padding-left:0.5em;"|0
 
|width="70px" style="padding-left:0.5em;"|0
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|дезактивировать драйвер I²C, вернуть управление каналами драйверу ввода-вывода и разрешить изменения их состояний из функциональной диаграммы.
+
|style="padding-left:0.5em;"|deactivate I²C driver, return control of the channels to IO driver and allow to change their states from the functional diagram.
 
|}
 
|}
 
|- valign="top"
 
|- valign="top"
 
|
 
|
 
{|border="0" align="left"
 
{|border="0" align="left"
|style="padding-left:0.5em;"|Регистр номера канала SDA драйвера I²C
+
|style="padding-left:0.5em;"|I²C SDA IO Channel Select Register
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 54: Line 54:
 
|width="70px" style="padding-left:0.5em;"|0...10
 
|width="70px" style="padding-left:0.5em;"|0...10
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|установить номер канала контроллера для использования драйвером I²C в качестве линии передачи данных.
+
|style="padding-left:0.5em;"|set controller channel number to use as I²C driver data transmission line.
 
|}
 
|}
 
|- valign="top"
 
|- valign="top"
 
|
 
|
 
{|border="0" align="left"
 
{|border="0" align="left"
|style="padding-left:0.5em;"|Регистр номера канала SCL драйвера I²C
+
|style="padding-left:0.5em;"|I²C SCL IO Channel Select Register
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 66: Line 66:
 
|width="70px" style="padding-left:0.5em;"|0...10
 
|width="70px" style="padding-left:0.5em;"|0...10
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|установить номер канала контроллера для использования драйвером I²C в качестве линии передачи тактирующих импульсов.
+
|style="padding-left:0.5em;"|set controller channel number to be used as I²C driver timing pulse transmission line.
 
|}
 
|}
 
|}
 
|}
  
 
{|
 
{|
|valign="top" style="padding-left:0.5em;"|''Примечание:''
+
|valign="top" style="padding-left:0.5em;"|''Note:''
|valign="top" style="padding-left:0.5em;"|''Для линии SDA и линии SCL должны быть назначены отдельные каналы контроллера.''
+
|valign="top" style="padding-left:0.5em;"|''Individual controller channels must be assigned for SDA and SCL lines.''
 
|}
 
|}
  
Регистры диагностики драйвера I²C.
+
I²C driver diagnostic registers.
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
|- align="center" valign="top"
 
|- align="center" valign="top"
!width="250px"|Адрес
+
!width="250px"|Address
!Возвращаемые значения
+
!Return values
 
|- valign="top"
 
|- valign="top"
 
|
 
|
 
{|border="0" align="left"
 
{|border="0" align="left"
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр ошибки приема/передачи данных I²C
+
|style="padding-left:0.5em;"|I²C Error Register 
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 91: Line 91:
 
|width="70px" style="padding-left:0.5em;"|1
 
|width="70px" style="padding-left:0.5em;"|1
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|во время приема или отправки сообщения I²C произошла ошибка;
+
|style="padding-left:0.5em;"|an error occurred while sending or receiving I²C messages;
 
|- valign="top"
 
|- valign="top"
 
|width="70px" style="padding-left:0.5em;"|0
 
|width="70px" style="padding-left:0.5em;"|0
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|драйвер работает в нормальном режиме.
+
|style="padding-left:0.5em;"|the driver is operating normally.
 
|}
 
|}
 
|}
 
|}
  
Регистры приема драйвера I²C.
+
I²C Receive Registers.
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
|- align="center" valign="top"
 
|- align="center" valign="top"
!width="250px"|Адрес
+
!width="250px"|Address
!Возвращаемые значения
+
!Return values
 
|- valign="top"
 
|- valign="top"
 
|
 
|
 
{|border="0" align="left"
 
{|border="0" align="left"
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр наличия принятых данных I²C
+
|style="padding-left:0.5em;"|I²C Data Set Ready Register
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 115: Line 115:
 
|width="70px" style="padding-left:0.5em;"|1
 
|width="70px" style="padding-left:0.5em;"|1
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|четное число, адрес slave-устройства, с которым будет производиться обмен данными по шине I²C;
+
|style="padding-left:0.5em;"|even number, slave-node address , which will have data exchange on the I²C bus;
 
|- valign="top"
 
|- valign="top"
 
|width="70px" style="padding-left:0.5em;"|0
 
|width="70px" style="padding-left:0.5em;"|0
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|в буфере приема драйвера I²C отсутствуют актуальные данные.
+
|style="padding-left:0.5em;"|no relevant data present in I²C driver receive buffer.
 
|}
 
|}
 
|- valign="top"
 
|- valign="top"
Line 125: Line 125:
 
{|border="0" align="left"
 
{|border="0" align="left"
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр длины принимаемого сообщения I²C
+
|style="padding-left:0.5em;"|I²C Received Length Register
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 132: Line 132:
 
|width="70px" style="padding-left:0.5em;"|0...16
 
|width="70px" style="padding-left:0.5em;"|0...16
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|значение, равное количеству байт, которые должны быть приняты в сообщении I²C.
+
|style="padding-left:0.5em;"|a value equal to the number of bytes that need to be received in I²C communication.
 
|}
 
|}
 
|- valign="top"
 
|- valign="top"
 
|
 
|
 
{|border="0" align="left"
 
{|border="0" align="left"
|style="padding-left:0.5em;"|Регистр принятых данных I²C D1:D0
+
|style="padding-left:0.5em;"|I²C Received Data Register D1:D0
 
|- valign="top"
 
|- valign="top"
 
|style="padding-left:0.5em;"|...
 
|style="padding-left:0.5em;"|...
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр принятых данных I²C D15:D14
+
|style="padding-left:0.5em;"|I²C Received Data Register D15:D14
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 148: Line 148:
 
|width="70px" style="padding-left:0.5em;"|0...65535
 
|width="70px" style="padding-left:0.5em;"|0...65535
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|значения соответствующих байт данных приемного буфера I²C, по два байта на регистр.
+
|style="padding-left:0.5em;"|the values corresponding data bytes I²C receive buffer, two bytes per register.
 
|}
 
|}
 
|}
 
|}
  
Регистры передачи драйвера I²C.
+
I²C Transmit Registers.
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
|- align="center" valign="top"
 
|- align="center" valign="top"
!width="250px"|Адрес
+
!width="250px"|Address
!Ожидаемые значения
+
!Expected Values
 
|- valign="top"
 
|- valign="top"
 
|
 
|
 
{|border="0" align="left"
 
{|border="0" align="left"
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр начала обмена данными I²C
+
|style="padding-left:0.5em;"|I²C Request To Send Register
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 168: Line 168:
 
|width="70px" style="padding-left:0.5em;"|1
 
|width="70px" style="padding-left:0.5em;"|1
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|загрузить данные из регистров передачи в буфер передачи / загрузить данные из буфера приема в регистры принятых данных драйвера I²C;
+
|style="padding-left:0.5em;"|load data from the transmit registers in to the transmit buffer / load data from the receive buffer in to I²C receive data registers;
 
|- valign="top"
 
|- valign="top"
 
|width="70px" style="padding-left:0.5em;"|0
 
|width="70px" style="padding-left:0.5em;"|0
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|не загружать данные в буфер передачи / не считывать данные из буфера приема драйвера I²C.
+
|style="padding-left:0.5em;"|do not load data to the transmission buffer / do not read data from I²C receive data registers.
 
|}
 
|}
 
|- valign="top"
 
|- valign="top"
Line 178: Line 178:
 
{|border="0" align="left"
 
{|border="0" align="left"
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр длины передаваемого сообщения I²C
+
|style="padding-left:0.5em;"|I²C Transmit Data Length Register
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 185: Line 185:
 
|width="70px" style="padding-left:0.5em;"|0...16
 
|width="70px" style="padding-left:0.5em;"|0...16
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|количество байт сообщения I²C, которое будет необходимо передать при получении команды на отправку данных.
+
|style="padding-left:0.5em;"|the number of I²C message bytes that will be transmitted when receiving command to send data.
 
|}
 
|}
 
|- valign="top"
 
|- valign="top"
 
|
 
|
 
{|border="0" align="left"
 
{|border="0" align="left"
|style="padding-left:0.5em;"|Регистр передаваемого сообщения I²C D1:D0
+
|style="padding-left:0.5em;"|I²C Transmit Data Register D1:D0
 
|- valign="top"
 
|- valign="top"
 
|style="padding-left:0.5em;"|...
 
|style="padding-left:0.5em;"|...
 
|- valign="top"
 
|- valign="top"
|style="padding-left:0.5em;"|Регистр передаваемого сообщения I²C D15:D14
+
|style="padding-left:0.5em;"|I²C Transmit Data Register D15:D14
 
|}
 
|}
 
|valign="top"|
 
|valign="top"|
Line 201: Line 201:
 
|width="70px" style="padding-left:0.5em;"|0...65535
 
|width="70px" style="padding-left:0.5em;"|0...65535
 
|style="padding-left:0.5em;"|=
 
|style="padding-left:0.5em;"|=
|style="padding-left:0.5em;"|значения соответствующих байт сообщения I²C для передачи, по два байта на регистр.
+
|style="padding-left:0.5em;"|the value corresponding I²C message bytes for transmission, two bytes per register.
 
|}
 
|}
 
|}
 
|}
 
<br clear="all">
 
<br clear="all">
  
=== Особенности работы драйвера I²C ===
+
=== I²C Driver Operation Features ===
  
Обмен данными в сети I²C с использованием контроллера CANNY7 определяется комбинацией значений регистров длинны передаваемого и принимаемого сообщения, установленных пользователем (смотри таблицу).
+
data exchange on I²C network using  CANNY 7 controller is determined by the combination of transmitted and received message length register values set by user (see table).
  
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 
|- align="center" valign="top"
 
|- align="center" valign="top"
!width="250px"|Значение регистра длины передаваемого сообщения I²C
+
!width="250px"|I²C register value of transmitting message length
!Значение регистра длины принимаемого сообщения I²C
+
!I²C register value of receiving message length
!Направление обмена данными
+
!Data exchange direction
 
|- valign="top"
 
|- valign="top"
 
|style="padding-left:0.5em;"| > 0
 
|style="padding-left:0.5em;"| > 0
 
|style="padding-left:0.5em;"| = 0
 
|style="padding-left:0.5em;"| = 0
|style="padding-left:0.5em;"| Только передача данных от CANNY7 (Master) ведомому (Slave) устройству с адресом, указанным в соответствующем регистре.
+
|style="padding-left:0.5em;"| Only data transmission from CANNY7 (Master) to Slave node with the address specified in the relevant register.
 
|- valign="top"
 
|- valign="top"
 
|style="padding-left:0.5em;"| > 0
 
|style="padding-left:0.5em;"| > 0
 
|style="padding-left:0.5em;"| > 0
 
|style="padding-left:0.5em;"| > 0
|style="padding-left:0.5em;"| Передача данных от CANNY7 (Master) ведомому (Slave) устройству с адресом, указанным в соответствующем регистре, и получение от него ответных данных.
+
|style="padding-left:0.5em;"| data transmission from CANNY7 (Master) to Slave node with the address specified in the relevant register, and receiving response data from it.
 
|- valign="top"
 
|- valign="top"
 
|style="padding-left:0.5em;"| = 0
 
|style="padding-left:0.5em;"| = 0
 
|style="padding-left:0.5em;"| > 0
 
|style="padding-left:0.5em;"| > 0
|style="padding-left:0.5em;"| Только прием данных CANNY7 (Master) от ведомого (Slave) устройства с адресом, указанным в соответствующем регистре.
+
|style="padding-left:0.5em;"| Only data reception by CANNY7 (Master) from Slave node with the address specified in the relevant register.
 
|}
 
|}
  
Пример функциональной диаграммы получения данных от датчика температуры TCN75. В процессе работы контроллер выступает в качестве ведущего (Master) узла шины I²C, выполняя опрос датчика температуры 2 раза в секунду.
+
Example functional diagram of the data receiving from TCN75 sensor. In operation, the controller acts as  I²C bus Master node, carrying the temperature sensor interrogation 2 times per second.
  
 
[[File:6_11_3_1.png|center]]
 
[[File:6_11_3_1.png|center]]
  
В этом примере CANNY7 (Master) выступает в качестве приемника, запрашивающего данные, а термодатчик (Slave) — в качестве передатчика. Такое направление передачи данных задается записью в регистры длины передаваемого сообщения I²C (Рег.длины передачи I²C) и длины принимаемого сообщения I²C (Рег.длины приема I2C) значений отличных от «0», соответствующих количеству передаваемых (запроса температуры) и получаемых (значения температуры) данных.
+
In this example CANNY7 (Master) acts as a receiver, requesting data and temperature sensor (Slave) - as a transmitter. This  data transmission direction given by the entry in I²C transmitting message length registers(I²C Transmit Data Length Register) and the length of  I²C receiving message (I²C Received Data Length Register) values other than "0", corresponding to the number of transmitting (temperature request) and receiving (temperature value) data.
  
Для подключения к термодатчику используются каналы контроллера №№8 (SCL) и 9 (SDA). Каждые 500мс в шину, ведомому узлу с адресом 0х90, передается запрос на получение значения температуры. В ответ предполагается получение 2 байт данных.
+
To connect controller to the thermal sensor, channels  #8 (SCL) and #9 (SDA)  used. Every 500ms transmitting a request for temperature value to the slave node with address 0x90. In response is expected to receive two data bytes.
  
При получении данных от термодатчика выполняется их предварительная обработка, результаты которой сохраняются в именованной сети «данные датчика».
+
After receiving data from the temperature sensor is performed pretreatment, then results of which are stored in the network named "sensor data".
  
=== Режим экономии энергии (режим пониженного энергопотребления) ===
+
== See also ==
 
+
Для экономии энергии спецификацией LIN предусмотрена возможность перехода всех узлов сети LIN в режим пониженного энегропотребления. Чаще всего, такой переход инициируется ведущим устройством путем отправки соответствующего сообщения в шину, либо осуществляется ведомыми устройствами самостоятельно, при отсутствии активности на шине в течение определенного интервала времени. Выход из режима сна может быть инициирован любым узлом шины. MASTER-узел инициирует пробуждение шины обычным началом опроса SLAVE-узлов. Пробуждение же по инициативе SLAVE-узла, осуществляется кратковременной установкой на линии потенциала GND.
+
 
+
В драйвере LIN контроллеров CANNY 7 для пробуждения шины MASTER-устройству достаточно начать передачу данных или запросов ведомым устройствам. SLAVE-узлы отправляют запрос на пробуждение шины передачей сообщения с любым идентификатором, но имеющим нулевую длину, т. е. «Регистр сообщения передачи LINх LEN» = 0.
+
 
+
== Смотри также ==
+
 
[[CANNY 7]]
 
[[CANNY 7]]
  
[[Dallas 1-Wire Driver|Dallas® 1-Wire®]]
+
[[CANNY 7, Dallas 1-Wire Driver]]

Latest revision as of 05:14, 21 March 2016

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 Driver Registers

The following are descriptions of valid register values for I²C driver control operation.

I²C Driver Configuration Registers.

Address Expected Values
I²C Address Setup register
2...254 = even number, slave-node address , which will have data exchange on the I²C bus.
I²C Enable Register
1...65535 = activate I²C driver , give it control of the controller channels, used as the SDA and SCL lines;
0 = deactivate I²C driver, return control of the channels to IO driver and allow to change their states from the functional diagram.
I²C SDA IO Channel Select Register
0...10 = set controller channel number to use as I²C driver data transmission line.
I²C SCL IO Channel Select Register
0...10 = set controller channel number to be used as I²C driver timing pulse transmission line.
Note: Individual controller channels must be assigned for SDA and SCL lines.

I²C driver diagnostic registers.

Address Return values
I²C Error Register
1 = an error occurred while sending or receiving I²C messages;
0 = the driver is operating normally.

I²C Receive Registers.

Address Return values
I²C Data Set Ready Register
1 = even number, slave-node address , which will have data exchange on the I²C bus;
0 = no relevant data present in I²C driver receive buffer.
I²C Received Length Register
0...16 = a value equal to the number of bytes that need to be received in I²C communication.
I²C Received Data Register D1:D0
...
I²C Received Data Register D15:D14
0...65535 = the values corresponding data bytes I²C receive buffer, two bytes per register.

I²C Transmit Registers.

Address Expected Values
I²C Request To Send Register
1 = load data from the transmit registers in to the transmit buffer / load data from the receive buffer in to I²C receive data registers;
0 = do not load data to the transmission buffer / do not read data from I²C receive data registers.
I²C Transmit Data Length Register
0...16 = the number of I²C message bytes that will be transmitted when receiving command to send data.
I²C Transmit Data Register D1:D0
...
I²C Transmit Data Register D15:D14
0...65535 = the value corresponding I²C message bytes for transmission, two bytes per register.


I²C Driver Operation Features

data exchange on I²C network using CANNY 7 controller is determined by the combination of transmitted and received message length register values set by user (see table).

I²C register value of transmitting message length I²C register value of receiving message length Data exchange direction
> 0 = 0 Only data transmission from CANNY7 (Master) to Slave node with the address specified in the relevant register.
> 0 > 0 data transmission from CANNY7 (Master) to Slave node with the address specified in the relevant register, and receiving response data from it.
= 0 > 0 Only data reception by CANNY7 (Master) from Slave node with the address specified in the relevant register.

Example functional diagram of the data receiving from TCN75 sensor. In operation, the controller acts as I²C bus Master node, carrying the temperature sensor interrogation 2 times per second.

6 11 3 1.png

In this example CANNY7 (Master) acts as a receiver, requesting data and temperature sensor (Slave) - as a transmitter. This data transmission direction given by the entry in I²C transmitting message length registers(I²C Transmit Data Length Register) and the length of I²C receiving message (I²C Received Data Length Register) values other than "0", corresponding to the number of transmitting (temperature request) and receiving (temperature value) data.

To connect controller to the thermal sensor, channels #8 (SCL) and #9 (SDA) used. Every 500ms transmitting a request for temperature value to the slave node with address 0x90. In response is expected to receive two data bytes.

After receiving data from the temperature sensor is performed pretreatment, then results of which are stored in the network named "sensor data".

See also

CANNY 7

CANNY 7, Dallas 1-Wire Driver