| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Малко помощ с декодиране на OBD2 - ISO 14230 http://mcu-bg.com/mcu_site/viewtopic.php?f=11&t=11428 |
Страница 1 от 2 |
| Автор: | anio [ Пет Май 31, 2013 6:30 pm ] | |||||||||
| Заглавие: | Малко помощ с декодиране на OBD2 - ISO 14230 | |||||||||
Здравейте, Имам един Нисан модел 2007 и се опитвам да си комуникирам с него през OBD2 като хоби проект с ЕЛМ327 адаптер. Опитах с много програми за всякакви ОС-та и никоя не успя да се върже с ЕКУ-то. Опитах и директно през серийния терминал да се вържа, но постоянно даваше BUS ERROR/NO DATA. Най-накрая намерих един апп за андроид, който ползва явно някакви разширени кодове и с него работи. Проблемът е, че аз не искам да ползвам телефон в случая, а raspberry Pi или подобно. С hcidump на телефона успях да направя няколко дъмп-а на комуникацията, но нямам идея как да ги декодирам:
Значи това, което успях да разбера е, че ползва physical addressing, но не мога да разбера как са кодирани. Освен това ЕКУ-то в началото винаги връща BUS ERROR докато не му пратиш 3F и то понякога не само един път. Даже не знам какво значи 3F? Има и други команди без префикс "22" в лога (22 е за request с физически адрес) но и те не знам за какво са: 3206, 3106FFFF, 3E? Проследих някои пид-ове: Това е за "injector fuel" request: 2212060401, ex. responses: 85FC1062120600EBF6, 85FC1062120600E7F2 Това е за "Base fuel schedule" req: 2212080401, ex. responses: 85FC106212080FCCE8, 85FC106212080FE804 Това е за RPM(обороти) (но тук не съм 100% сигурен): req: 2212010401, ex. response: 85FC10621201003D43 Моментна скорост: 2211020401, отговор, но тук изпуснах първата цифра: %4FC1062110200 (това е с 0km/h) ECU-то дава BUS ERROR на пид 0100, а "BUS INIT: OK" само след "3F" команда. Стандартните ПИД-ове изобщо не ми се връзват с по-горните http://en.wikipedia.org/wiki/OBD-II_PIDs#Standard_PIDs Накрая декомпилирах въпросната андроид програма до известна степен където разбрах, че ползват съвсем други команди. Примерно, за да се види кои пид-ове поддържа колата: 621100FFFFFFFF00 - първите 20 621120FFFFFFFF00 - вторите 20 и т.нт. Проблемът е, че са ползвали тежки обфускатори за тая програма и най-важните части не могат да се видят Много ще съм благодарен ако някой даде едно рамо. Ако е нужно ще дъмп-на още комникация. Благодара предварително! |
||||||||||
| Автор: | CarBeta [ Пет Май 31, 2013 6:51 pm ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
Това е комуникацията на андроида с ЕЛМ327 или нещо не съм разбрал?? Щото по ОБД'то не вървят такива АТ команди |
|
| Автор: | anio [ Пет Май 31, 2013 7:16 pm ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
Да, това е комуникацията с ЕЛМ-а. В случая с ATH1 указва на елма да включи хедърите. С ATSH8110FC указва какъв да е хедъра "10" е адреса на ЕКУ-то, с което ще говори. Всяка команда започваща с "22" е директна комуникация с ЕКУ с адрес 10. Всичко, което не започва с "АТ" ЕЛМ-а го обръща в хекс и го изпраща на ЕКУ-то като сам си смята последния байт, който е чексумата. |
|
| Автор: | _oXo_ [ Съб Юни 01, 2013 6:50 am ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
попитах чичко гугъл и излезе това : http://www.mp3car.com/vbulletin/attachm ... ematic.pdf http://www.mp3car.com/vbulletin/attachm ... ssue_5.pdf http://www.mp3car.com/vbulletin/attachm ... _ver_2.pdf Нямам опит със Нисан ... дано да съм бил полезен |
|
| Автор: | anio [ Съб Юни 01, 2013 9:54 am ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
Мерси! Мисля, че ще ми свършат работа. Интересното е, че чичко гугъл от толкова време го питам и на мен не иска да ми ги каже тея неща |
|
| Автор: | _oXo_ [ Съб Юни 01, 2013 7:14 pm ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
пиниза е във въпроса пс. Да имаш опит с Volvo P1 или P3 платформите ? |
|
| Автор: | anio [ Пон Юни 03, 2013 9:20 am ] | |||||||||
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 | |||||||||
За съжаление не знам нищо за волво. А след като се зарових в исо-тата на 14230 разбрах структурата на протокола, но без спицифичните кодове от производителя няма как да ги дешифрирам. Някой да знае някой сайт с такива бази данни? |
||||||||||
| Автор: | _oXo_ [ Пон Юни 03, 2013 10:32 pm ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
Нисан мисля че са под крилото на Рено - може да откриеш извесни прилики помежду им ... а може и да няма |
|
| Автор: | anio [ Пон Юни 03, 2013 10:44 pm ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
Добре, че са братята китайци. С изключение на най-специфичните за нисан, които не са ми толкова нужни, всичко друго е подробно описано в стандартите SAE J2178_1, SAE J2178_2, SAE J2178_3, SAE J2178_4 и SAE J2190. А пдф-ите с тях са "доста" платени |
|
| Автор: | vgeorgiev [ Пон Юни 10, 2013 4:30 pm ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
Виж тази тема. Не ме кефи ЕЛМ-а. Има ли вариант да го накараш да работи без АТ команди ? Ето какво знам аз по въпроса: Съобщението е: [Format byte] [Target] [Source] [Data]...[Data] [CS] Където: Format byte: битове XXLL LLLL. Ако XX = 10 -> физически адрес Ако XX = 11 -> функционален адрес LLLLLL определя дължината на данние и/или дали ще има байт за дължина на данните. Ако LLLLLL = 000000 - тогава имаме байт за дължина (това не е нашия случай). Ако LLLLLL е различно от 000000 тогава това число определя броя на байтовете с данни. ATSH8110FC Това е команда за задаване на хедъра. 81 означава, че използваш физическо адресиране 10 е адреса на ЕКУто FC е адреса на тестера От лога ти: REQUEST: 1A81 RESPONSE: 87FC105A3145553430415D Това е рекует и респонс за някаква идентификация. Ето например на Фиата какви са: % read identification description ReadId_2000, 0x1A, 0x80, "Identification code", 9, "Identification code", 1, "#scaling ascii 11 ", "Identification code", 1, "#scaling ascii 10 ", "Identification code", 1, "#scaling ascii 1 ", "Identification code", 1, "#scaling ascii 10 ", "Identification code", 1, "#scaling ascii 2 ", "Identification code", 1, "#scaling ascii 6 ", "Identification code", 1, "#scaling hex 5 ", "Identification code", 1, "#scaling ascii 10 ", "Identification code", 1, "#scaling hex 4 "; ReadId_2000, 0x1A, 0x91, "FIAT drawing number", 1, "FIAT drawing number", 1, "#scaling ascii 11 "; ReadId_2000, 0x1A, 0x92, "BOSCH HW number", 1, "BOSCH HW number", 1, "#scaling ascii 10 "; ReadId_2000, 0x1A, 0x93, "BOSCH HW ver. number", 1, "BOSCH HW ver. number", 1, "#scaling ascii 1 "; ReadId_2000, 0x1A, 0x94, "BOSCH SW number", 1, "BOSCH SW number", 1, "#scaling ascii 10 "; ReadId_2000, 0x1A, 0x95, "BOSCH SW ver. number", 1, "BOSCH SW ver. number", 1, "#scaling ascii 2 "; ReadId_2000, 0x1A, 0x96, "Homologation number", 1, "Homologation number", 1, "#scaling ascii 6 "; ReadId_2000, 0x1A, 0x97, "ISO code", 1, "ISO code", 1, "#scaling hex 5 "; ReadId_2000, 0x1A, 0x98, "Tester code", 1, "Tester code", 1, "#scaling ascii 10 "; ReadId_2000, 0x1A, 0x99, "Programming date", 1, "Programming date", 1, "#scaling hex 4 "; REQUEST: 3106FFFF RESPONSE: 82FC10710605 Незнам какъв е рекуеста, но респонса ти е: 82 - 2 байта данни FC - таргет адреса (тестера) 10 - сорс адреса (ЕКУ) 7106 да двата байта данни 05 е чек сумата ЕЛМ интерфейса изпраща dummy данни, за да държи връзката жива. Тайм аута е 5 секунди. Ето например как Унидиага държи връзката жива. 2752 send: 01 2753 echo: 01 OK 2758 send: 3E 2759 echo: 3E OK 2764 send: 3F 2765 echo: 3F OK 2793 rcvd: 01 2801 rcvd: 7E 7F Имай в предвид, че тук комуникацията е без сорс и таргет адреси (защото може и така) " Това е за RPM(обороти) (но тук не съм 100% сигурен): req: 2212010401, ex. response: 85FC10621201003D43 " тук имаш 5 байта с данни: 621201003D, което е много голямо число. Незнам как се смята. Ето при мен как например мога да взема напрежението на акумулатора: От Unidiag def файла: RDBLI_2000, 0x21, 0x43, "Battery voltage", 1, "Battery voltage", 1, "#scaling unsigned 2 (X*20.372 + 700)/1000 Volt"; изпращам: 820af12143 получавам: 61 43 02 44 [CS] 61 43 е отговора на 21 43 заявката. 02 44 са данние. Това дава 580 десетично число. (580 *20.372 + 700)/1000 Volt = 12,51V |
|
| Автор: | anio [ Пон Юни 10, 2013 6:31 pm ] | |||||||||
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 | |||||||||
Здравей, мерси за отговора! Аз доста почетох и тези неща с физическия адрес ги разбрах. Успях от една андроид програма да изкарам всичките кодове, които ползва за моята кола. REQUEST: 2211000401 RESPONSE: 87FC10621100E4010001EC Това е рекуест за първите 20 поддържани ПИД-а. Щом изпращам командата с 22 отпред това означава readDataByCommonIdentifier. REQUEST: 22 - readDataByCommonIdentifier 11 - recordCommonIdentifier (High Byte) 00 - recordCommonIdentifier (Low Byte) 04 - transmissionMode=[ single, //01 slow, //02 medium, //03 fast,//04 stop//05 ] 01 - maximumNumberOfResponsesToSend (тоест само един отговор искам) Отговорът значи: 87FC10 - хедър както ти си го описал 62 - успешен отговор (22+40). При не успешен е 7F 1100 - повторение на командата щом е успешно E4010001 - 4 байта показващи кои от следващите 32 ПИД-а се поддържат. Това е същото като да пратя 0100 с функционална команда, но при мен не отговаря с нормалните команди. EC - чек сума
В случая командата ми за RPM e 1201 Отговор: 85FC10621201003D43 - където отговорът се състои само в двата байта 003D. Където по формулата за обороти би трябвало да се смята: ((A*256)+B)/4 = ((0*256)+0x3D)/4 = 15.25, но тук нещо не се връзва(освен ако не се умножи по 100). |
||||||||||
| Автор: | vgeorgiev [ Вто Юни 11, 2013 12:32 pm ] | |||||||||
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 | |||||||||
Рекуестнал си 221201 и си получил 85FC10621201003D43: 85 - 5 байта данни. FC - tester 10 - ECU 621201003D - 5 байта данни, от които първите три (621201) са отговора на заявката. 003D - са самите обороти. Това като десетично число е 61. Умножи по 32 и получаваш 1952. Формулите ги има в документите по-горе. 43 - чек сумата. Защо делиш на 4 ? старшия байт по 256 + младшия. Защо не опиташ readDataByLocalIdentifier ? Предполагам, че резултата ще е същия. За Фиат common id не работи: readDataByCommonIdentifier service The service readDataByCommonIdentifier is not used in the FIAT implementation of protocol KWP2000. |
||||||||||
| Автор: | anio [ Вто Юни 11, 2013 6:00 pm ] | |||||||||
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 | |||||||||
Формулата за оборотите я взех от тук http://en.wikipedia.org/wiki/OBD-II_PIDs но явно не работи за моя случай. readDataByLocalIdentifier не знам как да го ползвам при мен. Аз съм с Нисан 2007 год. Ползвам readDataByCommonIdentifier (22), защото както писах по-нагоре успях да извадя 300 пид-а за нисан от една платена програма и те всички се извикват с CommonIdentifier, но мога да прочета и за LocalIdentifier. Това, което не можах да разбера, е смисълът на:
Не знам това някакъв проблем специално с моето ECU ли е, защото тоя BUS винаги дава ERROR докато не му прати програмата поне 2 пъти тази команда 3F(която така и не разбрах за какво е). Моето ECU е с 14320-4 (kwp2000) fast init, което доколкото разбрах е тегаво за инициализация. Ако се инициализира без ЕЛМ трябва да се инициализира точно както е написано в документа от линк-а по-горе с K-Line. Възможно ли е тази платената програма да прави такава инициализация, въпреки че се съмнявам да може да се прави подобно нещо през блутут? |
||||||||||
| Автор: | Vesko [ Вто Юни 11, 2013 9:27 pm ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
Формулата от линк-а е само за OBD PID-вете. Тези, които се четът с $21 и $22 са специфични за всеки производител. И той сам с ги определя, както и мащабирането им. Тази информация не е публична. Май все пак е достъпна платена, но сигурно за много $. А $3F e "Test Device Present" според SAE J2190. До колкото $7F е отговора при грешка, вероятно се ползва за да се провери има ли ECU връщащо грешка на съответният адрес. В случая 7F3F11 - 7F - General Responce Message, така се връщат по принцип грешките 3F - Коя команда е предизвикала грешката 11 - Грешката е че командата не се подържа от ECU-то |
|
| Автор: | anio [ Нед Юни 16, 2013 4:13 pm ] |
| Заглавие: | Re: Малко помощ с декодиране на OBD2 - ISO 14230 |
Използвах наученото до тук и написах симулатор, по който после да си направя програмата, която чете от колата. Симулаторът работи с въпросния андроид апп все едно е вързан с колата. Проблемът ми е, че когато всичко това го пробвам с истинския интерфейс в колата, немога да инициализирам ЕКУ-то. Стигам до 3F, но на мен постоянно ми връща BUS INIT: ERROR. Не знам дали не спазвам някакъв тайминг или апп-а успява през блутутът да вдига и сваля K и L линиите на серийния интерфейс на ЕКУ-то, за да го инициализира. Много не съм на ясно със RS323, но не ми се вярва през блутут да може да се контролира на толкова ниско ниво особено като данните минават през ЕЛМ-а. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|