CANNY 5.2 duo, Драйвер шлюза CAN

Материал из CANNY Wiki
Перейти к: навигация, поиск

Общее описание[править]

Используя драйвер шлюза CAN возможно организовать высокоскоростную асинхронную ретрансляцию сообщений между аппаратными CAN-интерфейсами контроллера с возможностью автоматической модификации ретранслируемых сообщений.


Драйвер шлюза CAN позволяет организовать индивидуальную обработку полученных сообщений CAN путем настройки восьми правил отбора.

Каждое правило позволяет отбирать сообщения CAN по следующим, задаваемым пользователем признакам:

  • номер интерфейса CAN по которому сообщение поступило в контроллер;
  • идентификатор поступившего сообщения (Значение отбора).


При поступлении сообщения удовлетворяющего заданным признакам, драйвер позволяет выполнить одно из следующих действий:

  • ретранслировать сообщение на другой интерфейс CAN контроллера без изменений;
  • модифицировать полученное сообщение, а затем ретранслировать сообщение на другой интерфейс CAN контроллера;
  • отбросить сообщение.

Модификация сообщения производится путем замены по маске любых бит исходного сообщения включая значения его идентификатора, длины и байт данных.


Для всех сообщений, поступивших с определенного интерфейса CAN, но не удовлетворяющих признакам ни одного из включенных правил отбора шлюза возможно задать одно из следующих действий:

  • ретранслировать сообщение на другой интерфейс CAN контроллера без изменений;
  • отбросить сообщение.


Для работы драйвера шлюза CAN необходимо задать конфигурацию драйверов обоих CAN-интерфейсов контроллера, при этом заданные для интерфейсов конфигурации CAN могут отличаться.


При включенном драйвере шлюза CAN, средствами пользовательской диаграммы возможно, используя регистры Драйвера CAN0 и Драйвера CAN1:

  • отправлять сообщения через любой из CAN-интерфейсов контроллера в обычном режиме;
  • получать сообщения CAN удовлетворяющие правилам отбора установленным для соответствующего интерфейса CAN драйвером шлюза CAN.


В процессе работы пользовательской диаграммы возможно многократно изменять любые параметры конфигурации драйвера шлюза CAN средствами пользовательской диаграммы, организуя таким образом, с некоторыми временными ограничениями, динамический режим работы шлюза.

Регистры драйвера[править]

Ниже приведено описание допустимых значений регистров управления работой драйвера шлюза CAN, позволяющих установить параметры работы контроллера для высокоскоростной асинхронной ретрансляции сообщений между аппаратными CAN-интерфейсами.

Общие регистры драйвера шлюза CAN.

Регистр Ожидаемые значения
Регистр включения драйвера шлюза CAN
≥ 1 = драйвера шлюза включен;
= 0 = драйвер шлюза отключен.
Регистр обновления конфигурации шлюза CAN
≥ 1 = применить новые настройки драйвера шлюза CAN (см.примечание);
= 0 = не обновлять настройки драйвера шлюза CAN.
Регистр включения фильтрующего режима шлюза CAN для интерфейса CANx
≥ 1 = включить фильтрующий режим шлюза CAN для соответствующего интерфейса: ретранслировать на второй CAN-интерфейс контроллера и передавать в функциональную диаграмму только те CAN-сообщения, которые попали в отборы шлюза, остальные сообщения отбрасывають;
= 0 = фильтрующий режим шлюза CAN для соответствующего интерфейса отключен: автоматически ретранслировать не попавшие в отборы шлюза сообщения на второй CAN-интерфейс контроллера в неизменном виде.
Регистр включения режима логирования шлюза CAN для интерфейса CANx
≥ 1 = включить режим логирования шлюза CAN для соответствующего интерфейса: передавать в функциональную диаграмму (в драйвер CANх) все принимаемые по данному интерфейсу CAN-сообщения, при этом работа драйвера шлюза в части отборов, замены и ретрансляции сообщений CAN осуществляется согласно соответствующим настройкам шлюза указанного CAN-интерфейса;
= 0 = режим логирования шлюза CAN для соответствующего интерфейса отключен: в диаграмму (в драйвер CANх) передаются только CAN-сообщения, которые попали в отборы шлюза, остальные сообщения отбрасываются.


Регистры отбора драйвера шлюза CAN.

Общие регистры отбора драйвера шлюза CAN.

