Как исправить контрольную сумму прошивки
Пробуем. Машина заводится, хорошо работает, но не гаснет лампа « Check Engine ». Это проявилась ошибка контрольной суммы ПЗУ. С этим можно бороться. Для этого снова открываем исходную прошивку. При открытии исходной прошивки одновременно открывается и файл с редактированной прошивкой. При открытии исходного файла программа просчитывает его контрольную сумму (контрольная сумма – ото сумма значений всех байт в файле) и пишет ее в строке заголовка программы (Рис.12). Что бы изменить контрольную сумму необходимо найти участок в прошивке не занятый ни под программу, ни под калибровки. Практически всегда этот участок содержит значение FF , что соответствует максимальному значению на графике. Другим отличительным признаком свободного участка может являться то, что следующий за ним фрагмент начинается с «круглого» адреса типа XXXX 0, где X — любой шестнадцатеричный символ (Рис. 17).

Рис. 17 Посредине расположен свободный участок прошивки.
Узнать адрес любого значения прошивки можно, если подвести к нему курсор мыши. В левых верхних углах окон отображается текущий адрес.

Рис. 18 Изменение свободного участка прошивки с целью корректировки контрольной суммы.
Все предыдущие изменения прошивки были направлены на увеличение контрольной суммы, поэтому в свободном участке значения надо уменьшать (Рис.18). Выделим фрагмент на свободном участке прошивки и опустим значения. Для того, что бы узнать контрольную сумму редактируемой прошивки надо воспользоваться опцией меню Options=>Indicate CheckSum . В правом верхнем углу редактора появится значение контрольной суммы редактируемой прошивки. При этом следует учитывать, что пересчет контрольной суммы происходит после каждого изменения, а это занимает существенное время. Поэтому грубую подгонку контрольной суммы следует делать при выключенной опции.
После подгонки контрольной суммы проверяем прошивку на машине. Ошибки нет и машина едет ощутимо лучше.
Как исправить контрольную сумму прошивки
Подавляющее большинство специалистов-новичков не задаются вопросом — что такое контрольная сумма и зачем она нужна. Но только до поры до времени, пока не столкнутся с каким-нибудь важным вопросом, связанным с контрольной суммой. В сегодняшней статье мы постараемся как можно более простыми словами, с приведением примеров, объяснить смысл данной сущности.
Итак, начнем с определения (этот абзац рекомендуем прочитать медленно и вдумчиво). Контрольная сумма (КС) — это результат работы некоторой функции, преобразующей исходные данные фиксированной или произвольной длины в набор данных фиксированной длины. Условно говоря, КС рассчитывается по некоторому алгоритму, некоторой формуле, на вход которой подаются данные, а на выходе получается результат вычислений над этими данными. По контрольной сумме ЭБУ определяет целостность информации, записанной в его память.
Если звучит муторно и сумбурно, то давайте рассмотрим пример функции расчёта КС. Возможно так смысл применения КС станет понятнее.
Для простоты примера возьмем не Flash-память, а память EEPROM от Bosch ME7.5 (VW Golf4), которая содержит 512 байт информации (см. скриншот).


