Вот, решился для "очумелых ручек" разложить дамп от нашеого KIA Sportage KM по полочкам, ну или практически по полочкам, для самостоятельной правки и изучения/исследования вопроса, опять-же для фанатов "очумелых ручек".
Только так сказать программная часть вопроса без всяких технологий разборки панели и вопросов чем и как читать и писать дамп в память.
Попытаюсь описать все простеньким языком, для неподготовленого "искателя приключений".
И так, для работы нам понадобится пару простеньких программ и небольшое знание математики.
В принцепе любой HEX-редактор сгодится. Я пользуюсь старым, добрым, ламповым Hex Workshop, к коему привык с детства.Также нам понадобится супер-пупер инструмент — виндовый калькулятор, в инженерном его виде. Ну или любые аналги.
В примере будет использован дамп от спортажа ресталинга. Разницы в структуре дампа между до рестайлом и рестайлом по большому счету нет.Всего одно несущественное отличии — по разным адрессам в дампе прописан номер самой приборки.
Так как мы уже знаем в приборке используется микросхема памяти 93S56, то имеем дамп длинной в 256 байт.
Далее привожу его струтктуру.
Первые 32 байта (00h-20h) это есть пробег (показания ODO) — На скрине отмеченны коричневым цветом. С цветами у меня засада. Ну пусть это будет коричневый.
Прописан пробег НЕ в явном виде. Но ничего сложного, обычный алгоритм для VDO панелей. В данном дампе пробег 96 км.
FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF = 96 км
Не понятная арифметика, да?
Попробуем разобрать алгоритм…
По сути пробегом является всего два байта FC FF = 96 км. Ну так уж устроен алгоритм VDO, что процессор работает — берет и пишет значения пробега сразу в первые 32 байта микросхемы памяти.
Как надеюсь все понимают значения в дампе приведены в HEX (Шестнадцатиричной форме) Значения пробега в окошке одометра в десятичной.
И так, как же считается пробег.
FC FF = 96 км
Для удобства первым делом меняем первый и второй байт местами
FF FC = 96
Открываем виндовый калькулятор в инженерном его виде, переводим его в шестнадцатиричное счисление (галочку HEX), так как сейчас мы собираемся работать с данными длиною в два байта, то и поставим галочку в кальке на 2 байта.
Далее вводим в кальк наше значение FFFC и производим над ним логическое дейсвие NOT соответсвующей кнопочкой.
Получаем значение 3
Далее это значение умножается на 20h (32 в десятичном виде) получаем 60h
Переводим 60h в десятичный вид установкой галочки Dec. И получаем наши 96 км. Вуаля.
В обратную сторону, что более представляет интерес, считается в обратной последовательности.
Пример. Допустим имеем пробег на одометре 78592км. Обратим его по алгоритму VDO в HEX значение.
В кальке переводим 78592 в шестнадцатеричный формат галочкой Hex, получаем 13300h
13300h делим на 20h и получаем 998h
Далее логическое действие NOT и галоча 2 байта. Получаем F6 67
Меняем байты местами 67 F6 и заполняем этим значением первые 32 байта нашего дампа. Вуаля!
Таким образом можно считать пробег кратный 32 км или 20h …
В принцепе на просторах инета можно найти готовый калькулятор пробегов для разных приборок. Тоже все они кратны 32 км.Но тут мы разобрали само алго.
В принцепе можно корректировать пробег методом правки дампа кратный 2 км. (все четные значения). Таков уж алгоритм работы панели. Все нечетные значения находятся в энергозависимой памяти самого процессора, так сказать +1
Для этого возьмем пример все с теми же 96 км.
FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF
FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF
98 км будет выглядеть так
FBFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF
FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF
100 км будет выглядеть так
FBFF FBFF FCFF FCFF FCFF FCFF FCFF FCFF
FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF
102 км будет выглядеть так
FBFF FBFF FBFF FCFF FCFF FCFF FCFF FCFF
FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF
104 км будет выглядеть так
FBFF FBFF FBFF FBFF FCFF FCFF FCFF FCFF
FCFF FCFF FCFF FCFF FCFF FCFF FCFF FCFF
И так далее.
Уменьшение первого байта пробега на еденицу и последующего его дублирования до конца блока. Счетчик, но на уменьшение как-бы.
Ладно с пробегом разбрались. Идем дальше по структуре дампа.
После пробега в дампе идут 6 блоков различных колибровок приборной панели (выделенные голубым цветом) и соответсвующии им в конце блока контрольные суммы (КС) для проверки валидности блока программой, по два байта (выделенны желтым цветом)
Адресса
20h-3Ch Блок 1
3Eh-42h Блок 2
44h-5Ah Блок 3
5Сh-6Ch Блок 4
6Eh-80h Блок 5
82h-B2h Блок 6
Для включения/отключения бортового компа/счетчика пробегов, их варианты и изменеие систем счисления приборки нам нужен будет Блок 2 и его контрольнная сумма.
Выглядит он в нашем дампе так:
Сам блок данных 38301FD3
И его КС A5C5
Прежде чем что-то менять в блоках разберемся как считаются КС в них.
И так имеем блок из 4 байт: 38 30 1F D3 и КС блока 2 байта: A5 C5
КС по сути дела состоит из двух алгоритмов.
Первым считается первый байт КС(A5), вторым алгоритмом считается второй байт КС(C5)
Первый байт КС это обычный checksum(8bit) NOT — В кальке ставим галку hex и 1 байт и последовательно складываем все байты блока и в конце делаем NOT
(38+30+1F+D3)NOT=A5
Второй байт КС считается складыванием всех байт блока по XOR и в конце +1 — В кальке ставим галку hex и 1 байт
(38 xor 30 xor 1F xor D3 xor )+1 = C5
Мега защиту отхакали. Радуемся. Теперь мы можем все, что угодно накикать в блоки калибровок и вскормить панели.
В остальных блоках алгоритм подсчета КС идентичный.
Теперь разберемся в самой структуре интересующего нас Блока 2, всего 4 байта.. лехкотня?
38 30 1F D3
Начнем с первого байта — 38h
Первая цифра отвечает за несколько параметров — Есть или нет нули спереди показаний ODO и суточного пробега и включение/выключения в компе среднего расхода (см.скриншоты в первых постах темы)
Значения и показания:
0 — Нули в ODO+суточнике (нет расхода)
1 — Нули в суточнике (нет расхода)
2 — Нули в ODO (нет расхода)
3 — ОК WORK (нет расхода)
4 — Нули в ODO+суточнике (нет расхода)
5 — Нули в суточнике (нет расхода)
6 — Нули в ODO (нет расхода)
7 — ОК WORK (нет расхода)
8 — Нули в ODO+суточнике
9 — Нули в суточнике
A — Нули в ODO
B — ОК WORK
C — Нули в ODO+суточнике
D — Нули в суточнике
E — Нули в ODO
F — ОК WORK
Вторая цифра отвечает за режим работы панели как компютера или как обычного счетчика пробега А и Б
и за, то в какой сисеме счисления работает панель.. Мили/Км, Литры/Галлоны, Цельсия/Фарингейты (см.скриншоты в первых постах темы)
Значения и показания:
0 — AB km
1 — АB mil
2 — COMP km
3 — COMP mil
4 — АB km
5 — АB mil
6 — COMP km
7 — COMP mil
8 — АВ km
9 — АВ mil
A — COMP km
B — COMP mil
C — АВ km
D — АВ mil
E — COMP km
F — COMP mil
Второй байт блока — 30h
Первая цифра — не дала никаких изменений ( назначение не удалось выяснить)
Вторая цифра на рестайле отвечает за присутсвие/отсутсвие пиктограмы "Машинка" на дисплее
в режиме моточасы и остаток пробега на остатке топливы в баке. (см.скриншоты в первых постах темы)
Значения и показания:
0 —
1 -
2 -
3 -
4 -
5 -
6 -
7 -
8 — NO CAR
9 — NO CAR
A — NO CAR
B — NO CAR
C — NO CAR
D — NO CAR
E — NO CAR
F — NO CAR
Третий байт блока — 1Fh
Отвечает за сброс среднео расхода топлива при заправке автомобиля.
Значения и показания:
00h — расход не сбрасывается.
Все остальные значения сбрасывают расход. До конца не изучал. Возможно есть другие значения связанные со сбросом расхода.
Четвертый байт блока — D3h
Первая цифра в моем случае отключала работу стрелочных приборов. Тоже до конца не понял зачем. Или может в купе с другими параметрами в других блоках что-то дает. Не изученно.
Значения и показания:
0 — NOT ALL
1 — NOT TAHO AND SPEED
2 — NOT ALL
3 — NOT TAHO AND SPEED
4 — NOT SPEED
5 — NOT SPEED
6 — NOT SPEED AND FULL
7 — NOT SPEED
8 — NOT TAHO
9 — NOT TAHO
A — NOT TAHO AND FULL
B — NOT TAHO
C — NOT FULL
D — OK WORK
E — NOT FULL
F — OK WORK
Вторая цифра — не дала никаих изменений ( назначение не удалось выяснить)
Небольшое резюме: Нам вобщем-то интересен первый байт для хактивации и выбора компа и от части третий для тех кто хочет что-бы после заправки не сбрасывался средний расход.
Остальные блоки сильно не копал. Но в них есть параметры и константы для коректировки всех стрелочных приборов. Тут темный лес вообщем.
Далее в дампе зеленым отмеченна дата производства/калибровки приборки, в явном виде, в принцепе должна совпадать с датой на наклеке самой приборки.
В нашем случае 16.11.09 года.
Розовым отмечен номер самой приборки N307 тоже в явном виде…
Далее непонятным цветом отмеченны циферки явно это пароль для входа дилерского или даже скорее заводского оборудования в панель приборов по диагностике для корректировки пробега\приборов. Возможно считается по VIN .. Но тут только мои догадки.
Че вспомнил, то и изложил.
Во вложении сам дамп и фаил закладки для Hex Workshop для файла дампа со всеми пометками.
П.С. Можно склепать простенькую гражданскую тулзу для работы с дампом. Подсчет КС и изменения всего, что в нем есть.. Но лень и безперспективня.
У вас нет необходимых прав для просмотра вложений в этом сообщении.