Регистр Ожидаемые значения
Регистр включения отбора X шлюза CAN
≥ 1 = включить соответствующий отбор шлюза CAN;
= 0 = соответствующий отбор шлюза CAN отключен.
Регистр установки номера CAN-интерфейса отбора X шлюза CAN
= 0 = применять соответствующий отбор к сообщениям, поступающим в контроллер через интерфейс CAN0;
= 1 = применять соответствующий отбор к сообщениям, поступающим в контроллер через интерфейс CAN1.
Регистр установки запрета ретрансляции отбора Х шлюза CAN
≥ 1 = отбрасывать все сообщения удовлетворяющие значению соответствующего отбора;
= 0 = разрешить обработку и автоматическую ретрансляцию на другой CAN интерфейс всех сообщений удовлетворяющих значению соответствующего отбора.


Регистры значений отборов драйвера шлюза CAN.

Значение отбора - параметр, при удовлетворении которому, поступившие CAN-сообщение отбирается из общего потока данных для специальной обработки.

Регистр Ожидаемые значения
Регистр установки значения отбора Х шлюза, CAN IDL
0...0xFFFF = значение младшей части идентификатора (биты 0...10 идентификатора стандартного формата или биты 0...15 идентификатора расширенного формата) CAN-сообщения удовлетворяющего соответствующему отбору.
Регистр установки значения отбора Х шлюза, CAN IDH
0...0x1FFF = значение старшей части идентификатора (биты 16...28 идентификатора расширенного формата) CAN-сообщения удовлетворяющего соответствующему отбору.


Регистры масок отборов драйвера шлюза CAN.

Маска отбора - группа значений, биты которых определяют подлежащие модификации при ретрансляции шлюзом части сообщения попавшего в соответствующий отбор. При значении бита маски равном "0", соответствующий бит принятого сообщения будет ретранслирован на другой интерфейс без изменений. При значении бита маски равном "1", соответствующий бит принятого сообщения будет заменен при ретрансляции соответствующим битом из значения Замены отбора

Регистр Ожидаемые значения
Регистр установки маски отбора X шлюза, CAN IDL
0...0xFFFF = установить значение маски младшей части идентификатора CAN-сообщения (биты 0...10 идентификатора стандартного формата или биты 0...15 идентификатора расширенного формата) соответствующего отбора.
Регистр установки маски отбора X шлюза, CAN IDH
0...0x1FFF = установить значение маски старшей части идентификатора CAN-сообщения (биты 16...28 идентификатора расширенного формата) соответсвующего отбора.
Регистр установки маски отбора X шлюза, CAN ERL
0...0xFFFF = установить значение маски регистра ERL CAN-сообщения соотвествующего отбора.
Регистр установки маски отбора X шлюза, CAN D1:D0
...
Регистр установки маски отбора X шлюза, CAN D7:D6
0...0xFFFF = установить значение маски соответствующих байт данных CAN-сообщения соответствующего отбора.


Регистры замены отборов драйвера шлюза CAN.

Замена отбора - группа значений, биты которых определяют результат модификации попавшего в соответствующий отбор ретранслируемого сообщения. При значении бита замены равном "0", соответствующий бит ретранслируемого сообщения будет заменен нулем, при значении бита замены равном "1", соответствующий бит ретранслируемого сообщения будет заменен единицей. Замена будет применена лишь к тем битам, значение маски отбора для которых равно "1".

Регистр Ожидаемые значения
Регистр установки замены отбора X шлюза, CAN IDL
0...0xFFFF = установить значение замены младшей части идентификатора CAN-сообщения (биты 0...10 идентификатора стандартного формата или биты 0...15 идентификатора расширенного формата) соответствующего отбора.
Регистр установки замены отбора X шлюза, CAN IDH
0...0x1FFF = установить значение замены старшей части идентификатора CAN-сообщения (биты 16...28 идентификатора расширенного формата) соответсвующего отбора.
Регистр установки замены отбора X шлюза, CAN ERL
0...0xFFFF = установить значение замены регистра ERL CAN-сообщения используемого отбора.
Регистр установки замены отбора X шлюза, CAN D1:D0
...
Регистр установки замены отбора X шлюза, CAN D7:D6
0...0xFFFF = установить значения замены соответствующих байт данных CAN-сообщения соответствующего отбора.


Блок-схема работы контроллера в режиме CAN-шлюза[править]

14 8 2 1.png

Примеры[править]

Пример 1: Запрет ретрансляции CAN-сообщений с заданным идентификатором.

14 8 3 1.png