Область EEPROM рассматриваемого автомобиля содержит пин приборной панели, синхронизацию иммобилайзера и прочие данные. Вся область данных занимает 512 байт, которые можно условно разделить на 32 строки по 16 байт. Большинство строк содержат в себе 14 байт «полезной» информации, а 2 последних байта рассматриваемых строк — это КС. Некоторые строки (например, первая) не содержат в себе КС.
Для тех строк, где КС присутствует, в данном конкретном случае, она вычисляется следующим образом:
CS = LittleEndian((0xFFFF – (page_number – 0x01)) – (value(page_number * 0x10 + 0x00) + value(page_number * 0x10 + 0x01) + value(page_number * 0x10 + 0x02) + … + value(page_number * 0x10 + 0x0D))), где
page_number – номер строки от 0x00 до 0x1F;
value(address) – значение по адресу, указанному внутри скобок;
LittleEndian — порядок записи байтов от младшего к старшему (к примеру, если КС равна 0xFB7B, то в порядке Little Endian она записывается как 0x7BFB);
Все значения начинаются префикса 0x, что значит, что они записаны в шестнадцатеричной системе счисления.
Интереса ради, можно открыть стандартный калькулятор Windows в режиме «программист» и пересчитать КС какой-нибудь строки. Скажем, третьей строки (она же 0x02):
CS = LittleEndian((0xFFFF – (0x02 – 0x01)) – (value(0x20) + value(0x21) + value(0x22) + … + value(0x2D))) = LittleEndian((0xFFFF – (0x02 – 0x01)) – (0x05 + 0x01 + 0x02 + 0x00 + 0x02 + 0x2B + 0x01 + 0x00 + 0x03 + 0x00 + 0x69 + 0xC1 + 0x00 + 0xA5)) = LittleEndian((0xFFFE) – (0x0208)) = LittleEndian(0xFDF6) = 0xF6FD
Сходится? Еще бы! (если не верите, то посмотрите на изображение выше и не поленитесь пересчитать самостоятельно)
А что если КС не сошлась бы? В таком случае, машина бы просто не завелась. Ведь на этапе самодиагностики (в процессе включения), ЭБУ бы пересчитал КС каждой строки, увидел бы несхождения (хотя бы одной строке), и принял это за нарушение целостности данных, что бывает при неисправностях элементов памяти ЭБУ.
К слову, каждый ЭБУ использует собственные способы расчета КС. Более того, для разных областей данных могут использоваться разные способы расчета.
Ладно. Оставим теорию и вернемся к практике. На практике нам требуется записывать тюнинговые прошивки (калибровки) в ЭБУ двигателя. И, очевидно, что эти прошивки должны быть с пересчитанной КС. Иначе, если мы запишем прошивку с непересчитанной КС, то при запуске ЭБУ увидит несхождение КС и, как минимум, зафиксирует ошибку. Как максимум, запуск двигателя не состоится.
Впрочем, не стоит сильно переживать по этому поводу. Редакторы калибровок, в которых мы работаем, в большинстве случаев, пересчитывают КС в сохраняемой прошивке. Более того, сами флэшеры перед записью прошивки всегда проверяют и пересчитывают КС (если она некорректна), исключая ну совсем уж уникальные случаи. Единственное место, где следует работать крайне внимательно — инженерные способы записи (BSL, BDM, JTAG). В зависимости от используемого оборудования, автоматического пересчета КС при записи может и не быть.
Контрольная сумма прошивки колибровок SiriusD42

На днях купил коммерческую прошивку колибровок GMtools E2, начитавшись форумов решил прошить свой эбу(1CDB)
Галлетто был преобретен уже, и опробован в качестве Kline адаптера.
Купил прошивку, скачал, проверил кс(контрольную сумму) не верна, написал на сайт где покупал, ответили колибровки этих блоков все такие, и что загрузчик в процессе загрузки сам исправляет КС .
Ну решил прошивать, сделал диагностику эбу, ошибок нет, сохранил свою стоковую прошивку, залил купленную, все норм.
Зашёл снова CE, дабы сделать сброс адаптаций и проверить ошибки, и вот она, ошибка контрольной суммы ПЗУ, сбросил ошибку, прокатился, машина действительно едет иначе, не спорт кар конечно, но приятнее, и разгон и звук мотора.
Заглушил, постоял включаю зажигание и снова та же ошибка, сбросил.
Решил проверить сток, залил назад свою заводскую, ошибок нет, заливаю купленную, ошибка КС ПЗУ.
И как же быть, прошивка действительно меняет работу двигателя в лучшую сторону, но эта ошибка все портит!
Подскажите как исправить КС на верную, или чем исправить?
Может кто то сможет это сделать, исправить пересохранить и прислать обратно?
Надеюсь на помощь профи в этом деле !
Дополняю свою историю, после посещения форума автомастеров.нет(портал автомастеров)стало понятно что прошивка вполне рабочая, ее проверили форумчане, на своих прогах, в частности КС(контрольную сумму)она верна.Проблема таилась в программе идущей вместе с галлетто 1261, так называемая Проверка КС прошивок.Так вот эта прога по идее должна была проверять КС и в случае необходимости исправлять, но по факту она исправляла все прошивки, не важно верна КС или нет.В итоге нормальная прошивка становилась кривой, и после заливки выскакивала «ОШИБКА КОНТРОЛЬНОЙ СУММЫ ПЗУ»
И что еще важно, прошивки с не посчитанной КС помечаются буквами в конце названия _NO_CS.
Прошивку залил, ошибок нет, прокатился все норм.Всем удачи на дорогах!
P.S.Кому нужна прошивка на авто, обращайтесь на форум, там вам напишут прошивку под вас, учитывая то что вы хотите от авто!
Цена вопроса: 500 ₽ Пробег: 104 520 км
2 февраля 2020 Метки: тюнинг
Здравствуйте! У меня прошивка слетела…

