Что такое lin шина
Протокол LIN. Полный обзор, описание, формат кадра.
Совсем недавно мы разбирали протокол CAN, и вот сегодня продолжаем двигаться по автомобильным стандартам! На очереди LIN, который также свое основное применение нашел в автомобильной промышленности, да и, в общем-то, для этого и был изначально создан.
Чуть забегу вперед — этому протоколу будет посвящено целых три статьи. Сегодня будет исключительно теория, максимально подробно и наглядно. Во второй части мы будем работать с LIN на практике при помощи STM32 с использованием аппаратных средств микроконтроллера. А вот в третьей части мы с нуля напишем свой собственный драйвер для LIN на базе UART.
Итак, протокол LIN был создан в конце 90-х годов (первая версия спецификации относится к 1999 году) группой известных компаний, в основном, автопроизводителей. Среди них:
В целом архитектура шины выглядит следующим образом:
В чем же смысл, спросите вы, ведь есть же CAN? Так вот, использование LIN не исключает использование CAN, а скорее дополняет. LIN является однопроводной шиной, более дешевой, чем CAN, и используется для связи менее критичных для безопасности и для работы автомобиля узлов между собой. То есть основная связь по-прежнему обеспечивается протоколом CAN, а менее важные блоки и датчики уже подключаются по LIN:
Низкая стоимость обеспечивается в том числе тем, что для реализации протокола обычно используется обычный UART микроконтроллера. Все остальное, необходимое для работы шины, реализуется исключительно в ПО. Но это с программной точки зрения. Физически же все-таки требуется использование дополнительной микросхемы трансивера. И самый популярный кандидат бесспорно — TJA1021:
Скорость передачи данных также вполне стандартная для UART’а: от 1 — до 20 кБод, длина линии может достигать 40 м. Давайте теперь перейдем к самому интересному, к структуре пакета в LIN!
Структура пакета протокола LIN.
Каждый пакет состоит из заголовка (header) и непосредственно данных (data):
Причем важной особенностью является то, что на шине присутствуют два типа устройств — LIN Master (ведущий) и LIN Slave (подчиненный). При этом инициировать передачу данных может только Master. То есть Slave-устройство не может само по себе выслать в сеть данные, оно должно ожидать запроса от ведущего и никак иначе 🙂
Таким образом, именно Master отправляет в шину заголовки пакетов. В зависимости от определенного бита заголовка (это мы разберем чуть позже) подчиненные устройства понимают, что им требуется сделать:
Как видите, иерархия очень строгая!
С организацией обмена данными разобрались, теперь можно углубиться непосредственно в структуру уже упомянутых частей LIN-фреймов. Заголовок пакета состоит из нескольких байт:
Старт и стоп-биты здесь играют ту же роль, что и при передаче данных по UART, и используются для каждого из передаваемых по LIN байт.
Из битов ID0…ID5 складывается непосредственно значение идентификатора. А поскольку под это выделено только 6 битов, то значит диапазон значений идентификатора составляет от 0 до 0x3F (0b111111). При этом значения от 0x3C до 0x3F являются служебными. Кроме того, в значении идентификатора содержится информация о количестве передаваемых в Frame Data байт:
Идентификатор | Кол-во байт |
---|---|
0x00-0x1F | 2 |
0x20-0x2F | 4 |
0x30-0x3F | 8 |
Итак, тут у нас остаются еще два бита четности, для них формула выглядит следующим образом:
И на этом все! Заголовок пакета сформирован.
Поле данных в свою очередь состоит из непосредственно байт данных (от 1-го до 8-ми байт) и контрольной суммы (1 байт):
Для расчета контрольной суммы есть два варианта:
Давайте рассмотрим пример расчета классической контрольной суммы. Пусть байты данных равны: 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37. Суммируем:
Вычитаем из полученного значения 0xFF:
И инвертируем, в итоге получаем:
Для выбранных нами байт данных контрольная сумма равна 0x62.
В практической статье по протоколу LIN мы обязательно посмотрим, как все это будет выглядеть на деле, а пока на этом заканчиваем, до скорой встречи!
Автомобильный справочник
для настоящих любителей техники
LIN шина
LIN протокол разработан для создания дешевых локальных сетей обмена данными на коротких расстояниях. Он служит для передачи входных воздействий, состояний переключателей на панелях управления, а также ответных действий различных устройств, соединенных в одну систему через LIN.
Первая спецификация стандарта под брендом LIN была издана в 1999 году по инициативе консорциума европейских автопроизводителей и других известных компаний, включая Audi AG, BMW AG, Daimler Chrysler AG, Motorola Inc., Volcano Communications Technologies AB, Volkswagen AG и VolvoCar Corporation. Последняя спецификация, LIN 2.2, издана в 2010 году. В настоящее время документы стандарта переданы под контроль Международной организации по стандартизации (ISO), где стандарту был присвоено новое наименование ISO 17987. В связи с политикой ISO копия стандарта стала платной.
Шина LIN
LIN шина (локальная сеть воздействия) была разработана для удовлетворения потребностей в связи для систем класса А (см. табл. «Классификация шинных систем» ) с использованием самого экономичного оборудования. Типичные области применения:
Текущую спецификацию LIN можно найти на сайте консорциума LIN.
Важные особенности шины LIN:
Система передачи в шине LIN
Шина LIN представляет собой неэкранированный однопроводный кабель. Уровень шины может принимать два логических состояния. Доминантный уровень соответствует напряжению приблизительно 0 В (масса) и представляет собой логический 0. Рецессивный Уровень соответствует напряжению батареи Ubatt и представляет собой логическую 1.
Из-за наличия разных вариантов электрических цепей уровни могут быть разными. Определение допусков на передачу и прием в области рецессивных и доминантных уровней обеспечивает стабильную передачу данных. Диапазоны допусков шире на приемном конце (рис. «Уровень напряжения на линии данных шины LIN» ), чтобы действительные сигналы тоже можно было получать, несмотря па излучаемые помехи.
Скорость передачи по шине LIN ограничена величиной 20 кбит/с. Это компромисс между большой крутизной фронта импульсов, необходимой для синхронизации ведомых устройств, с одной стороны, и небольшой его крутизной, необходимой для улучшения ЕМС — с другой. Рекомендуемая скорость передачи составляют 2400, 9600 и 19200 бит/с. Минимально допустимая скорость составляет 1 кбит/с.
Максимальное количество узлов не регламентируется в спецификации LIN. Теоретически оно ограничено количеством доступных идентификаторов сообщений. Возможности линии и узла и крутизна фронта импульсов ограничивают сочетание длины и количества узлов сети LIN. Рекомендуется не более 16 узлов.
Пользователи шины обычно располагаются в линейной топологии; однако эта топология не является обязательной.
Доступ к шине LIN
Доступ к шине LIN обеспечивается на основе доступа «ведущий-ведомый». В сети имеется ведущее устройство, инициирующее каждое сообщение. Ведомое устройство имеет возможность ответить. Обмен сообщениями происходит между ведущим и одним, несколькими либо всеми ведомыми устройствами.
Во время обмена сообщениями между ведущим и ведомым устройством возможны следующие взаимосвязи:
Протокол LIN
Фрейм данных LIN
Информация на шине LIN встраивается в определенный фрейм данных, фрейм LIN (рис. «Фрейм LIN» ). Инициированное ведущим устройством сообщение начинается с заголовка. В поле сообщения (ответ) содержится различная информация, зависящая от типа сообщения. Если ведущее устройство передает инструкции ведомому устройству, то оно описывает поле сообщения данными, которые должно использовать ведомое устройство. В случае запроса данных адресуемое ведомое устройство описывает поле сообщения данными, запрошенными ведущим устройством.
Заголовок
Заголовок состоит из разрыва синхронизации, поля синхронизации и поля идентификации.
Синхронизация LIN
Синхронизация происходит в начале каждого фрейма для обеспечения последовательной передачи данных между ведущим и ведомыми устройствами. Сначала разрывом синхронизации четко определяется начало фрейма. Он состоит из не менее 13 последовательных доминантных уровней и одного рецессивного уровня.
После разрыва синхронизации ведущее устройство передает поле синхронизации, состоящее из последовательности битов 01010101. Это дает ведомым устройствам возможность адаптироваться к временной оси ведущего. Тактовый импульс ведущего устройства не должен отличаться от номинального значения более чем на ±0,5%. Тактовый импульс ведомых устройств перед синхронизацией может иметь разброс ±15 %, если синхронизация к концу сообщения достигает уровня ±2 %. Таким образом, ведомым устройствам не нужен дорогой кварцевый генератор — они могут быть выполнены, например, с экономичной резистивно-емкостной цепью.
Идентификатор LIN
Третий байт в заголовке служит идентификатором LIN. По аналогии с шиной CAN здесь используется адресация по содержанию — идентификатор дает информацию о содержании сообщения. Все подключенные к шине узлы на основании этой информации решают, намерены ли они получить и обработать сообщение или же проигнорировать его (фильтрация при приемке).
Шесть или восемь битов в поле идентификатора определяют сам идентификатор; из них получается 64 возможных идентификатора (ID). Имеются следующие значения:
Из 64 возможных сообщений 32 могут содержать только два байта данных, 16 — четыре байта данных, и остальные 16 — восемь байтов данных.
Последние два разряда в поле идентификации содержат контрольные суммы, защищающие идентификатор от ошибок при передаче и неправильного распределения сообщений.
Поле данных
После передачи ведущим устройством заголовка начинается передача фактических данных. Ведомые устройства по переданному идентификатору определяют, являются ли они адресатами и, при необходимости, отправляют ответ в поле данных.
В один фрейм можно включить несколько сигналов. Здесь у каждого сигнала есть один генератор, т.е. он всегда описывается одним и тем же узлом сети. Во время работы не разрешается сопоставлять сигналу другой генератор, что возможно в других сетях с управлением по времени.
Данные в ответе ведомого устройства защищаются контрольной суммой (CS).
Описательный файл LIN
Конфигурация шины LIN, т.е. спецификация пользователей сети, сигналов и фреймов, выполняется в описательном файле LIN. Спецификация LIN для этой цели имеет подходящий язык конфигурации.
Из описательного файла LIN автоматически генерируется набор кодов на С и файлов заголовков; эти коды и файлы используются для реализации функций ведущего и ведомых устройств в ЭБУ, расположенных на шине. Таким образом, описательный файл LIN служит для конфигурации всей сети LIN. Это общий интерфейс между автопроизводителем и поставщиками ведущих и ведомых устройств.
Составление графика отправки сообщений
Таблица-график в описательном файле LIN определяет порядок и время отправки сообщений. Часто запрашиваемая информация отправляется время от времени. Когда таблица проработана, ведущее устройство снова начинает с первого сообщения. Последовательность обработки можно изменить в зависимости от режима работы (например, активна/неактивна диагностика, включено/ выключено зажигание).
Таким образом, известен фрейм передачи каждого сообщения. Детерминированные характеристики гарантируются тем фактом, что все передачи инициируются ведущим Устройством в случае управления доступом по принципу «ведущий-ведомый».
Управление сетью LIN
Для минимизации тока замкнутой цепи узлы сети LIN можно переводить в спящий режим. Это можно сделать двумя способами. Ведущее устройство передает команду «перейти в спящий режим» зарезервированным идентификатором 60, либо ведомые устройства переходят в спящий режим автоматически, если в течение относительно длительного времени (4 секунды) не было передачи данных по шине. И ведущее, и ведомые устройства могут снова активировать сеть. Для этого необходимо передать сигнал активации. Он состоит из байта данных с номером 128, обозначающим содержание. После перерыва времени бита 4-64 (разграничитель активации) все узлы должны быть инициализированы и способны ответить ведущему устройству.
Что такое шина LIN
Шина LIN – это простая последовательная однопроводная шина для автомобильных применений и используется в тех случаях когда применение CAN шины – дорого. По шине LIN управляются различные приводы (корректоры фар, заслонки климатической системы, приводы центрального замка), а так же собирается информация с простых датчиков (датчики дождя, света, температуры).
Для изучения шины LIN Вы можете использовать наш адаптер CAN-Hacker 3.0 с дополнительной опцией LIN анализатора.
А так же интерфейс CAN-Hacker CH-P
Пример системы управления дверью с шиной LIN и без нее:
Еще пример, в автомобиле Porsche Macan 2015 г. все привода и датчики климатической системы подключены к шине LIN а сам блок климат контроля связан с автомобилем при помощи CAN шины.
Дешевизна LIN обусловлена тем что реализация протокола LIN полностью программная и строится на базе обычного UART (родственник RS232, COM порт). Так же LIN не требует применения точных времязадающих цепей – кварцевых резонаторов и генераторов. Поэтому можно применять дешевые микроконтроллеры.
Скорость передачи данных
Скорость передачи данных на шине LIN стандартная для устройств построенных на базе UART: 2400; 9600; 10400; 19200; 20000 Бод. Это немного но достаточно для передачи данных от датчиков и для управления медленными механизмами.
Электрическая реализация LIN
Электрически интерфейс LIN реализован так же просто. В каждом узле линия шины подтянута к шине питания +12V. Передача осуществляется опусканием уровня шины до уровня массы GND. Микроконтроллер подключается к шине LIN при помощи специальной микросхемы Трансивера, например TJA1021
Подключение LIN трансивера к микроконтроллеру
Архитектура сети LIN
Особенностью шины LIN является то, что в сети присутствует два вида узлов: Master и Slave, Master – ведущий, Slave – подчиненный.
Master может опрашивать Slave о его состоянии, будить его, отправлять ему команды. Обмен информации на шине LIN происходит в формате обмена пакетами, и на первый взгляд может показаться что механизм идентичен шине CAN, это не так. Объясняем почему:
Структура LIN пакета выглядит так:
Frame – Header – заголовок кадра, который отправляется в шину Мастером. Включает в себя ID кадра
Уловите разницу – в шине CAN все узлы передают и ID кадра и данные. В шине LIN – заголовок пакета это задача Мастер-узла.
Поле Frame-Header состоит из полей:
BREAK – Это сигнал шине о том что мастер сейчас будет говорить
Поле синхронизации – это просто байт = 0x55. При его передаче приемники подстраивают свою скорость.
PID – это поле защищенного идентификатора. В дальнейшем будем писать просто – идентификатор.
Идентификатор может принимать значения от 0 до 59 (0x3B в HEX) для пользовательских пакетов. Так же возможно использование специальных служебных пакетов с ID 0x3C, 0x3D, 0x3E и 0x3F. Защищенность идентификатора заключена в следующем:
В структуре байта ID мы видим биты собственно самого идентификатора с ID0 по ID5, а затем идут два контрольных бита P0 и P1, которые рассчитываются так:
P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
P1 = ¬ (ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
ID = 0x0C PID = 0x4C
Если в PID контрольные биты рассчитаны неверно то пакет не будет обработан принимающей стороной.
В случае если мы будем эмулировать работу какого либо узла Master, предварительно изучив отправляемые им данные при помощи LIN сниффера, то нам не придется задумываться о расчете контрольных битов ID, поскольку в пакетах которые мы видим сниффером все уже посчитано до нас.
После того как Slave принял Header мастера он отвечает полем Frame Response который состоит из байтов данных в количестве от 1 до 8 и байта контрольной суммы.
Обратите внимание на отсутствие поля DLC отвечающего за количество байтов данных как в CAN шине. В шине LIN количество байтов данных определяется на этапе написания ПО контроллера. Поэтому процесс обмена на шине LIN сложнее анализировать при помощи сниффера – приходится вводить специальный алгоритм разделения пакетов, который угадывает сколько байтов данных было в принятом пакете.
На этой схеме мы видим как один Мастер общается с двумя узлами Slave. Обратите внимание на третий кадр, в нем заголовок Header и тело пакета Response передает Мастер – это важный момент, такие кадры используются для диагностики и конфигурирования Slave узлов.
На осциллограмме обмен одного Master и одного Slave выглядит так:
Здесь мы видим запрос мастера состоящий из полей Break – S – затем следует ответ узла Slave состоящий из четырех байт и контрольной суммы равной 0x3F.
Если мы отключим узел Slave от шины LIN, то увидим уже такую осциллограмму:
ID=0x3C DATA : FF FF FF FF FF FF FF FF
Обмен диагностическими сообщениями на шине LIN выглядит так :
При помощи длинных пакетов Master может конфигурировать и программировать узлы Slave. Если для программирования или конфигурирования узла LIN необходимо более 8 байт, то поток данных сегментируется и пересылается частями. Механика передачи данных определяется специальным транспортным протоколом работающим поверх физики шины LIN, о нем мы напишем в следующих статьях.
Видео пример работы с шиной LIN и адаптером CAN-Hacker 3.2
Русские Блоги
Обучение по шине LIN
Введение в LIN
Как недорогая вспомогательная шина, шина LIN широко используется в автомобильной электронике.Шина LIN используется в низкоскоростных приложениях, таких как двери, окна, освещение и центральные замки. Фактически, CAN было бы проще реализовать эти функции в транспортных средствах на новой энергии, но она ограничена слишком большим количеством аксессуаров в автомобиле. При изготовлении она должна быть совместима с поставщиками различных аксессуаров, включая низкоскоростную поставку аксессуаров. использование LIN из соображений стоимости. Сейчас LIN все еще широко используется, надо учиться.
Особенности LIN
Разница между LIN и CAN
Однопроводная передача, низкая скорость передачи
Шина LIN физически представляет собой шину с открытым стоком с подтягивающим коллектором 12 В, и несколько узлов могут быть подключены параллельно к главному узлу. Он аналогичен линии SDA IIC, но не требует линии синхронизации SCL.LIN использует скорость передачи данных, согласованную между хостом и подчиненным устройством, аналогично UART. В отличие от последовательного порта, он синхронизируется через поле синхронизации, и передача более надежна. По сравнению со структурой CAN с витой парой, помехоустойчивость линии LIN относительно мала.Чтобы улучшить характеристики EMC, скорость связи ограничена до 20 Кбит / с.
Структура одного ведущего и нескольких ведомых
Облегченный стек протоколов обработки
Топология сети
Шина LIN представляет собой звездообразную структуру с одним ведущим и несколькими ведомыми устройствами.Шина LIN обычно не существует одна, и узел часто подключен к сети верхнего уровня (например, CAN).
Узел не обязательно соответствует ЭБУ, поскольку ЭБУ может предоставлять несколько интерфейсов LIN.
Протокол LIN
Правила передачи
Рама в основном содержитЗаголовок кадрас участиемответДве части
Общая конструкция каркаса
Заголовок кадра включаетИнтервал синхронизации、Синхронизировать сегментс участиемЗащищенный сегмент идентификатора (PID), Отправлено хост-узлом
Ответ включаетСегмент данныхс участиемСегмент контрольной суммы, Отправлено подчиненным узлом
0 Доминирующий уровень, 1 Рецессивный уровень
Интервал синхронизации
Интервал синхронизации состоит изИнтервал синхронизациис участиемИнтервал синхронизациисочинение
Синхронизировать сегмент
Байт-поле: стандартный формат передачи данных UART
Поле байта включает 1 стартовый бит (доминантный) + 8 бит данных + 1 стоповый бит (рецессивный).
Защищенный сегмент идентификатора (PID)
Защищенный сегмент идентификатора состоит из6-битный идентификатор кадрас участием2 бита четностисочинение
Диапазон идентификаторов кадров: 0x00
Здесь, поскольку данные отправляются первыми, отправляется LSB, поэтому первым отправляется P1 бита четности. При отправке бит над идентификатором кадра занят 2 битами четности, поэтому идентификатор эквивалентен младшим 6 битам весь кадр вместо старших 6 бит
Формула проверки выглядит следующим образом, где «represents» представляет операцию «исключающее ИЛИ», а «¬» представляет операцию «отрицание».
Из формулы видно, что PID не будет иметь все 0 или все 1. Следовательно, если подчиненный узел получает «0xFF» или «0x00», это может быть расценено как ошибка передачи.
Тип кадра
Сегмент данных
Данные, отправляемые узлом, находятся в сегменте данных, старшие 8 байтов, младшие DATA1 отправляются первыми, а отправка увеличивается последовательно.
Кадр данных LIN может передавать до 8 байтов. Согласно LUN 2.x, количество байтов, которое может передать LIN, может составлять 2, 4, 8 вместо любого числа в пределах 1-8. Вообще говоря, в автомобиле выбирается одинаковое количество байтов, чаще всего используется 8 байтов на кадр.
Сегмент данных содержит два типа данных,сигналилиДиагностическое сообщение
Когда тип идентификатора кадра представляет собой кадр, несущий сигнал, сегмент данных хранит сигнал, а идентификатор кадра соответствует одному или нескольким сигналам.
Если тип идентификатора кадра является диагностическим, в сегменте данных хранятся диагностические сообщения.
Сегмент контрольной суммы
Раздел контрольной суммы предназначен для проверки содержимого, передаваемого во фрейме.
Контрольная сумма делится наСтандартная контрольная суммас участиемРасширенная контрольная сумма
Независимо от того, используется ли стандартная контрольная сумма или расширенная контрольная сумма, управляет хост-узел, а публикующий узел и каждый слушающий узел определяют, какую контрольную сумму использовать в соответствии с идентификатором кадра.
Метод проверки состоит в том, чтобы добавить каждый байт объекта проверки с помощью двоичного сложения (если результат больше или равен 256, вычесть 255), побитно инвертировать окончательную сумму и использовать результат в качестве контрольной суммы отправки. В соответствии с типом контрольной суммы получатель выполняет то же двоичное сложение с переносом полученных данных, и окончательная сумма не инвертируется, и добавляет сумму к полученной контрольной сумме. Если результат равен 0xFF, то контрольная сумма Нет ошибок, это в определенной степени гарантирует правильность передачи данных.
пример
Используя стандартную контрольную сумму, Data1 = 0x4A, Data2 = 0x55, Data3 = 0x93, Data4 = 0xE5, метод расчета показан в таблице 3.3: