CANNY 7.2 Alfa. Драйвер шлюза CAN

Общее описание

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

Примечание: Для работы с расширенными идентификаторами, старший бит (бит 15 - признак EXT) Регистра установки значения отбора Х шлюза, CAN ERL, должен быть обязательно установлен равным 1. Соответственно, в маске значения отбора регистра CAN ERL, бит 15 должен быть также установлен равным 1.

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

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

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

Примечание: Для работы с расширенными идентификаторами, старший бит (бит 15 - признак EXT) Регистра установки значения отбора Х шлюза, CAN ERL, должен быть обязательно установлен равным 1. Соответственно, в маске значения отбора регистра CAN ERL, бит 15 должен быть также установлен равным 1.

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

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

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

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

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

Примеры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Все сообщения, кроме сообщений с 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 байт.

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

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

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

Управление режимом работы шлюза выполняется с помощью тактовой кнопки (GND), подключенной к каналу №7 контроллера. При включении контроллера маска отбора 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 без изменений, в диаграмму не попадают.

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

СМОТРИ ТАКЖЕ