Ох эти три буквы… Спокойно, всё пристойно, я про CAN.

В CAN сети все ЭБУ подключены к шине параллельно. Обмен данными производится короткими пакетами — сообщениями.
CAN сообщение
Каждое сообщение содержит идентификатор, который в сети является уникальным (например, «Температура двигателя 100 град» или «Скорость автомобиля 50 км/ч»). При передаче, все ЭБУ в сети получают сообщение и каждый из них проверяет идентификатор. Если сообщение имеет отношение к данному ЭБУ, то оно обрабатывается, в противном случае – игнорируется. Идентификатор может быть длиной 11 бит или 29 бит.

Арбитраж
В шине CAN биты 0 и 1 имеют ещё одно название: рецессивный уровень и доминантный уровень, соответственно. Если двумя разными передатчиками будет одновремнно передан рецессивный и доминантный уровни, то доминантный уровень подавит рецессивный. Этим механизмом подавления обеспечивается арбитраж на шине. Каждый передатчик одновремнено считывает то, что он предаёт в шину. Передатчик с более низким приоритетом вынужден отпустить шину, так как чужой доминантный уровень с более высоким приоритетом исказил его предачу. В то же время, пакет с более высоким уровнем остался неизменным. Передатчик, потерявший арбитраж, может повторить попытку через некоторе время.
Физический уровень
В автомобиле может применяться несколько типов шин CAN.
Высокоскоростной CAN (High speed) применяется в основном в сети управления двигателем и управления шасси. Там, где необходима высокая скорость реакции. Скорость обмена по этой шине 500 или 250 кбит/сек.
Схема подключения ЭБУ к высокоскоростной шине CAN

Низкоскоростной CAN (Low speed) применяется в сети управления кузова. Скорость обмена по этой шине, как правило, равняется 125 кбит/сек.
Схема подключения ЭБУ к низкоскоростной шине CAN

Однопроводный CAN (1-wire) Это удешевлённый варинат Low speed CAN, применяется в основном концерном GM. Используется для коммуникации между ЭБУ кузова машины. Работает на скорости 33,3 кбит/сек.
Схема подключения ЭБУ к однопроводной шине CAN

