Когда-то в далеком 2013 году, я приобрел на aliexpress ELM327 Mini, являющийся клоном оригинального адаптера ELM327.
До недавнего времени, я его использовал только с Torque Pro, для мониторинга OBD2 параметров (температура охлаждающей жидкости, положение дроссельной заслонки и т.д.)
После приобретения Skoda Fabia 3, попробовал его с Carista и убедился в том, что с его помощью возможны многие вещи, которые ранее считались вотчиной VCDS (Вася) или ODIS.
Позже, после приобретения кабеля для VCDS (о чем в моем блоге есть отдельная статья), я решил полностью разобраться с возможностями ELM327.
Разборка для исследования:
Крышка адаптера удерживается 4-мя защелками изнутри. Чтоб к ним добраться, я снял наклейку с одной стороны и используя отвертку и подсветку фонариком, проковырял отверстия в местах где эти защелки находятся:
Оказалось достаточным поддеть только эти две защелки и крышку удалось стянуть:
Адаптер сделан в виде гамбургера, состоящего из двух двухсторонних плат, соединенных между собой запаянными штырьками по 8 штук с двух сторон. К верхней плате припаян bluetooth модуль EC04.
Первым делом после разборки, меня интересовало, какие контакты OBD2 разъема задействованы на этом адаптере:
На фото выше видно, что задействованы контакты: 2, 4, 5, 6, 7, 10, 14, 15, 16, что соответствует:
Следующее, что меня интересовало, на каком чипе построен данный адаптер. Не секрет, что оригинальный чип ELM327, это ничто иное, как микроконтроллер PIC18F25K80.
Не смотря на то, что в наши дни на китайские клоны ставят что угодно, мне повезло, здесь оригинал Microchip PIC18F25K80 Enhanced Flash Microcontroller with ECAN™ XLP Technology, объем Flash для прошивки 32 Кбайт, память для обработки данных 3 Кбайт, EEPROM 1 Кбайт, встроенный контроллер CAN 2.0B.
Наличие буквы F в маркировке означает что микроконтроллер перепрограммируемый, а не с однократной записью.
Справа находится AMS117 3.3 преобразующий 5 в 3.3 вольт для питания bluetooth модуля. Слева кварц на 4МГц — мелочь, а приятно, так как он опционален даже на оригинальном адаптере.
Смотрим с другой стороны:
Слева спрятался 78M05 преобразующий входное напряжение с 16-го контакта OBD2 разъема в 5 вольт. Справа от 78M05, находится приемо-передатчик (трансивер) CAN шины Microchip MCP2551I. I — индустриальная версия с температурами от -40 до +85C.
Справа в углу, выглядывает регулятор напряжения WS LM317LZ в корпусе TO-92 используемый в обвязке шины J1850 Bus+.
На верхней плате имеется три светодиода:
Красный (индикатор питания) загорается и постоянно горит при подключении адаптера к OBD2 разъему. На принципиальной схеме это L5. Зеленые светодиоды (L2 и L4 на схеме) подключены к контактам 27 (OBD Rx LED — диод слева) и 25 (RS232 Rx LED — диод справа) микроконтроллера и мигают, когда он принимает данные от ЭБУ автомобиля и bluetooth адаптера.
Проверка набора AT команд китайской прошивки ELM 1.5 и сравнение с прошивкой Deep OBD ELM 1.5:
Многие владельцы китайских ELM327 адаптеров, даже не подозревают, что недобросовестные производители некоторых адаптеров, прошивают одну из самых первых и сырых версий прошивок, сообщающую, что она ELM 1.5 (за счет подмены номера в строке версии), но на самом деле не являющуюся таковой. Соответственно такие адаптеры, поддерживают не все AT команды или отрабатывают их некорректно.
Единственным (и по моему мнению лучшим) приложением для проверки реально поддерживаемых прошивкой ELM327 AT команд (заработавшим на моем Samsung A7 2017 под Android 8.0), оказалось ELM327 Identifier by Daaren Fonloil.
Результаты проверок заводской китайской прошивки моего адаптера и усовершенствованной прошивки Deep OBD ELM 1.5 приведены ниже на скриншотах.
Слева мой адаптер (китайская прошивка ELM 1.5 от 2013 года), справа адаптер с прошивкой Deep OBD ELM 1.5 (большое спасибо Ulrich Holeschak (автор Deep OBD) за предоставленный скриншот).
Набор AT команд поддерживаемых обеими прошивками, соответствует официальной версии 1.4, но при этом адаптеры сообщают что они ELM327 v1.5.
Подробные отличия в номерах версий, можно посмотреть в официальном руководстве.
Поиск контактов для программирования PIC
Для программирования PIC, в этом адаптере на платах, отсутствуют разъемы, и обозначенные точки. Задействовав мультиметр был получен неожиданный результат — все контакты для программирования PIC, находятся рядом друг с другом в один ряд, на штырьках соединения верхней платы, слева от антенны bluetooth модуля:
Разбираемся с bluetooth модулем
В bluetooth модуле использован чип СС2562F256 и EEPROM T24C128A объемом 16Кбайт.
Даташит на СС2562F256 мне найти не удалось. Буквы TI как бы намекают на Texas Instruments, но на самом деле это неизвестный китайский клон.
Поиск в google, подсказал что модуль называется EC04-B
http://www.electrodragon.com/pro…ct/...etooth-module/ (также известный как EDPA). В магазине по ссылке выше, его предлагают как удешевленную альтернативу bluetooth модулю BC04 (BlueCore 4) компании CSR, состоящие из связки чип СSR BC417 + Flash объемом 1 Мбайт. BC04 часто устанавливают в bluetooth адаптеры HC04, HC05 и HC06, которые любят использовать с Arduino, а также в клонах адаптера VAS5054A.
Цоколевка модуля EC04 по питанию и передаче данных (RX, TX, 3,3 вольт, GND), полностью совпадает с модулем BC04.
В попытке найти обновленную прошивку для модуля EC04, я обратился в магазин по ссылке выше и в ответ на мое письмо, получил ответ, что никаких прошивок у них нет и модуль отлично работает
Не смотря на рекламируемую дешевизну, я бы воздержался от его покупки, так как обновлений прошивки под него нет, а на заводской (по крайней мере у меня) он виснет.
Bluetooth имя адаптера OBDII, MAC адрес 11:22:33:DD:EE:FF, пароль 1234. Обмен с PIC идет на скорости 38400 бит/c.
Эти настройки хранятся в EEPROM T24C128A.
Принципиальная схема оригинального адаптера из официального руководства: ELM327 OBD to RS232 Interpreter:
Используя схему, мультиметр, а также описание цоколевки микроконтроллера из руководства, я составил следующую таблицу:
PIC18F25K80 Точки соединения на платах
1 MCLR -> резистор 10кОм -> Vdd
-> MCLR пин на верхней плате
2 Vmeasure -> согласно принципиальной схемы
3 J1850 Volts -> согласно принципиальной схемы
4 J1850 Bus+ -> согласно принципиальной схемы
5 Memory -> Vdd
6 Baud Rate -> уходит в металлизированное отверстие, ведущее под модуль bluetooth. Из-под модуля bluetooth, дорожкой уходит во второе металлизированное отверстие, ведущее обратно
Оттуда дорожка ведет куда-то, где при подаче питания на OBD2 разъем, присутствует напряжение 3,3 вольт.
7 LFmode -> Vss
8 Vss -> GND
9 XT1 -> согласно принципиальной схемы
10 XT2 -> согласно принципиальной схемы
11 VPW In -> согласно принципиальной схемы
12 ISO In -> согласно принципиальной схемы
13 PWM In -> согласно принципиальной схемы
14 J1850 Bus- -> согласно принципиальной схемы
15 IgnMon/RTS -> Vdd
16 PwrCtrl/Busy -> NC
17 RS232 Tx -> резистор 220 Ом -> Tx на плате EC04 (bluetooth)
18 RS232 Rx -> резистор 220 Ом -> Rx на плате EC04 (bluetooth)
19 Vss -> GND
20 Vdd -> контакт +5 вольт на 78L05 SOT-89
21 ISO K -> согласно принципиальной схемы
22 ISO L -> согласно принципиальной схемы
23 CAN Tx -> согласно принципиальной схемы
24 CAN Rx -> согласно принципиальной схемы
25 RS232 Rx LED -> резистор 680 Ом -> зеленый светодиод справа
26 RS232 Tx LED -> NC
27 OBD Rx LED -> резистор 680 Ом -> зеленый светодиод слева
-> PGC на верхней плате
28 OBD Tx LED -> PGD на верхней плате
В процессе исследований я обнаружил что:
1. Разработчики адаптера, без понижения напряжения, через резистор 220 Ом, соедининили 5-ти вольтовый вывод TX PIC, с 3-х вольтовым выводом RX на модуле bluetooth.
2. При прекращении активности прием/передача данных между Carista, OBD Torque или putty и адаптером, соединение bluetooth зависает. Нужно отключать/включать bluetooth на смартфоне или перезапускать putty и соединяться повторно.
3. В терминале для Android (считаю его лучшим) Serial Bluetooth Terminal, частично теряется принимаемая от PIC информация. Тоже самое происходило и в putty на ноутбуке:
>atpps
00:FF F 01:FF F 02:FF F 03:32 F
04:01 F 05:FF F 06:F1 F 07:09 F
08:FF F 09:00 F 0A:0A F 0B:FF F
0C:68 F 0D:0D F 12:FF F 13:32 F
14:FF F 15:0A F 16:FF F 17:92 F
18:00 F 19:28 F 1F F
1C:FF F 1D:FF F 1E:FF F 1F:FF F
20:FF F 21:FF F 22:FF F 23:F00 F 27:FF F
28:FF F 29:FF F 2A:38 F 2B:02 F
2C:E0 F 2D:04 F 2E:80 F 2F:0A F
Как видно, информация искажается. Правильный список выглядит как:
00:FF F 01:FF F 02:FF F 03:32 F
04:01 F 05:FF F 06:F1 F 07:09 F
08:FF F 09:00 F 0A:0A F 0B:FF F
0C:68 F 0D:0D F 0E:9A F 0F:FF F
10:0D F 11:00 F 12:FF F 13:32 F
14:FF F 15:0A F 16:FF F 17:92 F
18:00 F 19:28 F 1A:FF F 1B:FF F
1C:FF F 1D:FF F 1E:FF F 1F:FF F
20:FF F 21:FF F 22:FF F 23:FF F
24:00 F 25:00 F 26:00 F 27:FF F
28:FF F 29:FF F 2A:38 F 2B:02 F
2C:E0 F 2D:04 F 2E:80 F 2F:0A F
Также из ответа ATPPS команды выше, видно, что все заводские настройки в EEPROM PIC по умолчанию неактивны.
Отпаяв модуль bluetooth, подключившись к нему TTL кабелем, установив в putty скорость 38400, и подав на него питание, я получил ответ:
BOLUTEK, SPP V1.1
На момент подключения, я не знал, что putty, не смотря на умение работать с CR+LF (опция Terminal>Implicit LF in every CR), не умеет слать команды одним пакетом и поэтому проверить режим AT команд не удалось.
При подключении к PIC напрямую TTL кабелем, искажения ответа команды atpps и зависаний после некоторого времени не наблюдались.
Вердикт — в искажении информации и зависании bluetooth соединения виноват исключительно модуль bluetooth EC04.
После изучения очень интересного и полезного документа ELM and Bluetooth, используя SMD резисторы найденные на старой компьютерной материнской плате, заменил резистор на выходе TX PIC c 220 Ом на 2,2кОм, а к нему припаял 4,7кОм, второй вывод которого пустил на землю). Получился делитель напряжения с 5В (на TX выводе PIC), до 3,3В (на RX входе bluetooth модуля).
Далее, приобрел на алиэкспрессе первую попавшуюся и самую дешевую плату USB TO TTL FT232RL. Незаменимая в хозяйстве универсальная плата, могущая служить TTL кабелем, SPI программатором bluetooth модулей BC03, BC04, HC05, SPI программатором ATMEGA162 (аналог USBasp):
Не смотря на дешевизну, имеет джампер выбора уровней выходных сигналов и целых три красных светодиода (сверху справа в углу индикатор питания, справа от чипа TX и RX).
Первым делом, скачал и поставил официальные драйвера с сайта FTDI (кстати кто не знал, они уже как это было раньше, не брикают фейковые китайские чипы FT232R) CDM v2.12.28 WHQL Certified. Проверил чип в MProg:
Неизменяемый eeprom и серийник A50285BI подтвердили фейковость чипа. Несмотря на это, судя по качеству шлифовки индексной метки чипа, клон качественный.
Также как и планировалось, приобрел bluetooth адаптер HC-05:
На фото видно, что модуль достался со сломанной ножкой EN, неприятно, но не смертельно. Присутствует кнопка для замыкания VCC на ножку 34 (PIO11/KEY). Если нажать ее и держать при подаче питания на адаптер, он запускается в режиме AT команд и светодиод начинает моргать медленно с паузой в 2 секунды.
Приятным сюрпризом оказалось присутствие на обратной стороне платы точек ведущих на SPI контакты для считывания и программирования прошивки.
Как окажется позже после тестирования, чип bluetooth здесь перемаркирован. На самом деле это чип BC352239 (BC03). Настоящий BC417143 легко отличить по надписи csr над логотипом. В перемаркированном она справа от логотипа.
BC352239 тоже отличный чип, но в отличии от BC417143 (BC04) поддерживающего bluetooth 2.0 EDR (скорость до 3 Мбит/c), это bluetooth 1.2 (скорость до 1 Мбит/с).
Flash Spansion AL008J70BF102 тоже что-то перемаркированное. Реальный объем 6 Мбит, вместо 8 Мбит у оригинала.
Регулятор напряжения 85AD (Si9185) здесь установлен для питания чипа напряжением 1.8В. Не смотря на то, что модуль толерантен к напряжениям от 2 до 6В по питанию, не следует забывать, что уровни RX/TX должны быть 3В.
Разбираемся с разновидностями bluetooth чипов СSR
Британская компания CSR (Cambridge Silicon Radio), до поглощения ее компанией Qualcomm в 2015 году, выпускала следующие (известные мне) чипы:
BC352239 (BC03) BlueCore 3-Multimedia External, bluetooth v1.2, проект pdw (paddywack) / elv (elvis)
BC358239 (BC03) BlueCore 3-Multimedia, bluetooth v1.2, проект kal (kalimba)
BC417143 (BC04) BlueCore 4-External стандарт Bluetooth v2.0+EDR, проект cyt (coyote)
Это очень интересные решения, и прошивки для них разделены на два вида:
1. native
2. vm — пользователь может разработать свое приложение, которое работает в виртуальной машине. Именно под этот режим написана прошивка SPP_UART из проекта Deep OBD.
В каждом из видов, прошивки разделены по объему памяти flash чипа:
1. compact — содержит только стек и поэтому подходит для flash от 4 Мбит)
2. unified — содержит загрузчик и стек включающий в себя всё, начиная от Host Controller Interface (HCI), до Radio Frequency COMMunication (RFCOMM), требующий 8 Мбит flash.
Прошивки native исключительно unified, доступны для проектов coyote (BC417), elvis (BC352) и kalimba (BC358).
Прошивки vm, доступны как в unified, так и compact (прошивки jumpingjack и paddywack (pdw).
Все перечисленные выше прошивки, входят в дистрибутив интерактивной среды разработки приложений BlueLab 4.1 и после установки, находятся в папке \BlueLab41\firmware.
Когда существовал сайт
www.csrsupport.com, там можно было скачивать обновленные версии прошивок для BlueLab 4.1. После покупки компании Qualcomm'ом, сайт потушили.
Если у кого-то есть прошивки c
www.csrsupport.com/BluetoothFirmware не только под проект coyote 23263_cyt_8unified_fl_bt3.0_23i_0911261257_encr56_ oem_prod.zip, но и под другие проекты, большая просьба поделиться.
Тест bluetooth адаптера HC-05
Выставив на адаптере FT232RL джампер на 3,3В, подсоединил его к HC-05 по схеме VCC-VCC, GND-GND, RX-TX, TX-RX. Затем, при помощи мини-USB кабеля подключил к голубому USB3.0 разъему ноутбука.
Адаптер сразу определился Windows 10 и после автоматической установки драйвера виртуального COM порта, красный светодиод на HC-05 начал быстро моргать индицируя работу в модуля в транспортном (прозрачном) режиме.
На ноуте я запустил putty и открыл bluetooth COM порт на скорости 9600 Кбит/c.
На смарфоне в bluetooth окружении подсоединился к устройству HC-05 и ввел пароль 1234. Далее запустил Serial Bluetooth Terminal и послал пробные строки. Они успешно отобразились в putty на ноутбуке. Ура, адаптер работает
Потестировал его некоторое время и убедился, что работает он очень стабильно, соединение не рвется и не виснет. В отличии от старого модуля EC04, при выключении/включении bluetooth на смартфоне, соединение устанавливается быстро и без повторного ввода пароля.