Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
К разработке собственной телеметрии меня привела, пожалуй, многим знакомая ситуация — работало, да перестало. Однажды вечером блок автосигнализации перестал воспринимать брелок. Я понимал, что нужно для начала попытаться перепривязать брелок, для чего требовалось выполнить несложную процедуру, четко следуя инструкциям из руководства по монтажу. Выполнение процедуры становилось невозможным, так как автосигнализация находилась в режиме охраны, отключить которую аварийно можно было кнопкой Valet, введя сервисный код.
Сервисный код я никогда не пытался запомнить, а мастер-код — тем более. Безуспешно перебрать на память несколько кодов я все-таки попытался. В течении нескольких минут мне пришлось угнать свой автомобиль. Трель от сирены в ушах еще потом стояла долго, так как сирена была установлена в салоне авто. Не помню почему я разместил сирену именно там — то ли по собственной лени, то ли увидел в этом какой-то смысл. Знаете, по личному испытанному ощущению, это может привести в сильное замешательство неподготовленного злодея. К моему глубокому сожалению, блок мне пришлось демонтировать. Я начал разбираться как быть дальше и что с этим делать. Кому интересно, что же вышло в итоге, прошу под кат.
У меня было несколько гипотез:
Вариант с наличием глушилки сигнала я проверил сразу же как переехал в безопасное место. Автосигнализация так же не реагировала на брелок.
Я обратился к дилеру по вопросу наличия тех. возможности сброса сервисных кодов. Мне ответили, что такой возможности нет и вам придется приобрести новый комплект за несколько тысяч рублей. Да и будет лучше если вы установите всё это дело у нас — сообщили они, отдав при этом еще несколько тысяч. Такой ответ меня ничуть не удивил, имхо, понятное дело! Дилеру лучше продать новый комплект, чем производить сервисное обслуживание. Тут внезапно я почувствовал как мое настроение резко улучшилось, появилась мысль разобраться во всем самостоятельно, попутно выяснив можно ли сбросить коды или нельзя. Вообще именно такие моменты и побуждают к альтернативам, реверсу, разработке и DIY. Я бросил себе вызов.
Начал я отнюдь не с копаний в блоках, а с альтернативного варианта. Пока Pandora лежала в шкафу я пытался сделать свой модуль. Я прикинул, что если разработать свой модуль автосигнализации, то это будет сразу круто, надежно, гибко и абсолютно не сложно. Что сказать, все это был голый энтузиазм. Я провел несколько недель за написанием прошивки и прототипированием модуля. Процесс был полностью творческим. Так, внезапно, мне приходила какая-либо идея и я с удовольствием реализовывал ее. Например, уже на стадии рабочего прототипа с нужными релюшками, транзисторами и GSM я вдруг захотел добавить еще GPS и Bluetooth. Ну а чего тянуть кота за хвост? Пусть модуль будет сразу крутым, как я изначально прикинул и мне пришлось сменить микроконтроллер на более жирный, так как UART портов у ATMega328 всего один единственный. Достать у AVR что-то распространенное и с тремя UART мне показалось нереальной затеей. Вариант реализации программных UART мне не понравился, по той простой причине, что аппаратный надежнее. Помню как STM32 уже вовсю мелькал в различных статьях по электронике и был доступен к заказу на AliExpress. Не долго думая я выписал себе пару STM32F103, так как это был настоящий 32-битный микроконтроллер с большим объемом памяти и богатой периферии, а тем более и нужным числом UART. Опыта программирования STM32 у меня на тот момент не было, но этого лишь возник интерес изучения чего-то нового.
В ожидании прихода микроконтроллеров было решено отложить прототип и не просто ждать, а проверить гипотезы, который остались.
Зима приближалась, да и машина без “присмотра” как-то не вселяла комфорта. Все продолжалось до тех пор, пока однажды я не заглянул под крышку блока автосигнализации. Внутри я обнаружил ATMega324! Радости моей не было и предела, так как это был AVR, а значит с ним можно было поработать и как следует. Первым делом я начал проверять разводку UART и SPI. У ATMega324 2 UART порта. Один UART заведен на сдвиговый регистр, а второй на разъем антенного модуля. Цепи SPI же привели меня на нераспаянную колодку (на фото у кварца в нижнем левом углу платы).
Быстренько напаял колодку и подключил программатор. Чтение прошивки и EEPROM приводили к пустым дампам. Понятное дело, разработчик не мог допустить такой прокол. Проверил обмен между блоком и антенным модулем. Линия TX была чистая в момент тревоги. Это могло означать, что число брелоков в памяти равно 0. Антенный модуль оказался совсем не разговорчивым. Также выяснилось, что микроконтроллер управляет питанием антенного модуля через транзисторный ключ. На выходе ключа было обнаружено входное напряжение, а по инструкции должно быть +5В. Все это мне показалось немного странным. Может быть по этой причине антенный модуль молчал? Вариантов проверки гипотез у меня не оставалось. А что там с фьюз-битами? Вот так сюрприз! Во фьзах разрешена прошивка через SPI интерфейс. Ну и как теперь сидеть на месте ровно? Правильно — написать свою прошивку! Это был такой хардкорный вариант, поскольку кроме самой прошивки еще и плату прозвонить пришлось.
Защитный лак мешал процессу, но вооружившись щупами с острым кончиком дела пошли гораздо лучше. Получалось, что слой лак не сдирался, а аккуратно прокалывался в нужных местах. Прозвонка платы заняла два вечера.
Написал тестовую прошивку, прошил, пощелкал релюшками — отлично! Антенный модуль и брелок уже были бесполезны. Так если можно написать прошивку для блока автосигнализации, используя всю его готовую схемотехнику и точки подключения в авто, то остается решить вопрос с каналом связи. Я подумал, а что если оставить в своем проекте GSM и GPS, выкинуть Bluetooth и прикрутить все его к автосигнализации Pandora? Ну конечно, это же лучший вариант! Во-первых не нужно было готовить сложную плату, схемотехника Pandora решала многие задачи, а мне же лишь нужно было сделать модуль расширения, который подключался бы взамен штатного антенного модуля. Как можно понять, период ожидания микроконтроллеров из Китая прошел не заметно.
Чтобы соединить все модули между собой я вытравил плату. Она очень простая. В ней готовые модули GPS, GSM и блок автосигнализации подключены к UART портам микроконтроллера STM32.
Начинка модуля разместилась в корпусе блока питания от ноутбука.
DC-DC преобразователь ни в какую не хотел размещаться внутри корпуса и пришлось подыскать более просторный корпус. В итоге на роль корпуса очень хорошо подошел пенал от лицевой части магнитолы SUPRA с удобным механизмом защелкивания.
Плата была покрыта полиуретановым лаком.
Компоненты. Тут все просто:
DC-DC преобразователь LM2596
GSM модем SIM800L (питание 3.6-4.4)
GPS модуль NEO-6M (питание 3.4-3.8)
Кусок текстолита.
Необходимое напряжение для модулей формирует DC-DC преобразователь. Его выходное напряжение установлено в 3.7 вольта. Винт регулировки замазан лаком, чтобы предотвратить его смещение от вибраций.
Я думал какую периферию мне необходимо поддержать в первую очередь и получился такой список:
1. Датчики температуры салон и двигателя.
2. Акселерометр.
3. Вольтметр бортовой сети.
4. Вход концевых выключателей дверей.
5. Вход концевого выключателя багажника.
6. Вход концевого выключателя педали тормоза.
7. Выход на зажигание.
8. Выход на реле повторителей.
9. Выход на обходчик иммобилайзера.
10. Выход на реле блокировки.
11. Выход на сирену.
Сознательный отказ от поддержки:
Алгоритмы и функции, которые были реализованы:
1. Хранение настроек в EEPROM.
2. Запуск двигателя по технологии START-STOP.
3. Активация бесключевого обходчика с аналоговым управлением (iDatalink).
4. Удаленный запуск двигателя.
5. Контроль пониженного напряжения на аккумуляторе.
6. Контроль работы двигателя по напряжению.
7. Постановка/снятие охраны (контроль периметра зон).
8. Контроль концевых выключателей дверей и багажника.
9. Поддержка сирены.
10. Поддержка сигнальных огней (повторителей поворотов).
11. Поддержка тихого режима.
12. Поддержка внешней платы расширения (модуль телеметрии).
13. Соединение и передача состояний на сервер.
14. Управление системой DTMF кодами, в случае отсутствия связи с сервером.
15. Список доверенных номеров.
Обратная связь реализована вызовом на доверенный номер телефона, c которого был установил режим охраны.
Управление системой было реализовано через Telegram-бот:
Также бот отправляет сообщения о критических состояниях, таких как:
По факту самоделке уже исполнилось 3 года и за этот срок я выяснил, что:
Возможность перепрошивки Pandora DXL 3000 по SPI шине является уязвимостью, потому что позволяет загрузить ПО, которое может активировать выходы бесключевого обходчика иммобилайзера и деактивировать блокировки.
В целом проделанная работа дала мне огромный опыт. Я изучил схемотехнику автомобильный сигнализации, увидел как можно делать компактно и просто и научился программировать микроконтроллеры STM32. В итоге я сделал продукт, которым пользуюсь сам. Я вдохновился и продолжил разработку второй версии. Вторая версия сможет подключаться к цифровым шинам для упрощения и сокращения числа точек подключения, а также реализовывать обход штатного иммобилайзера без внешних обходчиков по цепям IMMO-IMI.
Ах да, все это время система работала и продолжает работать на семейном автомобиле Toyota Prius в 20 кузове, который богат на цифровые шины. Полным ходом идет отладка поддержки шины BEAN.
P.S.: Вторая версия была разработана и проходит тестирование на автомобиле Toyota Camry 2007 года выпуска.
В итоге свой проект я вижу как возможность создания открытой системы автомобильной телеметрии.
Спасибо за внимание!
Сервисный код я никогда не пытался запомнить, а мастер-код — тем более. Безуспешно перебрать на память несколько кодов я все-таки попытался. В течении нескольких минут мне пришлось угнать свой автомобиль. Трель от сирены в ушах еще потом стояла долго, так как сирена была установлена в салоне авто. Не помню почему я разместил сирену именно там — то ли по собственной лени, то ли увидел в этом какой-то смысл. Знаете, по личному испытанному ощущению, это может привести в сильное замешательство неподготовленного злодея. К моему глубокому сожалению, блок мне пришлось демонтировать. Я начал разбираться как быть дальше и что с этим делать. Кому интересно, что же вышло в итоге, прошу под кат.
У меня было несколько гипотез:
- Сбои в работе антенного модуля.
- Сбой энергонезависимой памяти в основном блока. В результате могли быть повреждены данные о брелоках и их синхронизации.
- Сбой энергонезависимой памяти брелока. Последствия схожи с п. 2.
- Глушение сигнала в целях подготовки к угону.
Вариант с наличием глушилки сигнала я проверил сразу же как переехал в безопасное место. Автосигнализация так же не реагировала на брелок.
Я обратился к дилеру по вопросу наличия тех. возможности сброса сервисных кодов. Мне ответили, что такой возможности нет и вам придется приобрести новый комплект за несколько тысяч рублей. Да и будет лучше если вы установите всё это дело у нас — сообщили они, отдав при этом еще несколько тысяч. Такой ответ меня ничуть не удивил, имхо, понятное дело! Дилеру лучше продать новый комплект, чем производить сервисное обслуживание. Тут внезапно я почувствовал как мое настроение резко улучшилось, появилась мысль разобраться во всем самостоятельно, попутно выяснив можно ли сбросить коды или нельзя. Вообще именно такие моменты и побуждают к альтернативам, реверсу, разработке и DIY. Я бросил себе вызов.
Начал я отнюдь не с копаний в блоках, а с альтернативного варианта. Пока Pandora лежала в шкафу я пытался сделать свой модуль. Я прикинул, что если разработать свой модуль автосигнализации, то это будет сразу круто, надежно, гибко и абсолютно не сложно. Что сказать, все это был голый энтузиазм. Я провел несколько недель за написанием прошивки и прототипированием модуля. Процесс был полностью творческим. Так, внезапно, мне приходила какая-либо идея и я с удовольствием реализовывал ее. Например, уже на стадии рабочего прототипа с нужными релюшками, транзисторами и GSM я вдруг захотел добавить еще GPS и Bluetooth. Ну а чего тянуть кота за хвост? Пусть модуль будет сразу крутым, как я изначально прикинул и мне пришлось сменить микроконтроллер на более жирный, так как UART портов у ATMega328 всего один единственный. Достать у AVR что-то распространенное и с тремя UART мне показалось нереальной затеей. Вариант реализации программных UART мне не понравился, по той простой причине, что аппаратный надежнее. Помню как STM32 уже вовсю мелькал в различных статьях по электронике и был доступен к заказу на AliExpress. Не долго думая я выписал себе пару STM32F103, так как это был настоящий 32-битный микроконтроллер с большим объемом памяти и богатой периферии, а тем более и нужным числом UART. Опыта программирования STM32 у меня на тот момент не было, но этого лишь возник интерес изучения чего-то нового.
В ожидании прихода микроконтроллеров было решено отложить прототип и не просто ждать, а проверить гипотезы, который остались.
Зима приближалась, да и машина без “присмотра” как-то не вселяла комфорта. Все продолжалось до тех пор, пока однажды я не заглянул под крышку блока автосигнализации. Внутри я обнаружил ATMega324! Радости моей не было и предела, так как это был AVR, а значит с ним можно было поработать и как следует. Первым делом я начал проверять разводку UART и SPI. У ATMega324 2 UART порта. Один UART заведен на сдвиговый регистр, а второй на разъем антенного модуля. Цепи SPI же привели меня на нераспаянную колодку (на фото у кварца в нижнем левом углу платы).
Быстренько напаял колодку и подключил программатор. Чтение прошивки и EEPROM приводили к пустым дампам. Понятное дело, разработчик не мог допустить такой прокол. Проверил обмен между блоком и антенным модулем. Линия TX была чистая в момент тревоги. Это могло означать, что число брелоков в памяти равно 0. Антенный модуль оказался совсем не разговорчивым. Также выяснилось, что микроконтроллер управляет питанием антенного модуля через транзисторный ключ. На выходе ключа было обнаружено входное напряжение, а по инструкции должно быть +5В. Все это мне показалось немного странным. Может быть по этой причине антенный модуль молчал? Вариантов проверки гипотез у меня не оставалось. А что там с фьюз-битами? Вот так сюрприз! Во фьзах разрешена прошивка через SPI интерфейс. Ну и как теперь сидеть на месте ровно? Правильно — написать свою прошивку! Это был такой хардкорный вариант, поскольку кроме самой прошивки еще и плату прозвонить пришлось.
Защитный лак мешал процессу, но вооружившись щупами с острым кончиком дела пошли гораздо лучше. Получалось, что слой лак не сдирался, а аккуратно прокалывался в нужных местах. Прозвонка платы заняла два вечера.
Распиновка портов микроконтроллера
Номер вывода | Пин процессора | Разъем под документации | Номер выхода в разъеме | Назначение согласно документации карты монтажа |
---|---|---|---|---|
9 | PD0 (RXD0/PCINT24) | X1 | RX / CALL | RX-сигнал антенны и вход кнопки CALL BUTTON |
10 | PD1 (TXD0/PCINT25) | X1 | TX | TX-сигнал антенны |
11 | PD2 -> 6C595 RCK pin | |||
12 | PD3 -> 6C595 SER IN pin | |||
13 | PD4 -> 6C595 SRCK pin | |||
14 | PD5 | X5 | COM | Вход кнопки iButton |
15 | PD6 | X4, X4a | DQ | DQ сигнал от датчиков температуры двигателя и салона |
16 | PD7 | X7 | Вход срабатывания основного уровня | |
3 | PB7/SCK -> 6C595 CLR | |||
2 | PB6 | X8 | 5 | Выход CH5 (300mA) - |
1 | PB5 | X8 | 2 | Выход CH4 (1A) - |
PB4 | X8 | 3 | Выход СH2 (500mA) - | |
43 | PB3 | X8 | 20 | Вход сигнала от тахометра, инжектора, генератора |
42 | PB2 | X8 | 4 | Выход CH3 (300mA) - |
41 | PB1 | X8 | 13, 14 | Фонарь левого поворота Фонарь правого поворота |
40 | PB0 | X8 | 18 | Реле CH1 (15 A) 15, 16 -> 18 |
37 | PA0 | Акселерометр (ось X) | ||
36 | PA1 | Акселерометр (ось Y) | ||
35 | PA2 | X3 | COM | Кнопка Valet / измерение напряжения |
34 | PA3 | |||
33 | PA4 | X8 | 8 | Концевой выключатель багажника (±) |
32 | PA5 | X8 | 11 | Концевой выключатель дверей (±) |
31 | PA6 | X8 | 19 | Вход от датчика нейтрали/ручного тормоза (±) |
30 | PA7 | X8 | 7 | Вход от датчика масла, лампы зарядка (±) |
19 | PC0 | X7 | Вход срабатывания предварительного уровня | |
20 | PC1 | X6 | 1 | Красный индикатор |
21 | PC2 | X6 | 2 | Зеленый индикатор |
22 | PC3 | X1 | +12V | Питание антенны |
23 | PC4 | X8 | 21 | Вход от кнопки педали тормоза |
24 | PC5 | X8 | 10 | Вход зажигания |
25 | PC6 | |||
26 | PC7 | X8 | 17 | Сирена |
Написал тестовую прошивку, прошил, пощелкал релюшками — отлично! Антенный модуль и брелок уже были бесполезны. Так если можно написать прошивку для блока автосигнализации, используя всю его готовую схемотехнику и точки подключения в авто, то остается решить вопрос с каналом связи. Я подумал, а что если оставить в своем проекте GSM и GPS, выкинуть Bluetooth и прикрутить все его к автосигнализации Pandora? Ну конечно, это же лучший вариант! Во-первых не нужно было готовить сложную плату, схемотехника Pandora решала многие задачи, а мне же лишь нужно было сделать модуль расширения, который подключался бы взамен штатного антенного модуля. Как можно понять, период ожидания микроконтроллеров из Китая прошел не заметно.
Чтобы соединить все модули между собой я вытравил плату. Она очень простая. В ней готовые модули GPS, GSM и блок автосигнализации подключены к UART портам микроконтроллера STM32.
Начинка модуля разместилась в корпусе блока питания от ноутбука.
DC-DC преобразователь ни в какую не хотел размещаться внутри корпуса и пришлось подыскать более просторный корпус. В итоге на роль корпуса очень хорошо подошел пенал от лицевой части магнитолы SUPRA с удобным механизмом защелкивания.
Плата была покрыта полиуретановым лаком.
Компоненты. Тут все просто:
DC-DC преобразователь LM2596
GSM модем SIM800L (питание 3.6-4.4)
GPS модуль NEO-6M (питание 3.4-3.8)
Кусок текстолита.
Необходимое напряжение для модулей формирует DC-DC преобразователь. Его выходное напряжение установлено в 3.7 вольта. Винт регулировки замазан лаком, чтобы предотвратить его смещение от вибраций.
Я думал какую периферию мне необходимо поддержать в первую очередь и получился такой список:
1. Датчики температуры салон и двигателя.
2. Акселерометр.
3. Вольтметр бортовой сети.
4. Вход концевых выключателей дверей.
5. Вход концевого выключателя багажника.
6. Вход концевого выключателя педали тормоза.
7. Выход на зажигание.
8. Выход на реле повторителей.
9. Выход на обходчик иммобилайзера.
10. Выход на реле блокировки.
11. Выход на сирену.
Сознательный отказ от поддержки:
- Выход на реле центрального замка. В автомобиле отсутствует проводка до двери центрального замка.
- Вход тахометра, так как он просто не имеет смысла для подключения на гибридном автомобиле.
- Вход концевого выключателя капота, так как отсутствует штатно на автомобиле.
Алгоритмы и функции, которые были реализованы:
1. Хранение настроек в EEPROM.
2. Запуск двигателя по технологии START-STOP.
3. Активация бесключевого обходчика с аналоговым управлением (iDatalink).
4. Удаленный запуск двигателя.
5. Контроль пониженного напряжения на аккумуляторе.
6. Контроль работы двигателя по напряжению.
7. Постановка/снятие охраны (контроль периметра зон).
8. Контроль концевых выключателей дверей и багажника.
9. Поддержка сирены.
10. Поддержка сигнальных огней (повторителей поворотов).
11. Поддержка тихого режима.
12. Поддержка внешней платы расширения (модуль телеметрии).
13. Соединение и передача состояний на сервер.
14. Управление системой DTMF кодами, в случае отсутствия связи с сервером.
15. Список доверенных номеров.
Обратная связь реализована вызовом на доверенный номер телефона, c которого был установил режим охраны.
Управление системой было реализовано через Telegram-бот:
Также бот отправляет сообщения о критических состояниях, таких как:
- Низкое напряжение на аккумуляторе.
- Напряжение на аккумуляторе восстановлено.
- Низкая температура двигателя.
- Высокая температура двигателя.
По факту самоделке уже исполнилось 3 года и за этот срок я выяснил, что:
- Самоделка была в максимальном аптайме порядка 80 дней, затем следовала перезагрузка устройства, так как GSM модем переставал принимать даже звонки.
- Стабильная работа в отрицательные и высокие температуры (от -40 до +40).
- Нужно сделать поддержку цифровых шин.
Возможность перепрошивки Pandora DXL 3000 по SPI шине является уязвимостью, потому что позволяет загрузить ПО, которое может активировать выходы бесключевого обходчика иммобилайзера и деактивировать блокировки.
В целом проделанная работа дала мне огромный опыт. Я изучил схемотехнику автомобильный сигнализации, увидел как можно делать компактно и просто и научился программировать микроконтроллеры STM32. В итоге я сделал продукт, которым пользуюсь сам. Я вдохновился и продолжил разработку второй версии. Вторая версия сможет подключаться к цифровым шинам для упрощения и сокращения числа точек подключения, а также реализовывать обход штатного иммобилайзера без внешних обходчиков по цепям IMMO-IMI.
Ах да, все это время система работала и продолжает работать на семейном автомобиле Toyota Prius в 20 кузове, который богат на цифровые шины. Полным ходом идет отладка поддержки шины BEAN.
P.S.: Вторая версия была разработана и проходит тестирование на автомобиле Toyota Camry 2007 года выпуска.
В итоге свой проект я вижу как возможность создания открытой системы автомобильной телеметрии.
Спасибо за внимание!