Надёжность
Двухпроводная шина сохраняет свою работоспособность при обрыве или замыкании одного из проводов (для двухпроводной шины).
Фазы работы
Шина CAN используется в автомобилях достаточно давно. Изначально шина CAN использовалась в простых конфигурациях. Например, для надёжной и быстрой связи между ЭБУ мотора и ЭБУ автоматической коробки передач. В этой конфигурации шина использовалась только для передачи данных. В ЭБУ заводилась линия питания и линия от замка зажигания, диагностика производилась по отдельным К-линиям, идущим из каждого ЭБУ.
В более современных автомобилях, по шине CAN передаётся не только управляющая, но и диагностическая информация. Помимо этого, шина CAN стала управлять системой питания ЭБУ. В этой конфигурации все ЭБУ подключены к общему питанию и шине CAN. Замок зажигания является электронным блоком управления и информация о включении зажигания передаётся от него по CAN шине.
Можно выделить четыре основные фазы работы шины:
Спящий режим
В этом режиме все ЭБУ, кроме ЭБУ замка, находятся в выключенном состоянии. На драйвер CAN подается питание. Драйвер так же находится в спящем состоянии. При этом, его энергопотребление составляет около 0,3 мА.
Пробуждение
Когда вставляется ключ зажигания или открывается дверь, замок выдаёт доминантное состояние в шину CAN. Это приводит к пробуждению CAN драйверов в спящих ЭБУ. Драйверы при обнаружении активности на шине включают стабилизаторы питания в своих ЭБУ.
Активный режим
В активном режиме ЭБУ постоянно обмениваются информацией. Энергопотребление каждого предатчика при доминантных уровнях может достигать 80 мА.
Засыпание
В момент выключения зажигания, по шине CAN выдаётся команда на выключение, после чего каждый ЭБУ сам себя обесточивает и преходит в спящий режим.
Примечание:
Для однопроводной шины CAN сигнал пробуждения имеет уровень 12 В, обычный обмен 0-4 В.
Немного отступлю от первоисточника.
Самый главный плюс, это очень высокая помехозащищённость сигнала. В чём прикол? Одновременно идут два дублирующих сигнала, только один высокий, второй низкий. Ловят они помеху. Помеха воздействует одинаково на оба сигнала. А на выходе у нас одинаковый уровень. Два уровня сигнала компенсируют помеху. Наглядно это выглядит вот так:
Что такое CAN-шина?
![]()
С ростом популярности GPS контроля транспорта и сельскохозяйственной техники, возросла и популярность контроля с применением CAN-шины. Давайте разберем, почему использование CAN-шины — это действительно отличное решение.
CAN-шина — это интерфейс, или система цифровой связи управления электрическими устройствами транспортного средства. Главной целью использования сети контроллеров является сбор, анализ и контроль данных, полученных со всех устройств, установленных на автомобиле. CAN-шина была изобретена в 80х годах прошлого столетия известной немецкой компанией Robert Bosch GmbH. Использование CAN-шины — одно из лучших решений для современного бизнеса, деятельность которого тесно взаимосвязана с использованием коммерческого транспорта: грузовых автомобилей, автобусов, сельскохозяйственной техники и т.д. С помощью единой системы управления электрическими устройствами транспортного средства можно полноценно контролировать его состояние и оперативно предпринимать все необходимые меры по устранению выявленных неполадок. Дополнительным преимуществом технологии можно назвать подключение к CAN-шине бортовые ГЛОНАСС/GPS контроллеров и датчиков уровня топлива. GPS-мониторинг транспорта с применением CAN-шины — это эффективный метод получения всех параметров эксплуатации автомобиля.
Принцип работы CAN-шины
Чтобы понять, как работает CAN-шина, можно представить эту технологию в виде единой сети, объединяющей датчики и прочие исполнительные элементы конкретного автомобиля. Сама шина представлена витой парой, имеющей 2 отдельные линии — CAN-high, CAN-low. По шине от одного к другому блоку бортового компьютера передаются данные со скоростью 1 Мбит в секунду. Напряжение к каждому элементу передается от бортовой сети. Однако от стандартной электропроводки шина отличается тем, что она соединяет элементы параллельно. Это значительно упрощает прокладку проводки и позволяет обойтись меньшим количеством проводов. За счет этого единая система мониторинга показателей характеризуется высокой надежностью.
Контроллер фиксирует все ошибки и неисправности. Они обрабатываются, а узел, в котором были идентифицированы ошибки по умолчанию отключается от общего соединения.
Если анализировать ключевые характеристики современных CAN-шин, можно выделить следующие:
- Тип провода: витая пара проводов и шлейф считаются бюджетными вариантами, которые демонстрируют низкую скорость передачи данных. Что касается проводов из оптоволокна, они обеспечивают максимальную скорость передачи данных. К другим преимуществам варианта можно отнести высокую надежность и большой, если сравнивать с витой парой и шлейфом, срок эксплуатации.
- Тип идентификатора: условно все CAN-шины по типу идентификатора можно разделить на CAN2 0A и CAN2 0B. Маркировку CAN2 0A имеют шины, функционирующие в формате 11 бит. Однако такая система не может выявить ошибки на сигналы от модулей, которые работают с 29 бит. CAN2 0B, в отличие от предыдущего варианта, все данные о выявленных ошибках могут передаваться на микропроцессорные устройства при обнаружении идентификатора на 29 бит.
Вид шины также является важной характеристикой, в соответствии с который интерфейсы классифицируются следующим образом:
- Комфорт: цифровой интерфейс предназначен для соединения всех устройств, в том числе и дополнительных, например, подогрева сидений, элекрорегулировки зеркал и прочее.
- Для силового агрегата: подключается к транспортному средству для обеспечения быстрой связи между между управляющими системами по дополнительному каналу.
- Информационно-командные интерфейсы: используются для обеспечения бесперебойной связи между узлами, которые задействованы в обслуживании транспортного средства.
Применение CAN-шины
Подключение к CAN-шине автомобиля позволяет эффективно решить целый комплекс задач:
-
и его реальный расход.
- Получать данные о состоянии педалей авто.
- Выявлять, какого стиля придерживается водитель.
- Следить за состояние системы безопасности транспортного средства.
- Контролировать температуру двигателя и охлаждающей жидкости.
- Получать информацию об уровне нагрузки на ось авто.
На сельскохозяйственных, транспортных, коммунальных, строительных предприятиях также используются интерфейсы для централизованного отслеживания рабочих параметров авто. К примеру, подключение к CAN-шине трактора позволит получать информацию по следующим параметрам:
- Обороты двигателя;
- Актуальный момент двигателя;
- Часовой расход топлива;
- Мгновенный путевой расход топлива.
Подключение к CAN-шине комбайна позволяет получить не только показатели работы двигателя, но и время включения и работы жатки, молотьбу, загрузку бункера и т.д.
CAN шина
Всем привет! Я начинающий разработчик и увлекся Embedded стороной вопроса. Лучший способ запомнить информацию — написать какой нибудь конспект и поделиться им. Ниже моя краткая выжимка о CAN шине и передаче данных через нее:
Шина CAN (Controller Area Network).

Шина представляет из себя пару проводников, в нашем случае витую пару разделенную резисторами сопротивлением 120 Ом (Называется этот резистор Терминаторам). Состоит из линии высокого напряжения (H — high) и низкого напряжения (L-low).
Скорость 1 mb/s при длине шины до 40 метров (Автомобиль или комната).
Скорость 10 kb/s при длине шины до 1000 метров (здание).
Приемопередатчики равноправны в шине CAN.

Когда никто не передает сигнал по шине и в H и в L по 2,5 вольта. Когда сигнал есть — на H 3,5V а на линии L — 1,5 В. По разнице между H и L приемопередатчики понимают, что началась передача. Поэтому шина CAN не чувствительна к наводкам. Вольтаж на витой паре может быть другой — шина понимает о начале приема или передачи по разнице между L и H.
Когда на вход передатчику приходит ноль — передатчик увеличивает на H напряжение. Все остальные приемопередатчики понимают, что началась передача сигнала. Кодирование выполняется в формате NRZ:
Dominant bit — состояние когда на шине H>L — соответствует 1-це.
Recess bit — состояние когда на линии нет сигнала воспринимается как ноль.
Смена бит происходит по частоте передатчика. Частота приемников может незначительно отличаться вследствие чего большая последовательность повторяющихся сигналов может привести к рассинхронизации. Поэтому применяется
Bit stuffing — 5. Если идет 5 одинаковых бит — передатчик выставляет противоположный бит. Все приемники игнорируют этот бит. Если же приемники видят подряд 6 одинаковых бит — они понимают что произошла ошибка и игнорируют сообщение.
Collision Resolution (CR) — если два передатчика начинают одновременно передавать — приоритет получает тот кто передает больше единиц. Допустим два передатчика начали одновременно вещать. Оба передают 3 единицы, на 4 бите один из них не выставляет сигнал, но фиксирует что на шине есть перепад — таким образом он понимает, что сигнал вместе с ним кто то передает параллельно и замолкает.
CR эффективнее Collision Detection в ethernet так как в CD в случае обнаружения двух передающих передатчиков замолкают оба и начинают передачу через какой то случайный промежуток времени.
Протокол передачи информации DATA FRAME. Передача данных когда устройство делится данными.

S — стартовый бит — всегда Dominant bit. Все приемники синхронизируются по нему. На вход приемо передатчику приходит ноль и он подает напряжение на шину H создавая тем самым разницу.
ID — уникальный номер сообщения(команды). По нему приемники понимают нужно ли им это сообщение или оно адресовано кому то другому. В стандартном исполнении CAN 11 бит, в CAN2.0b — 29 бит.
D length — указывает какой длины в байтах будет блок данных.
Data — само сообщение от 0 до 8 байт.
CRC — контрольная сумма размером 2 байта.

ACK. После передачи CRC приемник получающий сообщение выставляет подтверждающий бит если сумма сходиться. Передатчик видит что приемник получил сообщение и далее выставляет 7 бит Reces сигнала — EOF.
Для всех кто увлекается Электроникой и Электротехникой — рекомендую канал Электротехника и электроника для программистов. Если что то не понятно или неправильно изложено — пишите поправлю. Собственно первоисточник статьи — лекция 403 CAN шина- введение.
Как ниже в коментариях справедливо заметили в Википедии конечно больше информации.
Ну и перепечатывать википедию смысла не вижу. Приложу тут ссылочку.
Протокол CAN. Описание, формат кадра, контроль ошибок.