Периодически клиенты задают вопрос — а ваша прошивка не слетит? Или звонят со словами — я у вас год назад прошивался, а сейчас прошивка слетела!
Ну что же давайте разбираться вместе.
Прошивка — это файл записанный во внутреннюю Flash память блока управления. В этом файле содержится программа и калибровки по которым блок управляет двигателем. Как и любой другой файл сам по себе он вдруг поменяться не может! Не бывает так что вы записали на флешку любимую песню Киркорова, но после зимних морозов Бедросович на записи вдруг осипшим голосом начал петь! Так же и с прошивкой! Сам по себе файл поменяться не может, за исключением физической неисправности ЭБУ или воздействия на него внешних факторов (сильных скачков напряжения или электромагнитных импульсов) что огромная редкость.
Так же для контроля целостности прошивки используется контрольная сумма!
Контрольная сумма — некоторое значение, рассчитанное по набору данных путём применения определённого алгоритма и используемое для проверки целостности данных
При изменении хотя бы одного бита в прошивке — контрольная сумма изменится и блок в лучшем случае выдаст ошибку, а в худшем (если повреждения затронут критически важную область) двигатель вовсе не запуститься.
Но давайте попробуем на практике!
Итак берем прошивку от Лада Веста 1.6 АМТ i756ah03 и проверяем в редакторе прошивок ее контрольную сумму — 32А1

Редактор прошивок сообщает нам о том, что контрольная сумма 32A1 и совпадает с ее значением указанным в теле прошивки.
Далее мы открываем прошивку не в редакторе прошивок (т.к. он автоматически пересчитывает контрольную сумму), а в HEX редакторе, и в произвольном месте трем один байт сымитировав тем самым нештатное изменение прошивки.

сохраняем измененный файл. Снова проверяем контрольную сумму в редакторе прошивок.

Видим, что контрольная сумма поменялась с 31А1 на 32С0 и редактор прошивок автоматически исправил данные о контрольной сумме в теле прошивки! Но мы в данном случае исправления контрольной суммы не сохраняем т.к. нам интересно посмотреть что будет если прошивка вдруг поменяется сама по себе.
Записываем нашу правленую прошивку в блок

Запускаем двигатель!
В скором времени после пуска загорается CHEK ENGINE

Подключаем диагностику. И видим ошибку P0601 — ошибка контрольной суммы ПЗУ!


ЭБУ автоматически пересчитал контрольную сумму! И т.к. она не совпала с той что указана в теле прошивки выставил соответствующий код ошибки!
Вывод:
В случае если в результате неисправности памяти блока управления, скачков напряжения, электромагнитных импульсов вызванных взрывом атомной бомбы и прочих внешних факторов в теле прошивки что либо поменяется — вы тут же увидите горящий значок Chek Engine и ошибку P0601!
Если ошибки P0601 нету, а автомобиль вдруг поехал не так как раньше, значит в автомобиле что-то сломалось и надо искать причину в «железе»!