Привет, сетевой друг!
Сегодня разберём CAN-шину - важную часть современных авто и не только.🟣Это двухпроводная дифференциальная полудуплексная шина - просто говоря, два провода, по которым данные могут течь в обе стороны, но не одновременно.
🟣Физический уровень: Шина состоит из пары проводов CAN_H и CAN_L, скрученных вместе, чтобы глушить помехи. На концах ставят терминирующие резисторы, а в режиме ожидания напряжение держится около 2.5 В. Длина шины влияет на скорость: от 10 кбит/с на 5 км до 1 Мбит/с на 40 м. На один сегмент можно подключить до 127 устройств.
🟣Канальный уровень: Пакет CAN - это набор битов: идентификатор, 8 байт данных и служебные биты (ACK, CRC, начало и конец). Узлы обычно «флудят» шину: данные идут непрерывно, а нужный узел выхватывает своё сообщение. Если два устройства передают одновременно, выигрывает пакет с меньшим ID — встроенный механизм арбитража, который делает шину надёжной без потери скорости.
🟣Обнаружение ошибок: CAN сам исправляет ошибки аппаратно. Есть несколько механизмов: наблюдение за битами, bit-stuffing, проверка структуры пакета, проверка ACK и CRC. Если ошибка повторяется 255 раз, трансивер отключается (bus-off). Всё это работает на уровне ASIC, и программист видит только готовые данные.
Серверная Админа | #CAN #CANшина
