Протокол LIN поддерживает двунаправленную передачу данных по одному проводу длиной до 40 метров, используя недорогой микроконтроллер с генератором на RC-цепочке, без использования кварцевого резонатора. Основная идеология — как можно больше задач переложить на программное обеспечение с целью уменьшения стоимости конструкции. Контроллеры автоматически проводят самосинхронизацию при каждой посылке данных. В основу LIN положена концепция «single-master/multi-slave», дешевое исполнение, основанное на обычных последовательных интерфейсах UART/SCI, как программная, так и аппаратная возможность реализации, самосинхронизирующаяся
система, работающая от RC-генератора и не требующая кварцевого резонатора для Slave- устройств, гарантированное время ожидания для передаваемого сигнала. Дешевое однопроводное исполнение и скорость до 20 кбит/сек. Возможен перевод шины в режим микропотребления «SLEEP», когда шина выключается с целью уменьшения потребляемого тока, но любой узел на шине при необходимости может включить ее вновь. Основное отличие протокола LIN от шины CAN заключается в том, что концепция LIN — это система связи с очень низкой стоимостью за счет снижения эффективности. Технические требования линейного приемопередатчика удовлетворяют стандартам ISO 9141. Структура шины представляет собой нечто среднее между I2C и RS-232. Шина подтягивается вверх к источнику питания через резистор в каждом узле и вниз через открытый коллекторный переход приемопередатчика, как в I2C. Но вместо стробирующей линии, каждый передаваемый байт обрамляется стартовым и стоповым битами и передается асинхронно, как в RS-232.
Рис. 4.1. Конфигурация LIN.
На рис. 4.1 показана типовая конфигурация шины LIN. Для обмена данными используется один сигнальный провод, в каждом узле подтянутый к источнику питания через резистор. В качестве выходного каскада используется транзистор с открытым коллектором. Активным состоянием является низкий уровень на шине данных, в это состояние ее может перевести любой узел, послав в шину низкий уровень. В пассивном состоянии на шине напряжение питания Vbat (9...18 В), означая, что все узлы на шине в неактивном состоянии. Рабочее напряжение питания находится в пределах 9…18 В, но все узлы должны выдерживать перегрузки и сохранять работоспособность при увеличении напряжения на шине вплоть до 40 В. Обычно микроконтроллер в каждом узле подключен к шине через приемопередатчик, который и обеспечивает защиту от перегрузок. Это позволяет использовать обычный микроконтроллер с напряжением питания 5 В, в то время как сама шина работает на больших напряжениях. Шина в каждом узле подтягивается к напряжению питания (Vbat). Для устройства_задатчика (master) значение терминального резистора составляет 1 кОм, для устройств-исполнителей (slave) — 20…47 кОм. Максимальная длина шины составляет 40 метров. Каждый передаваемый байт обрамлен стартовым и стоповым битами, как показано на рис. 4.2.
Рис. 4.2. Формат передачи данных.
Передача начинается с младшего бита. Стартовый бит равен нулю, а стоповый — пассивному состоянию шины (единице). Все управление шиной осуществляет ведущий микроконтроллер (master, задатчик). Он посылает в шину запрос с адресом интересующего его ведомого микроконтроллера (slave, исполнитель), а затем осуществляет с ним обмен данными. Ведомые микроконтроллеры лишь передают или принимают данные по запросу ведущий микроконтроллера. Передача сообщения (рис. 4.3) начинается ведущим МК с посылки сигнала «Synch Break», которое представляет собой 13 последовательно идущих нулей и сообщает всем ведомым МК, что начался цикл обмена; затем идет поле синхронизации (Synch Field) и поле идентификации (Ident Field).
Рис. 4.3. Формат посылки.
Поле синхронизации передается ведущим МК в начале каждого сообщения, и все slave-МК должны принять это сообщение и подстроить частоту своего собственного приемопередатчика. Второй байт каждой посылки — поле идентификации (адреса), в котором сообщается, с каким ведомым МК начинается обмен данными в этой посылке и сколько байт будет содержаться в ответе исполнителя. Только этот исполнитель имеет право передать данные задатчику. Но как только этот ответ появляется на шине, любой другой исполнитель также может принять эти данные. Таким образом, для того чтобы передать данные от одного исполнителя другому, совершенно необязательно пересылать их непосредственно через задатчика. Протокол LIN подразумевает использование RC-цепочки в качестве задающего генератора микроконтроллеров исполнителей. Поэтому каждое сообщение содержит поле синхронизации и каждый исполнитель обязан подстроить по этому полю частоту своего приемопередатчика. Для того, чтобы определить время передачи одного бита, необходимо засечь время четырех периодов стартовой посылки, разделить на 8 и округлить (рис. 4.4).
Рис. 4.4. Байт синхронизации (Synch Field).
В идентификационном поле сообщается информация о том, что же, собственно, последует дальше. Поле идентификации (рис. 4.5) разделено на три части: четыре бита (0–3) содержат адрес исполнителя, с которым будет производиться обмен информации, два бита (4–5) указывают количество передаваемых байт и последние два бита (6–7) используются для контроля четности. Четыре бита адреса могут выбирать одного из 16-ти исполнителей, каждый исполнитель может отвечать 2-мя, 4-мя, или 8-ю байтами, таким образом получаем 64 типа различных сообщений на шине.
Рис. 4.5. Поле идентификации.
Спецификация LIN не устанавливает каких-либо жестких рамок на передаваемую информацию (за исключением команды «Sleep»), оставляя свободу творчества для программистов. Задатчик может послать команду всем исполнителям перейти в микромощный режим («Sleep»), выставив в поле идентификации байт 0×80 (рис. 4.6).
Рис. 4.6. Включение и выключение режима «Sleep».
Исполнители, приняв его, освобождают шину и переходят в «спящий» режим с выходом из него по изменению состояния на шине. Любой исполнитель может активизировать шину, передав байт 0×80. После этого все узлы ожидают дальнейших опросов задатчика в обычном режиме.