Что такое шина LIN
AvtoAd
04/09/2023
Основные характеристики шины LIN
Пример системы управления дверью с шиной LIN и без нее
Подключение LIN трансивера к микроконтроллеру
Шина LIN
LIN (Local Interconnect Network) – это система коммуникации в автомобилях, предназначенная для управления менее требовательными по скорости и надежности устройствами, такими как окна, зеркала, сиденья и другие устройства комфорта. LIN шина является альтернативой более сложным и дорогим CAN шинам, которые используются для критических систем, таких как тормоза, управление двигателем и т.д.
Основные характеристики шины LIN
- Архитектура: Централизованная система с одним мастером (master) и несколькими слейвами (slave).
- Физический уровень Одножильная схема с возможностью соединения до 15 узлов.
- Напряжение: Обычно 12V, как у большинства автомобильных систем.
- Протокол: Упрощенный по сравнению с CAN, со встроенным механизмом обнаружения и коррекции ошибок.
- Применение: Простые системы автомобильной электроники, такие как управление светом, зеркалами, окнами, сиденьями и т.д.
Пример системы управления дверью с шиной LIN и без нее:
Без LIN :

С шиной LIN :

Еще пример, используемый в автомобилях BMW, авто группы VAG, Mercedes и других современных автомобилях, когда все сервоприводы заслонок и цифровые датчики климатической системы подключены с помощью шины LIN, а сам блок климат контроля связан с автомобилем с помощью CAN шины.
Дешевизна LIN обусловлена тем, что реализация протокола LIN полностью программна и строится на базе обычного UART (родственник RS232, COM порт). Также LIN не требует применения точных времязадающих цепей – кварцевых резонаторов и генераторов. Поэтому можно использовать дешевые микроконтроллеры.
Скорость передачи данных
Скорость передачи данных на LIN-шине стандартна для устройств, построенных на базе UART, обычно до 20 kbps.
Это немного, но достаточно передачи данных от датчиков и управлять медленными механизмами.
Электрическая реализация LIN
Электрически интерфейс LIN реализован так же просто. В каждом узле линия шины подтянута к шине +12V. Передача производится опусканием уровня шины уровня массы GND. Микроконтроллер подключается к шине LIN с помощью специальной микросхемы Трансивера, например TJA1020 (TJA1021)
Электрическая цепь шины LIN

Внешний вид микросхемы TJA1020 от NXP

Подключение LIN трансивера к микроконтроллеру

Архитектура сети LIN

Особенностью шины LIN есть то, что в сети есть два вида узлов: Master и Slave.
Master – ведущий,
Slave – подчиненный.
Master может опрашивать Slave о его состоянии, будить его, посылать ему команды. Обмен информации на шине LIN происходит в формате обмена пакетами, и на первый взгляд может показаться, что механизм идентичен шине CAN, это не так. Объясняем почему:
Структура LIN пакета выглядит так:
Кадр LIN

Frame – Header – заголовок кадра, отправляемый в шину Мастером. Включает ID кадра
Frame – Response – данные, отправляемые Slave в ответ на запрос Master-а.
Уловите разницу – в шине CAN все узлы передают и ID кадра и данные. В шине LIN – заголовок пакета – это задача Мастер-узла.
Структура кадра 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=0x00 PID=0x80
ID = 0x0C PID = 0x4C
Если в PID контрольные биты рассчитаны неправильно, то пакет не будет обработан принимающей стороной.
Если мы будем эмулировать работу какого-нибудь узла Master, предварительно изучив данные, которые им посылаются с помощью LIN снифера, то нам не придется задумываться о расчете контрольных битов ID, поскольку в пакетах, которые мы видим, сниффером все уже сосчитано к нам.
После того как Slave принял Header мастера, он соответствует полем Frame Response который состоит из байтов данных в количестве от 1 до 8 и байта контрольной суммы.
Контрольная сумма (CRC) считается инвертированной суммой всех байтов данных с переносом или суммой всех байтов данных + значение защищенного ID . В первом случае CRC называется классической, во втором – расширенной. Вариант подсчета контрольной суммы определяется версией стандарта LIN-шины. В версиях 1. XX применяется классический алгоритм, в версиях 2. XX применяется расширенный.
Обратите внимание на отсутствие поля DLC, отвечающего за количество байтов данных, как в CAN шине. В шине LIN количество байтов данных определяется на этапе написания ПО контроллера. Поэтому процесс обмена на шине LIN сложнее анализировать с помощью снифера – приходится вводить специальный алгоритм разделения пакетов, угадывающий сколько байтов данных было в принятом пакете.

На этой схеме мы видим, как один мастер общается с двумя узлами Slave. Обратите внимание на третий кадр, в нем заголовок Header и тело пакета Response передает Мастер – это важный момент, такие кадры используются для диагностики и конфигурирования узлов Slave.
На осциллограмме обмен одного Master и одного Slave выглядит так:

Здесь мы видим запрос мастера, состоящего из полей Break – S – ID = 0x03, затем следует ответ узла Slave состоящего из четырех байт и контрольной суммы равной 0x3F.
Если мы отключим узел Slave от шины LIN, то увидим уже такую осциллограмму:

Также в протоколе шины LIN предусмотрены и специальные служебные пакеты для диагностики шины, пробуждение устройств и других функций. В этом случае Master может передавать как Frame Header, так и Frame Response последовательно, тогда пакет Master может выглядеть так:
ID = 0x3C DATA : FF FF FF FF FF FF FF FF
Обмен диагностическими сообщениями на шине LIN выглядит следующим образом:

С помощью длинных пакетов Master может конфигурировать и программировать узлы Slave. Если программирование или конфигурирование узла LIN необходимо более 8 байт, то поток данных сегментируется и пересылается по частям. Механика передачи данных определяется специальным транспортным протоколом, работающим поверх физики шины LIN, о нем мы напишем в следующих статьях.
Львиная часть материала с этого сайта.