Что такое FlexRay

FlexRay (Флекс Рэй) – это высокоскоростная шина передачи данных для автомобилей. Применяется на особо ответственных участках обмена данными, например в системах steer-by-wire или brake-by-wire. Такие системы предполагают отсутствие прямой механической связи между органом управления и исполнительным устройством.  Поэтому очень важно применять высоконадежный канал связи.

Скорость на шине FlexRay может достигать 10 Мбит\с, что позволяет применять ее не только на участках требующих высокой надежности передачи данных, но и высокой скорости. Например FlexRay может использоваться как основная шина в мультидоменной сетевой архитектуре, о которой Вы можете прочитать в нашей статье об автомобилях Volvo.

Электрическая реализация FlexRay

На уровне оборудования и электрических сигналов шина FlexRay реализована аналогично шине CAN – это токовая петля с передачей сигнала по неэкранированной витой паре.

Так же как и на шине CAN для кодирования битов используется рецессивное и доминантное состояние шины.

Для более высокой надежности каждый контроллер подключенный к сети FlexRay может использовать два физических канала передачи данных. Но в основном используется один.

 

Принцип передачи данных на шине FlexRay

Ключевая особенность шины FlexRay – это использование принципа TDMA.
TDMA или Time Division Multiple Access – это способ мультиплексирования передачи данных от разных источников с разделением доступа к каналу передачи во времени.
Либо дословный перевод – Множественный доступ с разделением каналов во времени.

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

Коммуникационный цикл на шине FlexRay состоит из нескольких сегментов, а сегменты делятся на временные слоты.

Сегменты бывают:

  1. Static segment. Статический сегмент – гарантирует работу в реальном времени и исключение коллизий. В этом сегменте работает принцип TDMA. Каждый узел обязан передать сообщение в свой временной слот.
  2. Dynamic segment. Динамический сегмент – используется для передачи данных с привязкой к какому-либо событию. В этом временном сегменте FlexRay концептуально похож на шину CAN –  передать может любой узел, но так же в рамках установленного на шине расписания временных слотов.  (FTDMA – гибкий множественный доступ с временным разделением каналов )
  3. Symbol Window – служит для передачи служебных сообщений FlexRay, например для пробуждения шины.

Сегменты могут комбинироваться в одном коммуникационном цикле следующим образом:

Dynamic segment и Symbol Window не являются обязательными в коммуникационном цикле. Основной сегмент  – Static segment, поскольку именно его работа регулируется принципом TDMA.

Статический сегмент

Static segment разделен на временны слоты. Согласно принципу TDMA в каждый конкретный временной слот статического сегмента (Static Segment) к шине обращается только определенный узел, все остальные молчат.

 

Динамический сегмент

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

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

 

Структура кадра FlexRay

Каждый кадр (фрейм, сообщение) на шине Flex Ray состоит из заголовка, полезной нагрузки (Payload, поля данных) и хвоста (Trailer).
В одном кадре может быть передано до 254 байт данных, что существенно больше чем на шинах CAN и CAN-FD.

Структура заголовка FlexRay

  • Заголовок сообщения состоит из 40 бит и содержит следующие элементы:
  • Биты индикаторы – служат для определения типа сообщения
  • Идентификатор сообщения ID – 11 бит
  • DLC – поле указывающее длину полезной нагрузки в 16-битных словах (Одно 16 битное слово – это два байта).
  • CRC – контрольная сумма. Рассчитывается исходя из значений ID, DLC, StartUp Frame Indicator, Sync Frame Indicator и значения генератора полинома FlexRay.
  • Cycle counter – счетчик коммуникационных циклов. Считает сообщения от 0 до 63.

 

Полезная нагрузка PayLoad

Длина полезной нагрузки может достигать 254 байт и определяется в заголовке пакета.
Для Static Segment длина полезной нагрузки всегда постоянна и определяется на этапе проектирования сети.
Первые 12 байт полезной нагрузки передаваемые в статическом сегменте могут быть использованы для передачи вектора управления сетью FllexRay. Для этого в заголовке фрейма должен быть установлен бит Payload Preable Indicator.

Для Dynamic Segment длина полезной нагрузки может менять быть разной. Если при передачи сообщения в динамическом сегменте установлен бит Payload Preamble Indicator, то это означает, что первые два байта полезной нагрузки используются как вектор управления сетью или дополнительный идентификатор сообщения.

В особых случаях отправитель может отправить полезную нагрузку сообщения исключительно с нулями. Такой случай существует, если контроллеру FlexRay необходимо отправить статическое сообщение в соответствии с графиком связи, но буфер, соответствующий сообщению, заблокирован хостом. Это может произойти, например, если хост сам обращается к этому буферу в данный момент. Поскольку контроллер FlexRay не может получить доступ к данным в буфере, он автоматически передает статическое сообщение в виде нулевого кадра. В этом случае индикатор нулевого кадра принимает нулевое значение в заголовке сообщения.

Для защиты полезной нагрузки используется метод CRC (CRC: Cyclic Redundancy Check). CRC вычисляется на основе заголовка, полезной нагрузки и полинома генератора, определенного в спецификации FlexRay. Эта последовательность CRC добавляется к заголовку и полезной нагрузке как трейлер (Хвост).

 

Синхронизация на шине FlexRay

На шине FlexRay необходимо гарантировать, что – с точки зрения всех узлов FlexRay – все циклы связи всегда начинаются в одной и той же точке и имеют одинаковую длину. Также необходимо гарантировать, что все статические слоты узлов FlexRay всегда начинаются в одной и той же точке цикла. Поэтому очень важна четкая синхронизация всех узлов сети.

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

В кластере FlexRay от 2 до 15 узлов FlexRay действуют как узлы синхронизации (узел синхронизации), которые передают сообщение синхронизации (SYNC Frames) в определенном статическом слоте каждого цикла. Это не дополнительные сообщения, астатические сообщения, в которых установлен индикатор кадра синхронизации – Sync Frame Indicator.

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

 

Недостатки шины FlexRay

FlexRay имеет ряд серьезных недостатков что ограничивает применение этой технологии.

  1. Высокая стоимость узла. Требуется контроллеры способные работать с высокой временной точностью и специальные трансиверы.
  2. Низкий уровень сигналов ограничивающий предельную длину шины.
  3. Консорциум разработчиков шины FlexRay распался и дальнейшее развитие технологии не определено.