Всех приветствую, сегодняшняя статья будет целиком и полностью посвящена обзору протокола CAN. А в одной из следующих статей мы реализуем обмен данными по CAN на практике. Но не буду забегать вперед.
CAN (Controller Area Network) — это промышленный стандарт, позволяющий осуществить объединение в единую сеть различных узлов, механизмов, датчиков и т. п. Протокол является широковещательным, это значит, что все устройства в CAN-сети принимают все передаваемые по шине сигналы. Режим передачи данных — последовательный, при этом байты сообщений формируют кадры определенного вида. Структуру этих кадров данных мы также обязательно разберем в этой статье.
Основные характеристики протокола CAN:
- очень высокая надежность и защищенность
- каждое сообщение имеет свой собственный приоритет
- реализован механизм обнаружения ошибок
- автоматическая повторная отправка сообщений, которые были доставлены с ошибкой
- уже упомянутый широковещательный характер передачи данных
- возможность присутствия нескольких ведущих (master) устройств в одной сети
- широкий диапазон скоростей работы
- высокая устойчивость интерфейса к помехам
- кроме того, есть механизм обнаружения «сбойных» узлов с последующим удалением таких узлов из сети.
Первоначально стандарт был разработан для автомобильной промышленности. И занималась этим компания Bosch в 1980-х годах. Основная идея заключалась в том, чтобы уйти от использования огромного количества проводов, соединяющих многочисленные узлы автомобиля. И протокол CAN позволил этого достичь. С тех пор CAN является основным механизмом соединения устройств, узлов и датчиков автомобиля между собой. Помимо этого, интерфейс CAN активно используется в промышленной автоматизации, а также в системах «умного дома».
Давайте перейдем к физическому уровню протокола. В интернете можно найти много противоречивой информации на этот счет, но истина тут одна ) Стандарт CAN компании Bosch не регламентирует физический уровень передачи данных, поэтому могут использоваться абсолютно разные варианты, например, оптоволокно. На практике же чаще всего используется соединение посредством двухпроводной дифференциальной линии (витой пары). Ориентировочная максимальная длина линии для разных скоростей передачи данных составляет:
| Скорость | Длина линии |
|---|---|
| 1 Мбит/с | 50 м |
| 500 кбит/с | 100 м |
| 125 кбит/с | 500 м |
| 10 кбит/с | 5 км |
Важным условием работоспособности шины является наличие на концах витой пары согласующих резисторов, которые также называют терминаторами, с сопротивлением 120 Ом:

В отличие от многих других протоколов в CAN не рекомендуется описание битов данных как «логического нуля» и «логической единицы». Здесь используются понятия доминантный и рецессивный бит.
Важнейшим свойством является то, что если один из узлов сети хочет выставить на линии рецессивный бит, а другой доминантный, то в итоге на линии окажется доминантный бит. В общем-то отсюда и следует его название, от слова «доминировать» ) Очень хорошо этот процесс иллюстрирует пример с оптоволоконной линией. Как вы помните, в оптоволокне для передачи данных используется «свет», либо он есть (единица), либо его нет (ноль). При использовании в CAN-сети «свет» — доминантный бит, соответственно, отсутствие света или «темнота» — рецессивный.
Вспоминаем про важнейшее свойство передачи данных в сети. Пусть один узел выставляет на линии рецессивный бит, то есть «темноту». Второй узел, напротив, выставляет доминантный бит — «свет». В итоге на линии будет «свет», то есть доминантный бит, что в точности соответствует требованиям сети:

