Контрольная сумма прошивки. Что это такое и зачем это нужно?
Автор:
Определимся сразу, что под термином "прошивка" в данной статье будет подразумеваться программное
обеспечение электронного блока управления (ЭБУ) системы управления двигателем автомобиля.
Что же содержится внутри прошивки? Условно области данных прошивки можно разбить на две области.
Первая область - это сам программный код, который осуществляет управление работой автомомобильного
двигателя. Вторая область - это непосредственно калибровочные данные (таблицы, графики, параметры)
для работы программного кода.
При изготовлении тюнинговой прошивки в подавляющем большинстве
случаев осуществляется изменение только калибровочных данных, а сам программный код никакому
изменению не подвергается. Прежде всего это объясняется большой сложностью в изменении программного
кода, а также тем, что в подавляющем большинстве случаев для изготовления тюнинговой прошивки
достаточно изменения лишь калибровочных данных. Однако, случаи, когда необходимо вмешиваться в
программный код прошивки все же встречаются, поэтому приведу один из примеров, когда без вмешательства
в программный код для изготовления тюнинговой прошивки не обойтись. Например, при замене в системе
управления двигателем датчика массового расхода воздуха (ДМРВ) на датчик абсолютного давления (ДАД)
потребуется заново переписать алгоритм расчета количества воздуха, который попадает в цилиндры двигателя.
Это объясняется тем, что алгоритмы для расчета количества воздуха при использовании ДМРВ и ДАД различны,
и одним изменением калибровочных данных этот вопрос решить нельзя.
Современные системы управления двигателем осуществляют помимо самого управления, собственную самодиагностику.
В число процедур самодиагностики, помимо прочих, входит и проверка исправности энергонезависимой памяти ЭБУ, которая
содержит прошивку. Для такой проверки в прошивке хранится собственная контрольная сумма, которая получается
суммированием байт определенной области прошивки (как области программного кода, так и калибровочных данных).
Программа ЭБУ в ходе своей работы рассчитывает значение контрольной суммы и сравнивает это значение со
значением, которое хранится в прошивке (т.е. было заложено еще на заводе-изготовителе). Если эти значения
не совпадают, то это считается ошибкой. У читателя в связи с эти может возникнуть вопрос: "Что же произойдет
при изменении кем-либо, к примеру, калибровочных данных прошивки?". Ничего хорошего при этом не произойдет.
В лучшем случае загорится лампа "Check Engine" в комбинации приборов, в худшем, автомобиль вообще не заведется.
Естественно, контрольная сумма применяется не только для проверки исправности энергонезависимой памяти,
а и для того, чтобы защитить саму прошивку (т.е. поставить преграду чип-тюнерам), от несанкционированного ее изменения.
Таким образом, прежде чем производить тюнинг какой-либо прошивки необходимо разобраться с алгоритмом
подсчета и расположением контрольной суммы в теле прошивки, иначе грош цена такому чип-тюнингу. Данное положение не
относится к специализированным программам редактирования калибровок прошивок, которые автоматически корректируют,
контрольную сумму, после внесения пользователем изменений в калибровочные параметры. Однако, для того,
чтобы разобраться с алгоритмом подсчета контрольной суммы прошивки необходимо дизассемблировать прошивку,
и в дизассемблированном листинге найти алгоритм вычисления контрольной суммы.
Как правило, эти алгоритмы практически не меняются в нескольких поколениях ЭБУ у одного и того же производителя.
Тут можно привести пример с ЭБУ GM. Алгоритм подсчета контрольной суммы прошивки на разных ЭБУ GM автомобилей
Daewoo, Opel одинаков. Кроме того, только в прошивках ЭБУ GM, из всех исследованных мною, есть возможность
штатной работы программного кода ЭБУ в случае ошибочной контрольной суммы. Для этих целей служит специальный
байт в области калибровочных данных, определенное значение которого полностью отключает контроль за контрольной суммой прошивки.
Следует также иметь ввиду, что в прошивке может одновременно присутствовать несколько контрольных сумм,
которые соответствуют разным участкам прошивки. В качестве примера к данному замечанию можно привести
прошивки ЭБУ Bosch ME.
Чтобы подытожить все вышесказанное, определим следующие положения:
Прошивка состоит из двух областей: программного кода и калибровочных данных.
Практически все прошивки содержат контрольную сумму для самодиагностики и воспрепятствования изменению данных.
Любое изменение данных в области программного кода или калибровочных данных требует пересчет контрольной суммы прошивки.
Поиск расположения и алгоритма подсчета контрольной суммы в некоторых случаях представляют собой нетривиальную задачу.
Воспроизведение статьи в любом виде без согласования с автором запрещено.