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

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

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

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


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

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

  • номер интерфейса CAN по которому сообщение поступило в контроллер;
  • идентификатор поступившего сообщения (Значение отбора);
  • длине полученного сообщения (Значение отбора);
  • значениям 8 байт данных (D0...D7) сообщения, в различных комбинациях, в том числе по значениям отдельных бит (Значение отбора).


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

  • ретранслировать сообщение на другой интерфейс 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.

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

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

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

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


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

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

Регистр Ожидаемые значения
Регистр установки значения отбора Х шлюза, CAN IDL
0...0xFFFF = значение младшей части идентификатора (биты 0...10 идентификатора стандартного формата или биты 0...15 идентификатора расширенного формата) CAN-сообщения, по которому выполняется проверка на соответствие сообщения данному отбору.
Регистр установки значения отбора Х шлюза, CAN IDH
0...0x1FFF = значение старшей части идентификатора (биты 16...28 идентификатора расширенного формата) CAN-сообщения, по которому выполняется проверка на соответствие сообщения данному отбору.
Регистр установки значения отбора Х шлюза, CAN ERL
0...0xXX08 = значение, равное количеству байт данных в принятом сообщении CAN указанного интерфейса, по которому выполняется проверка на соответствие сообщения данному отбору, где 0xXX равно: 0x00 (при стандартном формате), 0x40 (при стандартном формате с RTR), 0x80 (при расширенном формате) или 0xС0 (при расширенном формате с RTR). Более подробно смотри примечание.
Регистр установки значения отбора Х шлюза, CAN D1:D0
...
Регистр установки значения отбора Х шлюза, CAN D7:D6
0...0xFFFF = значение байт (бит) данных CAN-сообщения, по которому выполняется проверка на соответствие сообщения данному отбору.
Примечание: Регистр принятого сообщения CAN ERL, помимо числа байт в принятом сообщении 0...8 в младших битах, содержит в своих старших битах информацию о специальных признаках сообщения: бит 15 - признак EXT и бит 14 признак RTR. Где EXT = 1 при приеме сообщения в расширенном формате, EXT = 0 при стандартном формате сообщения; RTR = 1 при приеме удаленного запроса данных, RTR = 0 при приеме обычного сообщения.


Регистры масок значений отборов драйвера шлюза 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", соответствующий бит принятого сообщения будет заменен при ретрансляции соответствующим битом из значения Замены отбора.

Регистр Ожидаемые значения
Регистр установки маски замены отбора 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-шлюза[править]

17 11 2 1.png

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

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

17 11 3 1.png

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

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

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

17 11 3 2.png

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

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

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

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

17 11 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: Динамический шлюз.

17 11 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 7.2 duo

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

CANNY 5.2 duo

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