При использовании электрического сигнала устройство, желающее передать в линию доминантный бит, может подтянуть линию к земле. Это и приведет к тому, что на линии будет доминантный бит независимо от того, что выдают на линию другие участники коммуникации.
Это свойство используется для арбитража в сети CAN. Пусть несколько устройств хотят передать данные. Каждый из этих передатчиков сравнивает значение, которое он передает, со значением, фактически присутствующим на линии. В том случае, если передаваемое значение совпадает со считанным, устройство продолжает высылать свои данные. Если значения совпали у нескольких устройств, то все они продолжают передачу как ни в чем не бывало.
Продолжается это до того момента, когда значения станут различными. Если несколько устройств хотят передать рецессивный бит, а одно — доминантный, то в соответствии с правилом, которое мы обсудили выше, на линии окажется доминантный бит. В таком случае отправленные и считанные значения для устройств, пытающихся выдать на линию рецессивное состояние, не совпадут. В этом случае они должны прекратить передачу. А тот узел, который в этот момент передавал доминантный бит, продолжит свою работу. Доминирование в чистом виде )
Сигналы, которые передаются по витой паре, получили название CAN_H и CAN_L (High и Low). Доминантное состояние соответствует случаю, когда потенциал сигнала CAN_H выше потенциала CAN_L. Рецессивное — когда потенциалы равны (разница потенциалов не превышает допустимого отклонения, 0.5 В).
С этим вроде бы разобрались, давайте двигаться дальше! Пришло время определить, как биты объединяются в кадры. Протокол CAN определяет 4 вида кадров:
- Кадр данных (data frame)
- Кадр удаленного запроса (remote frame)
- Кадр перегрузки (overload frame)
- Кадр ошибки (error frame)
Для кадра данных возможны два варианта — базовый формат и расширенный. Вот так выглядит структура базового формата:
| Поле | Длина | Описание |
|---|---|---|
| Начало кадра (SOF) | 1 бит | Начало передачи кадра |
| Идентификатор (ID) | 11 бит | Идентификатор сообщения |
| Запрос на передачу (RTR) | 1 бит | Доминантный бит |
| Бит расширения идентификатора (IDE) | 1 бит | Бит определяет длину идентификатора, для базового формата — доминантный бит |
| Зарезервированный бит | 1 бит | Зарезервировано |
| Длина данных (DLC) | 4 бита | Количество байт данных |
| Данные | 0 — 8 байт | Данные |
| Контрольная сумма (CRC) | 15 бит | Контрольная сумма |
| Разграничитель контрольной суммы | 1 бит | Рецессивный бит |
| Промежуток подтверждения (ACK) | 1 бит | Для приемника — доминантный бит, для передатчика — рецессивный |
| Разграничитель подтверждения | 1 бит | Рецессивный бит |
| Конец кадра (EOF) | 7 бит | Все биты рецессивные |
А это структура расширенного:
| Поле | Длина | Описание |
|---|---|---|
| Начало кадра (SOF) | 1 бит | Начало передачи кадра |
| Идентификатор A (ID A) | 11 бит | Первая часть идентификатора |
| Подмена запроса на передачу (SRR) | 1 бит | Рецессивный бит |
| Бит расширения идентификатора (IDE) | 1 бит | Бит определяет длину идентификатора, для расширенного формата — рецессивный бит |
| Идентификатор B (ID B) | 18 бит | Вторая часть идентификатора |
| Запрос на передачу (RTR) | 1 бит | Доминантный бит |
| Зарезервированные биты | 2 бита | Зарезервировано |
| Длина данных (DLC) | 4 бита | Количество байт данных |
| Данные | 0 — 8 байт | Данные |
| Контрольная сумма (CRC) | 15 бит | Контрольная сумма |
| Разграничитель контрольной суммы | 1 бит | Рецессивный бит |
| Промежуток подтверждения (ACK) | 1 бит | Для приемника — доминантный бит, для передатчика — рецессивный |
| Разграничитель подтверждения | 1 бит | Рецессивный бит |
| Конец кадра (EOF) | 7 бит | Все биты рецессивные |
Результирующий идентификатор получается в результате объединения полей «Идентификатор A» и «Идентификатор B«.
Кадр удаленного запроса (remote frame) представляет из себя кадр данных, описанный выше, но без поля данных и с рецессивным битом RTR. Он используется в случае, когда один узел хочет запросить данные у другого узла.
Кадр ошибки (error frame) передает устройство, обнаружившее ошибку в сети. Фрейм ошибки имеет наивысший приоритет и принимается всеми устройствами сети в обязательном порядке.
Кадр перегрузки (overload frame) используется очень редко. Его идея и назначение заключаются в том, что с его помощью устройство, которое в данный момент не может принять данные, запрашивает повторную передачу этих же данных.
Давайте вернемся чуть назад, к арбитражу данных, и рассмотрим, что это может означать на практике. Итак, несколько устройств начинают передачу сообщения, а точнее кадра данных. Передается бит начала кадра и затем начинается передача идентификатора сообщения. Как вы помните, приоритет будет у того устройства, которое будет передавать доминантный бит, в тот момент, когда все остальные будут передавать рецессивный. То есть чем «позже» среди битов идентификатора появится «рецессивный бит», тем выше будет его приоритет. Другими словами: более высокий приоритет при использовании интерфейса CAN имеют сообщения с меньшим значением идентификатора.
Первые два типа кадров — кадр данных и кадр удаленного запроса — отделяются от других кадров специальным межкадровым промежутком (паузой). А для фреймов ошибки и перегрузки предусмотрена передача без пауз, чтобы обеспечить их скорейшую обработку узлами сети.
Итак, что у нас на очереди теперь? Конечно же контроль ошибок — важнейший аспект работы протокола CAN. Стандарт предусматривает несколько механизмов:
- Во-первых, это контроль передачи битов — уровень сигнала в сети сравнивается с передаваемым для каждого бита.
- Второй механизм заключается в использовании дополнительных битов (stuffing bit). После передачи любых пяти одинаковых битов автоматически добавляется передача бита противоположного значения. Таким образом, при передаче шести одинаковых битов диагностируется ошибка stuffing’а. Этот механизм используется для кодирования всех полей фреймов данных и запроса. Исключением являются только поля промежутка подтверждения, разграничителя контрольной суммы и EOF.
- Стандартная процедура проверки контрольной суммы. Передатчик вычисляет контрольную сумму для текущего кадра и передает ее в линию. В свою очередь, приемник также вычисляет контрольную сумму для принимаемых данных и сравнивает ее с тем значением, которое было отправлено передатчиком. В случае не совпадения значений диагностируется ошибка CRC.
- Также выполняется контроль битов фрейма, которые должны иметь заранее определенное значение. В случае, если реальное значение не совпадает с тем, которое ожидается, возникает ошибка.
Благодаря всем этим механизмам, вероятность необнаружения ошибки является очень низкой, что, конечно же, не может не радовать
Кроме того, если один из узлов обнаружил ошибку в сообщении, он сообщает об этом в сеть CAN при помощи фрейма ошибки. А поскольку сеть у нас широковещательная, то о возникновении ошибки становится известно всем участникам коммуникации. И если в сообщении была обнаружена ошибка, его передача будет осуществлена еще раз.
И на этом еще не все! Каждый узел может находиться в одном из трех состояний:
- Error Active
- Error Passive
- Bus Off
Протокол CAN предусматривает, что изначально, после старта, узел находится в первом из этих состояний — Error Active. Каждое устройство имеет два счетчика ошибок:
- Счетчик ошибок передачи
- Счетчик ошибок приема
Существуют определенные правила обслуживания этих счетчиков, которые сводятся к следующему. Передатчик, обнаруживший ошибку, увеличивает свой счетчик ошибок передачи быстрее, чем приемники увеличивают свои счетчики ошибок приема. Это связано с предположением, что при ошибке, вероятность того, что сбой произошел именно в передатчике, а не в приемнике, достаточно велика. На практике ошибка передачи увеличивает соответствующий счетчик на 8, а ошибка приема лишь на 1. При приеме или передаче корректного сообщения как счетчик ошибок передачи, так и счетчики ошибок приема уменьшаются на 1.
Если значение любого из этих двух счетчиков узла превысит значение 127, то узел переходит в состояние Error Passive. А если величина одного из счетчиков превысит 255, то узел перейдет в состояние Bus Off.
Разница между этими состояниями заключается в действиях узла при диагностировании ошибки:
- Узел в состоянии Error Active при обнаружении ошибки передает в шину Active Error Flags — 6 доминантных бит. Поскольку биты доминантные, то это сообщение нарушает обычную работу шины и поэтому все устройства сети также фиксируют возникновение ошибки.
- Узел в состоянии Error Passive при обнаружении ошибки передает в шину Passive Error Flags — 6 рецессивных бит, которые игнорируются всеми другими участниками обмена. Поэтому увеличивается только величина счетчика ошибок одного конкретного узла.
- И, наконец, узел в состоянии Bus Off ничего не передает в сеть — ни фреймы ошибок, ни фреймы данных, ни какие-либо другие.
Как видите, протокол CAN крайне интересен для изучения, надежен, безопасен, и удобен в использовании. И на этой позитивной ноте на сегодня заканчиваем, скоро займемся практической реализацией протокола, также поговорим о микросхемах и устройствах, обеспечивающих работу с CAN. Так что подписывайтесь на обновления, буду рад снова видеть вас на нашем сайте