
Приветствую читателя в своём бортжурнале!👋🚗
Как уже давно известно на наших машинках функция круиз-контроля предусмотрена в блоке управления двигателя ME17.9.11(1), но не идёт на авто с завода. Энтузиасты всё уже давным-давно раскопали🔍, поэтому для установки круиза на ваш авто по заводу(имеется ввиду вариант с установкой кнопок руля от ceed JD или cerato YD, варианты с встраиваемыми платами не рассматриваются) понадобиться "всего-лишь":
1. Поменять кнопки руля на кнопки с ceed JD или cerato YD с функцией круиз-контроля(иногда ЭУР и лимитера🕹️), при необходимости их доработать по схеме сопротивлений, которые умеет читать ЭБУ. К слову кнопка лимитера изображена не просто так😉, её тоже можно подключить, но по аналоговой схеме без дополнительной прошивки ЭБУ лимитер работать не будет.




2. Провести от руля к ЭБУ 3 управляющих провода от резистивных кнопок руля;

3. Если у вас версия ЭБУ ME17.9.11 не прошитая ранее, то прошить ЭБУ💾 — снять ограничение скорости снизу для активации круиз-контроля. В стоке по адресу 0x2024E в P-FLASH прошивки ЭБУ лежит word-значение 0xFFFF в порядке lohi, интерпретация 0xFFFF / 128 = 511 км/ч, нужно поправить это значение на 0x0014 (0x1400 / 128 = 40 км/ч) или любое другое, соответствующее нижней границе скорости включения круиза, которое вам удобно. Не забывать что в кодировках также есть и ограничение по передачам, в которых может включаться круиз или предельные значения, лично мной в разных местах прошивки были найдены 3 разных пары значений ограничивающих интервал активации/работы/запоминания скорости системой круиз-контроля🧠⚙️.

4. Придумать что-то с индикацией, так как с завода её также нет (это опционально — без неё всё будет работать), далее приведу одни из возможных вариантов индикации:


5. Пользоваться с удовольствием.😎🚗💨
После замены руля на своей машинке появилась дополнительная кнопка ECO, которая мне не нужна ввиду 6-и ступенчатой МКПП и которую впоследствии я заменил на кнопку лимитера, так как ну очень хотелось его реализовать.😅
Единственный вариант, с относительно чётким планом действий я видел в переделке схемы управления системой круиз-контроля с "аналога" на управление по CAN. Но, разумеется, городить дополнительные микросхемы-обёртки со считыванием кнопок руля сильно не хотелось, тем более что постепенно нарабатывался опыт в дизассемблировании прошивки панели приборов SUPERVISION на MB90F025F🔬💻.
Ну и пришёл момент, когда пора…😏
Первым делом разобрал как в прошивке панели приборов реализована отправка CAN пакетов и в отправку в пустой messageBox была встроена отправка нового пакета📡.

Далее разобрал алгоритм работы круиз-контроля и лимитера по CAN, которым щедро в своё время поделился Smit-86 в своём бортжурнале. Продублирую здесь информацию по сигналам управления из его записи📚:
Работы с круиз-контролем по CAN осуществляется путём отправки пакета с параметрами📦:
ID: 0x4F0;
DLC: 8;
Период отправки: 20мс (50гц)⏱️.
Раскладка по данным сообщения следующая:
D0 D1 D2 D3 D4 D5 D6 D7
D0 = 0x00 — ни одна кнопка не нажата
D0 = 0x01 — нажата кнопка Res+
D0 = 0x02 — нажата кнопка Set-
D0 = 0x10 — нажата кнопка Limiter
D1 = текущая скорость автомобиля от панели прибором умноженная на 2
D2 = aliveCounter — счётчик, алгоритм работы которого изложу далее
D3 = 0x00 — ни одна кнопка не нажата
D3 = 0x01 — нажата кнопка Cruise
D4-D7 для нас можно оставить нулями
Более подробная раскладка пакета по битам приведена в изображении📊:

При нажатии любой из кнопок данные кнопки меняются, остальные данные кнопок обнуляются, чтобы избежать двойного толкования логики нажатия кнопок ECU.
Например нажали Set-, пока он нажат: D0 = 0x02 и D3 = 0x00, после этого нажали Cruise, продолжая держать Set-: D0 = 0x00 и D3 = 0x01
Думаю с этим примерно понятно👍.
Касаемо скорости в D1 — просто берём текущую скорость например с пакета с ID 316 или парсим данные с колёс с ID 1F1 или ID 580 (для ESP и ABS соответственно) и посылаем в CAN в формате умноженном на два. Граничное значение 128, так как при умножении на 2 будет переполнение байта. В таком случае (когда скорость VS(VehicleSpeed) >= 128) прибавляем переполнение (1 в старшем байте) к младшему байту. Пример:
VS = 30км/ч -> D1 = 60 = 0x3C
VS = 95км/ч -> D1 = 190 = 0xBE
VS = 134км/ч -> D1 = (268 & 0xFF) + 1 = 0x0D
Теперь разберём алгоритм счётчика, он относительно простой🧮:
Для скоростей < 128 счётчик перебирает чётные числа: 0x00 0x02 0x04 … 0xFC 0xFE 0x00 0x02 и т.д.
Для скоростей >= 128, где идёт переполнение байта скорости, счётчик перебирает нечётные числа: 0x01 0x03 0x05 … 0xFD 0xFF 0x01 0x03 и т.д.
Кнопки руля были переделаны под резистивную схему и подключены на вход АЦП панели приборов вместе с кнопки управления бортовым компьютером. Схему разводки по резисторам в руле не вижу смысла приводить, так как я реализовал её персонально для себя, как мне было удобно и как было правильно для АЦП, чтобы сохранить достаточный интервал значений для корректной идентификации конкретных кнопок. Интересно было бы поработать с оригинальными кнопками Ceed JD или Cerato, чтобы лёгкой доработкой кнопок в виде перемычки на плане или перемычкой проводов в разъёме объеденить всё в одну цепь и подключить к АЦП приборки🔌. Итого на одном входе АЦП у меня висит сейчас 9 кнопок руля, не хватает только кнопки для ЭУР). Далее написан ассемблерный код для панели приборов по обработке нажатия этих кнопок и правки данных в CAN пакете 0x4F0 на ходу💻.
Информация по активации круиз-контроля от ЭБУ идёт в ID 0x260:
D0 D1 D2 D3 D4 D5 D6 D7
D3 = 0x30 — КК не активирован (ДВС запущен)❌
D3 = 0x32 — активирован КК (ДВС запущен) (горит индикатор КК)🟢
D3 = 0x36 — активирован КК и установлена скорость (ДВС запущен) (горит индикатор КК и SET)🟢✅
Информация по работе лимитера от ЭБУ идёт в ID 0x18F:
D0 D1 D2 D3 D4 D5 D6 D7
D3 = установленная скорость ограничения лимитера в км/ч (без установленной скорости = 0)
D6 = 0x40 — лимитер активирован🟢
D6 = 0x00 — лимитер не активирован⚪
После этого Anton62689 (он же бывший Smit-86) помог мне поправить мою прошивку ЭБУ для активации работы круиз-контроля по CAN шине🛠️. Поправлены предположительно были 3 байта:
1. Codeword of the MoFCCtl in function monitoring: 0x00 -> 0x03 (Кодовое слово на разрешение работы Cruise/Limiter по данным из 0x4F0)
2. Codeword for config. of CLU messages reception on CAN: 0x00 -> 0x01 (Разрешение принимать и парсить сообщение 0x4F0 от панели приборов)
3. Codeword to config. BGCANTCU: 0x00 -> 0x01 (разрешение чтения данных АКПП из CAN)
Немного поковырявшить в WinOLS с разбором прошивки Hyundai Elantra на ME17.9.11.1 были найдены соответствующие байты и написан скрипт для удобной активации и работы с данными опциями с прошивкой ЭБУ для iProg+💻🔍.

В сумме со всего реализованного выше мы имеем рабочий круиз-контроль и лимитер.🎉🚗
Алгоритм работы лимитера схож с круизом: включем режим лимитера разгоняется например до 60км/ч и нажимаем Set-, скорость фиксируется и при попытке разгона выше 60км/ч машина будет сама себя душить, чтобы не дать выйти за пределы допустимой скорости, зафиксированную скорость можно настраивать как вручную прямо на ходу, так и на месте, например заранее. При нажатии на педаль газа выше определённого порогового процента (около 80-90%) лимитер отключает ограничение и машина разгоняется, при этом сама скорость лимитера не сбрасывается и при сбросе скорости ниже скорости фиксации лимитер снова будет ограничивать скорость. Лимитер отключается при включении круиз-контроля или повторном нажатии кнопки лимитера. Скорость фиксации сбрасывается кнопкой Cancel либо при отключении режима.
Плюсы реализации по сравнению с аналоговой схемой:👍
— отсутствие необходимости вести провода до ЭБУ и все вытекающее из этого, всё управление происходит по штатной CAN шине от панели приборов — считаю главное преимущество данного типа установки;
— рабочий лимитер;
— возможная минимальная доработка кнопок руля (подключение всех кнопок на один провод и при необходимости замена сопротивлений);
Минусы:⚠️
— необходимость панели SUPERVISION и персонально для каждого случая написанной для неё прошивки (возможно временно, если будет спрос, то сделаю и на обычные панели);
— необходимость 100% прошивать ЭБУ для работы по CAN независимо от рест/дорест;
Ну и ещё в плюсы при обращении ко мне) — возможность реализовать почти штатную индикацию на панели приборов, как круиза, так и лимитера😎.
К


Ещё одна доработка на пути к реализации доработок максималки в копилку)🔥
Полезные ссылки:
Первая запись по установке Круиз-контроля — 🧭Круиз-контроль на KiaRio3(QB) рестайлинг
База, с которой многие начинали — Круиз-контроль на KIA RIO III (дорестайл)
Запись одного из первопроходцев на рио, кто поставил себе всё это по CAN — Добавляем функционал в наши машинки. КК, лимитер, ЭУР…
Описание установки на дорестайлинг от товарища — Подключение круиз-контроля 🧭 дорестайлинг
Более подробное описание по правке прошивки ЭБУ с "неактивированным" круизом — Активация круиз-контроля 🧭в ЭБУ KIA RIO 3 дорестайлинг
Спасибо за внимание❗
Всем удачи и счастья⭐️🍀