Все сообщения, кроме сообщений с ID=0x0123, пришедшие с CAN0 передаются на CAN без изменений и в диаграмму не попадают. Данные сообщений с ID=0x0123 могут быть доступны в пользовательской диаграмме, но не ретранслируются в интерфейс CAN1.

Все сообщения пришедшие с CAN1 передаются на CAN0 без изменений, в диаграмму не попадают.

Пример 2: Статический шлюз: ретрансляция CAN-сообщения с изменением данных.

14 8 3 2.png

Все сообщения, кроме сообщений с ID=0х0120, пришедшие с CAN0 передаются в CAN1 без изменений и в диаграмму не попадают. Данные сообщений с ID=0x0120 могут быть доступны в пользовательской диаграмме и ретранслируются в интерфейс CAN1 с учетом заданный маски и замены отбора.

Все сообщения пришедшие с CAN1 передаются на CAN0 без изменений, в диаграмму не попадают.

В процессе работы диаграммы сообщения с IDL=0х0120 будут передаваться в CAN1 с битом 0 байта D0 равным 0.

Пример 3: Обработка данных полученного CAN-сообщения в пользовательской диаграмме.

14 8 3 3.png

Все сообщения, кроме сообщений с ID=0x01A0, пришедшие из интерфейса CAN0 передаются в CAN1 без изменений и в диаграмму не попадают. Данные сообщений с ID=0x01A0 могут быть доступны в пользовательской диаграмме, но не ретранслируются в интерфейс CAN1.

Все сообщения пришедшие с CAN1 передаются на CAN0 без изменений, в диаграмму не попадают.

В процессе работы диаграммы все CAN-сообщения из интерфейса CAN0 с идентификатором IDL=0х01A0 будут блокироваться контроллером, т.е. не будут ретранслироваться в интерфейс CAN1, но получаемые в них данные будут доступны в пользовательской диаграмме.

Получаемые сообщения с IDL=0х01A0 обрабатывааются в пользовательской диаграмме. При получении сообщения с IDL=0х01A0 в интерфейс CAN1 выполняется отправка сообщения с IDL=0x0208 содержащего статические данные, а также несколько байт данных, значение которых рассчитывается в зависти от данных, полученных в сообщении с IDL=0x01A0 из CAN0. Длина отправляемого в CAN1 сообшения с IDL=0x0208 составляет 8 байт.

Пример 4: Динамический шлюз.

14 8 3 4.png

Например, интересующие нас данные передаются в CAN в ID 0х0123, в байте D1.

Управление режимом работы шлюза выполняется с помощью тактовой кнопки (GND), подключенной к каналу №8 контроллера. При включении контроллера маска отбора 0 шлюза D1:D0 установлена равной 0х0000, т.е. поступающие данные драйвером не обрабатываются, изменений в них при ретрансляции не происходит. При первом нажатии на управляющую кнопку происходит установка маски отбора 0 шлюза D1:D0 для работы с байтом D1, при следующем нажатии - возврат маски отбора 0 шлюза D1:D0 к значению 0х0000, и т.д.

Шлюз неактивен (маска отбора 0 шлюза D1:D0 установлена равной 0х0000). Фильрация потока данных не выполняется, все сообщения пришедшие с CAN0 передаются на CAN1 без изменений, все сообщения пришедшие с CAN1 передаются на CAN0 без изменений, данные обоих интерфейсов в диаграмму не попадают.

Шлюз находится в рабочем режиме (маска отбора 0 шлюза D1:D0 установлена равной 0хFF00).

Все сообщения, кроме сообщений с ID=0x123, пришедшие с CAN0 передаются на CAN1 без изменений и в диаграмму не попадают. Данные сообщений с ID=0x123 доступны в пользовательской диаграмме. Во всех сообщениях с ID=0x123, пришедших с CAN0, если значение байта D1 не равно 0x20, при передаче их на CAN1, значение байта D1 устанавливается равным 0x10, иначе - устанавливается равным 0x20, т.е. передается без изменения.

Все сообщения пришедшие с CAN1 передаются на CAN0 без изменений, в диаграмму не попадают.

ВНИМАНИЕ! Любое изменение настроек шлюза (например, регистров маски отбора или замены отбора) требует обновления конфигурации драйвера с использованием специального регистра.

Смотри также[править]

CANNY 5.2 duo

CANNY 5.2 duo, Драйвер CAN

CANNY 5 duo

CANNY 5 duo, Драйвер CAN