Comments 21
Вообще не разделяю вашего (всех вас кто) рвения лепить что-то на имеющуюся кан-шину, она же очень ответственная, отвечает за безопасность, я вот замкнул блок SRS и мучался с ним. Для всяких "комфортов" же в других тачках есть отдельная кан-шина…
Данные сообщения задуманы в шине и блок ECU умеет их принимать. В данной записи касаемо работы по CAN описано всё точь в точь заводское исполнение как в Kia Ceed JD и других автомобилях, почти везде круиз работает по CAN в отличие от некоторых экземпляров с нашим ЭБУ типа Kia Venga, Kia Ceed ED. Если знать что делать, то и работать будет всё исправно и надёжно. Круиз контроль и подобные вещи напрямую влияют на движение автомобиля поэтому относить их к подсистеме комфорта никак нельзя.
Интересно как именно вы замкнули и что сделали с SRS, что долго с ним мучались, связанное с CAN шиной
Вот именно, что блок ЭБУ другой. Возможно в нем лучше защиты или лучше МК (для обработки доп. функций) или доп "сопроцессор" есть, не зря же он другой. Если б разницы не было бы, то тогда бы в тот же блок бы заливали бы просто другую прошивку. 2. Китайский сканер замкнул кан-шину, короче между землей и проводами кан и между +12 и проводами кан было низкое сопротивление (менее 100 Ом) и вылезла гирлянда ошибок по потере связи, и в том числе SRS вывалился в нестираемую B1620. А прошивка в SRS оказалась залоченной. Я хочу всё это описать отдельным постом, и вроде тыкать по клаве есть возможность, но хочу фотодоказательств наделать чтобы не выглядело как пустая болтовня. Но я на работе, а фотки надо делать в гараже, так что чуть откладываю
B1620 по-моему стирается через правку EEPROM
Залоченной оказалась прошивка EEPROM?
да
А как её пытались считывать? С выпаиванием?
Не, мы уже разобрались с помощью резистора 1 кОм и через кан-шину сбросили ошибку. а именно считыванием уже не заморачивались. Но если в курсе как считать залоченный, поделитесь пожалуйста.
Поясните по поводу резистора. Вставляли резистор вместо подушки или что как? И какой EEPROM установлен в блоке?
Блок SRS 95910-1R050 на МК Nec D70F3628 не имеет отдельной EEPROM, всё сохраняется прям в МК. Резистор ставится между выводами чтобы стирать нестираемые ошибки. Но если не в теме, давай не будем это обмусоливать, смысла не имеет… Я профессионально занимаюсь электроникой и электрикой, просто не автомобильной.
Djoncs
Не, мы уже разобрались с помощью резистора 1 кОм и через кан-шину сбросили ошибку. а именно считыванием уже не заморачивались. Но если в курсе как считать залоченный, поделитесь пожалуйста.
Если не получится совсем считать, то как вариант купить чистый дамп блока по парт-номеру в интернете и просто залить. Если не ошибаюсь, там никаких более данных об авто нет
У меня модифицированный под 2 подушки+ЕСП, залочен (видимо) специально (а не с завода)
Если модифицированный, то ясное дело.
А так есть краш-дамп D-FLASH с этого блока в интернете, можно его почистить iProg'ом и залить обратно, но с ESP будет висеть ошибка в таком случае.
Если даже P-FLASH, при большом желании можно эту штуку задизассемблить и найти где там что отвечает за ESP/ABS
iProg подпайкой считать не смог, но почистить, да, можно было бы. 2. Ну это да, это был как запасной вариант. Я так понял, микруха-конвертор uart-кан знает ключик к МК, так что можно по идее прослушать uart и дизассемблить
Если например этот ключик меняют, то можно просто поменять его прямо в скрипте iprog, его проще задизассемблить
TaxomaS
Данные сообщения задуманы в шине и блок ECU умеет их принимать. В данной записи касаемо работы по CAN описано всё точь в точь заводское исполнение как в Kia Ceed JD и других автомобилях, почти везде круиз работает по CAN в отличие от некоторых экземпляров с нашим ЭБУ типа Kia Venga, Kia Ceed ED. Если знать что делать, то и работать будет всё исправно и надёжно. Круиз контроль и подобные вещи напрямую влияют на движение автомобиля поэтому относить их к подсистеме комфорта никак нельзя.
Интересно как именно вы замкнули и что сделали с SRS, что долго с ним мучались, связанное с CAN шиной
МК как раз таки рассчитываются по объему перерабатываемой информации в единицу времени, есть спец расчеты. Когда количество обрабатываемой инфо превышает возможности — начинает работать нестабильно, например должен опрашивать датчик раз в 10 мс, а начинает раз в 12, и из-за этого какой-то другой блок, которому нужна эта инфа — получает старое значение — и не правильно реагирует… Можете в ИИ вбить "как рассчитать такты процессора"
Слишком очевидные вещи говорите, чтобы спрашивать у ИИ. Просто дело как раз в том, что ЭБУ архитектурно и по железу один в один, может не хватает каких-то элементов для работы с конкретными вещами. Можете взять наш ЭБУ, залить прошивку от Kia Ceed JD и поставить его туда и всё, вероятнее всего, будет исправно работать.
Если вы лезли внутрь прошивок, то могли бы увидеть, что 10мс для такта это как-то слишком много, такты зависят от MCU и его тактирования.
Я даже больше скажу, блок проверяет очень много информации, которой в вашем автомобиле нет и обработка одного CAN пакета, который к тому же принимается и раскладывается в RAM почти на аппаратном уровне для MCU никаких сложностей не представялет, время затрачиваемое на это возможно даже меньше микросекунды
1. вероятнее. 2. вот именно что на аппаратном
На аппаратном имеется ввиду что такты программы на это не тратяться)
Только вот аппаратные тратятся
(ИИ)
Да, микроконтроллер Infineon TriCore SAK-TC1762 имеет очень мощную и гибкую систему прерываний. Архитектура TriCore изначально проектировалась для систем реального времени (таких как ЭБУ двигателя автомобильных систем), где скорость обработки прерываний критически важна.Ключевые особенности системы прерываний TC1762:Контроллер прерываний (Interrupt Router): Блок обрабатывает запросы от всех периферийных модулей (таймеры, CAN, АЦП, UART) и внешних пинов.До 255 уровней приоритета: Каждому источнику прерывания можно назначить свой уникальный уровень приоритета (Service Request Priority Number — SRPN) от 1 до 255.Аппаратное переключение контекста: Это главное преимущество TriCore. При переходе к обработчику прерывания (ISR) процессор автоматически за один такт сохраняет верхний контекст регистров (Upper Context) в специальную быструю память (CSA — Context Save Areas). Это обеспечивает минимальную задержку (latency).Векторная таблица: Адреса обработчиков прерываний хранятся в векторной таблице. За счет приоритезации процессор сразу переходит к выполнению нужного кода без долгого программного опроса флагов.
Да, огонь! Поздравляю, что добился своего. Мне хорошо известно сколько трудов это стоило.
🙏ждём пост по ESP от европейки)