Yeah, unlike you guys who have a plan to figure out everything BMW, I am only interested in the MS41 part mainly because I have an E36.
So I'm trying to learn what pheno already knows and document various serial commands for an MS41. The end goal would be to use RomRaider to log MS41 because the maps are already defined for it. I am also partial to RR because it is THE software to use to (for free) edit and datalog a Subaru and is something I've been using for 10 years now.
- - - Updated - - -
Here some contribution to this thread.
I believe the digital signals are reported as bits. In this reply there are 23 digital signals reported which can be defined by 3 bytes. 8 x 3 = 24 (1 bit unused)Code:'11.10.2014 18:34:58 <jobstart>'STATUS_DIGITAL',' #@4692;P00000FB0h;# _STD [ 23391] SENDECUTEL #@4693;P00000FB0h;# _STD [ 23391] INPUT: 12 05 0B 04 #@4694;P00000FB0h;# _STD [ 23391] I -> D: 14 06 00 FF FF 00 #@4695;P00000FB0h;# _STD [ 23391] D -> I: 01 03 00 #@4696;P00000FB0h;# _STD [ 23391] I -> D: 13 04 00 01 #@4697;P00000FB0h;# _STD [ 23391] D -> I: 01 04 00 00 #@4698;P00000FB0h;# _STD [ 23391] I -> D: 06 07 00 12 05 0B 04 #@4699;P00000FB0h;# _STD [ 23485] D -> I: 01 0A 00 12 07 A0 21 00 01 95 #@4700;P00000FB0h;# _STD [ 23485] I -> D: 13 04 00 01 #@4701;P00000FB0h;# _STD [ 23485] D -> I: 01 04 00 00 #@4702;P00000FB0h;# _STD [ 23485] ERROR: NO ERROR #@4703;P00000FB0h;# _STD [ 23485] OUTPUT: 12 07 A0 21 00 01 95 ' 11.10.2014 18:34:58 'OBJECT','ms411ds1','text' 11.10.2014 18:34:58 'SAETZE','1','word' 11.10.2014 18:34:58 'JOBNAME','STATUS_DIGITAL','text' 11.10.2014 18:34:58 'VARIANTE','MS411DS1','text' 11.10.2014 18:34:58 'JOBSTATUS','','text' 11.10.2014 18:34:58 'UBATTCURRENT','1','integer' 11.10.2014 18:34:58 'UBATTHISTORY','1','integer' 11.10.2014 18:34:58 'IGNITIONCURRENT','1','integer' 11.10.2014 18:34:58 'IGNITIONHISTORY','1','integer' 11.10.2014 18:34:58 'JOB_STATUS','OKAY','text' 11.10.2014 18:34:58 'STAT_AC_EIN','0','integer' 11.10.2014 18:34:58 'STAT_KO_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_AC_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_FS_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_GE_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_KO_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_LL_EIN','1','integer' 11.10.2014 18:34:58 'STATUS_VL_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_AAV_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_ASR_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_CAN_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_DWA_EIN','1','integer' 11.10.2014 18:34:58 'STATUS_EKP_EIN','1','integer' 11.10.2014 18:34:58 'STATUS_MSR_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_SLP_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_SLV_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_KO_RELAIS','0','integer' 11.10.2014 18:34:58 'STATUS_VANOS_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_KLAPPE_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_RUN_LOS_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_SCHUB_AB_EIN','1','integer' 11.10.2014 18:34:58 'STATUS_LAMBDAREGELUNG_1_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_LAMBDAREGELUNG_2_EIN','0','integer' 11.10.2014 18:34:58 <jobend>
The reply has of "12 07 A0 21 00 01 95" has 3 data bytes. 21, 00, and 01.
21 hex = 00010101 binary (apologies, it's actually 00100001 in binary)
00 hex = 00000000 binary
01 hex = 00000001 binary
Notice there are 4 items that are set to 'ON/TRUE'. And there are 4 bits in the reply that are set to '1'.
Hope this helps you implement datalogging digital signals across all BMW ecus.
Last edited by mrf; 10-11-2014 at 06:57 PM.
So in the case of MS41.1 there is a Bits table accessible via Tool32 (unfortunately not all modules have such a table -- the E46 LSZ for instance). In this case it looks like the table does match up.
Code:NAME BYTE MASK VALUE S_VL 0 0x03 0x03 S_LL 0 0x01 0x00 S_FS 1 0x04 0x04 S_DWA 0 0x20 0x20 S_KO 0 0x80 0x80 S_AC 0 0x40 0x40 S_GE 1 0x02 0x02 S_REG1 1 0x40 0x40 S_REG2 1 0x80 0x80 S_ASC 0 0x04 0x04 S_MSR 0 0x08 0x08 S_CAN 1 0x01 0x01 S_VANOS 2 0x04 0x04 S_EKP 2 0x01 0x01 S_KO_REL 2 0x02 0x02 S_KLAPPE 2 0x08 0x08 S_RUN_LOSSES 2 0x10 0x10 S_AAV 2 0x20 0x20 S_ABGAS 3 0x04 0x04 S_SLP 2 0x40 0x40 S_SLV 2 0x80 0x80
Worth noting 0x21 = 0b00100001 = 33. Not 0b00010101.
Also, can you post the results of an ident query (12 04 00 16) for MS41.1? Thanks.
Last edited by blarf; 10-11-2014 at 06:43 PM.
You're right about my error. For some reason I converted from 21dec to binary. Sorry about that.
MS41.1 Testo trace output
MS41.2 Testo trace outputCode:11.10.2014 18:17:47 <jobstart>'IDENT',' #@52;P00001404h;#_STD [ 250] SENDECUTEL #@53;P00001404h;# _STD [ 250] INPUT: 12 04 00 #@54;P00001404h;# _STD [ 250] I -> D: 14 06 00 FF FF 00 #@55;P00001404h;# _STD [ 250] D -> I: 01 03 00 #@56;P00001404h;# _STD [ 250] I -> D: 13 04 00 01 #@57;P00001404h;# _STD [ 250] D -> I: 01 04 00 00 #@58;P00001404h;# _STD [ 250] I -> D: 06 06 00 12 04 00 #@59;P00001404h;# _STD [ 375] D -> I: 01 31 00 12 2E A0 31 34 33 37 38 30 36 31 31 30 31 33 30 32 #@60;P00001404h;# _STD 31 30 35 39 36 30 30 30 30 31 31 35 38 35 32 36 30 30 30 39 #@61;P00001404h;# _STD 36 30 35 31 30 30 36 36 9F #@62;P00001404h;# _STD [ 375] I -> D: 13 04 00 01 #@63;P00001404h;# _STD [ 375] D -> I: 01 04 00 00 #@64;P00001404h;# _STD [ 375] ERROR: NO ERROR #@65;P00001404h;# _STD [ 375] OUTPUT: 12 2E A0 31 34 33 37 38 30 36 31 31 30 31 33 30 32 31 30 35 #@66;P00001404h;# _STD 39 36 30 30 30 30 31 31 35 38 35 32 36 30 30 30 39 36 30 35 #@67;P00001404h;# _STD 31 30 30 36 36 9F ' 11.10.2014 18:17:47 'OBJECT','ms411ds1','text' 11.10.2014 18:17:47 'SAETZE','1','word' 11.10.2014 18:17:47 'JOBNAME','IDENT','text' 11.10.2014 18:17:47 'VARIANTE','MS411DS1','text' 11.10.2014 18:17:47 'JOBSTATUS','','text' 11.10.2014 18:17:47 'UBATTCURRENT','1','integer' 11.10.2014 18:17:47 'UBATTHISTORY','1','integer' 11.10.2014 18:17:47 'IGNITIONCURRENT','1','integer' 11.10.2014 18:17:47 'IGNITIONHISTORY','1','integer' 11.10.2014 18:17:47 'ID_EML','0','integer' 11.10.2014 18:17:47 'ID_OBD2','1','integer' 11.10.2014 18:17:47 'ID_AI_NR','00','text' 11.10.2014 18:17:47 'ID_HW_NR','11','integer' 11.10.2014 18:17:47 'ID_MOTOR','M52_411','text' 11.10.2014 18:17:47 'ID_SW_NR','60','text' 11.10.2014 18:17:47 'ID_BMW_NR','1437806','text' 11.10.2014 18:17:47 'ID_EWS_SS','2','integer' 11.10.2014 18:17:47 'ID_LIEF_NR','0000115852','text' 11.10.2014 18:17:47 'ID_PROD_NR','960510066','text' 11.10.2014 18:17:47 'JOB_STATUS','OKAY','text' 11.10.2014 18:17:47 'ID_DATUM_KW','05','text' 11.10.2014 18:17:47 'ID_BUS_INDEX','21','text' 11.10.2014 18:17:47 'ID_COD_INDEX','01','text' 11.10.2014 18:17:47 'ID_DATUM_JAHR','96','text' 11.10.2014 18:17:47 'ID_DIAG_INDEX','30','text' 11.10.2014 18:17:47 'ID_LU_MESSUNG','6','integer' 11.10.2014 18:17:47 'ID_AIF_VORHANDEN','1','integer' 11.10.2014 18:17:47 'ID_LAMBDA_STEREO','1','integer' 11.10.2014 18:17:47 'ID_SG_HERSTELLER','1','integer' 11.10.2014 18:17:47 <jobend> '11.10.2014 18:17:47 <jobstart>'INFO','' 11.10.2014 18:17:47 'OBJECT','ms411ds1','text' 11.10.2014 18:17:47 'SAETZE','1','word' 11.10.2014 18:17:47 'JOBNAME','INFO','text' 11.10.2014 18:17:47 'VARIANTE','MS411DS1','text' 11.10.2014 18:17:47 'JOBSTATUS','','text' 11.10.2014 18:17:47 'UBATTCURRENT','-1','integer' 11.10.2014 18:17:47 'UBATTHISTORY','-1','integer' 11.10.2014 18:17:47 'IGNITIONCURRENT','-1','integer' 11.10.2014 18:17:47 'IGNITIONHISTORY','-1','integer' 11.10.2014 18:17:47 'ECU','MS 41.1 for M52 OBD II','text' 11.10.2014 18:17:47 'AUTHOR','BMW TP-421 Weber, BMW TI-433 Schiefer','text' 11.10.2014 18:17:47 'ORIGIN','BMW TI-433 Schiefer','text' 11.10.2014 18:17:47 'COMMENT','','text' 11.10.2014 18:17:47 'SPRACHE','English Metric','text' 11.10.2014 18:17:47 'REVISION','1.13','text' 11.10.2014 18:17:47 <jobend>
Notice they both use the same MS411DS1 job. This is good because this means all USDM 1996 to 1999 3 Series use the same datalogging format regardless of whether it's an M3 or a 3 series.Code:11.10.2014 18:31:16 <jobstart>'IDENT',' #@127;P00000FB0h;#_STD [ 125] SENDECUTEL #@128;P00000FB0h;# _STD [ 125] INPUT: 12 04 00 #@129;P00000FB0h;# _STD [ 125] I -> D: 14 06 00 FF FF 00 #@130;P00000FB0h;# _STD [ 125] D -> I: 01 03 00 #@131;P00000FB0h;# _STD [ 125] I -> D: 13 04 00 01 #@132;P00000FB0h;# _STD [ 125] D -> I: 01 04 00 00 #@133;P00000FB0h;# _STD [ 125] I -> D: 06 06 00 12 04 00 #@134;P00000FB0h;# _STD [ 250] D -> I: 01 31 00 12 2E A0 31 34 30 36 34 36 34 31 36 30 31 31 30 32 #@135;P00000FB0h;# _STD 31 32 31 39 38 30 30 30 30 31 31 35 38 35 32 31 32 30 32 39 #@136;P00000FB0h;# _STD 38 32 31 32 30 36 35 37 90 #@137;P00000FB0h;# _STD [ 250] I -> D: 13 04 00 01 #@138;P00000FB0h;# _STD [ 250] D -> I: 01 04 00 00 #@139;P00000FB0h;# _STD [ 250] ERROR: NO ERROR #@140;P00000FB0h;# _STD [ 250] OUTPUT: 12 2E A0 31 34 30 36 34 36 34 31 36 30 31 31 30 32 31 32 31 #@141;P00000FB0h;# _STD 39 38 30 30 30 30 31 31 35 38 35 32 31 32 30 32 39 38 32 31 #@142;P00000FB0h;# _STD 32 30 36 35 37 90 ' 11.10.2014 18:31:16 'OBJECT','ms411ds1','text' 11.10.2014 18:31:16 'SAETZE','1','word' 11.10.2014 18:31:16 'JOBNAME','IDENT','text' 11.10.2014 18:31:16 'VARIANTE','MS411DS1','text' 11.10.2014 18:31:16 'JOBSTATUS','','text' 11.10.2014 18:31:16 'UBATTCURRENT','1','integer' 11.10.2014 18:31:16 'UBATTHISTORY','1','integer' 11.10.2014 18:31:16 'IGNITIONCURRENT','1','integer' 11.10.2014 18:31:16 'IGNITIONHISTORY','1','integer' 11.10.2014 18:31:16 'ID_EML','0','integer' 11.10.2014 18:31:16 'ID_OBD2','1','integer' 11.10.2014 18:31:16 'ID_AI_NR','02','text' 11.10.2014 18:31:16 'ID_HW_NR','16','integer' 11.10.2014 18:31:16 'ID_MOTOR','M52_411','text' 11.10.2014 18:31:16 'ID_SW_NR','12','text' 11.10.2014 18:31:16 'ID_BMW_NR','1406464','text' 11.10.2014 18:31:16 'ID_EWS_SS','2','integer' 11.10.2014 18:31:16 'ID_LIEF_NR','0000115852','text' 11.10.2014 18:31:16 'ID_PROD_NR','982120657','text' 11.10.2014 18:31:16 'JOB_STATUS','OKAY','text' 11.10.2014 18:31:16 'ID_DATUM_KW','21','text' 11.10.2014 18:31:16 'ID_BUS_INDEX','21','text' 11.10.2014 18:31:16 'ID_COD_INDEX','01','text' 11.10.2014 18:31:16 'ID_DATUM_JAHR','98','text' 11.10.2014 18:31:16 'ID_DIAG_INDEX','10','text' 11.10.2014 18:31:16 'ID_LU_MESSUNG','6','integer' 11.10.2014 18:31:16 'ID_AIF_VORHANDEN','1','integer' 11.10.2014 18:31:16 'ID_LAMBDA_STEREO','1','integer' 11.10.2014 18:31:16 'ID_SG_HERSTELLER','1','integer' 11.10.2014 18:31:16 <jobend> '11.10.2014 18:31:16 <jobstart>'INFO','' 11.10.2014 18:31:16 'OBJECT','ms411ds1','text' 11.10.2014 18:31:16 'SAETZE','1','word' 11.10.2014 18:31:16 'JOBNAME','INFO','text' 11.10.2014 18:31:16 'VARIANTE','MS411DS1','text' 11.10.2014 18:31:16 'JOBSTATUS','','text' 11.10.2014 18:31:16 'UBATTCURRENT','-1','integer' 11.10.2014 18:31:16 'UBATTHISTORY','-1','integer' 11.10.2014 18:31:16 'IGNITIONCURRENT','-1','integer' 11.10.2014 18:31:16 'IGNITIONHISTORY','-1','integer' 11.10.2014 18:31:16 'ECU','MS 41.1 for M52 OBD II','text' 11.10.2014 18:31:16 'AUTHOR','BMW TP-421 Weber, BMW TI-433 Schiefer','text' 11.10.2014 18:31:16 'ORIGIN','BMW TI-433 Schiefer','text' 11.10.2014 18:31:16 'COMMENT','','text' 11.10.2014 18:31:16 'SPRACHE','English Metric','text' 11.10.2014 18:31:16 'REVISION','1.13','text' 11.10.2014 18:31:16 <jobend>
- - - Updated - - -
This looks incomplete compared to Testo's trace output. 21 items here vs 23 in Testo?
For some reason two items are repeated it seems. pheno, what's the difference between STAT and STATUS?
'Code:11.10.2014 18:34:58 'STAT_AC_EIN','0','integer' 11.10.2014 18:34:58 'STAT_KO_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_AC_EIN','0','integer' 11.10.2014 18:34:58 'STATUS_KO_EIN','0','integer
Also, the Testo trace output matches up with the bits table you posted except for
- - - Updated - - -Code:11.10.2014 18:34:58 'STATUS_SCHUB_AB_EIN','1','integer'
pheno, what's the difference between STATUS_LMM and STATUS_LMM_MASSE. they both send the same command but have two different job names.
Code:'11.10.2014 18:37:43 <jobstart>'STATUS_LMM',' #@8988;P00000FB0h;#_STD [ 13125] SETTELPARAMETER #@8989;P00000FB0h;# _STD [ 13125] INPUT: FF FF 00 00 #@8990;P00000FB0h;# _STD [ 13125] ERROR: NO ERROR #@8991;P00000FB0h;# _STD [ 13125] OUTPUT: -- #@8992;P00000FB0h;# _STD [ 13125] SENDECUTEL #@8993;P00000FB0h;# _STD [ 13125] INPUT: 12 09 06 00 00 DA 34 02 #@8994;P00000FB0h;# _STD [ 13125] I -> D: 14 06 00 FF FF 00 #@8995;P00000FB0h;# _STD [ 13125] D -> I: 01 03 00 #@8996;P00000FB0h;# _STD [ 13125] I -> D: 13 04 00 01 #@8997;P00000FB0h;# _STD [ 13125] D -> I: 01 04 00 00 #@8998;P00000FB0h;# _STD [ 13125] I -> D: 06 0B 00 12 09 06 00 00 DA 34 02 #@8999;P00000FB0h;# _STD [ 13219] D -> I: 01 09 00 12 06 A0 8F 00 3B #@9000;P00000FB0h;# _STD [ 13219] I -> D: 13 04 00 01 #@9001;P00000FB0h;# _STD [ 13219] D -> I: 01 04 00 00 #@9002;P00000FB0h;# _STD [ 13219] ERROR: NO ERROR #@9003;P00000FB0h;# _STD [ 13219] OUTPUT: 12 06 A0 8F 00 3B ' 11.10.2014 18:37:43 'OBJECT','ms411ds1','text' 11.10.2014 18:37:43 'SAETZE','1','word' 11.10.2014 18:37:43 'JOBNAME','STATUS_LMM','text' 11.10.2014 18:37:43 'VARIANTE','MS411DS1','text' 11.10.2014 18:37:43 'JOBSTATUS','','text' 11.10.2014 18:37:43 'UBATTCURRENT','1','integer' 11.10.2014 18:37:43 'UBATTHISTORY','1','integer' 11.10.2014 18:37:43 'IGNITIONCURRENT','1','integer' 11.10.2014 18:37:43 'IGNITIONHISTORY','1','integer' 11.10.2014 18:37:43 'JOB_STATUS','OKAY','text' 11.10.2014 18:37:43 'STATUS_LMM_EINH','kg/h','text' 11.10.2014 18:37:43 'STATUS_LMM_WERT','3.575000E+001','real' 11.10.2014 18:37:43 <jobend>Code:'11.10.2014 18:37:55 <jobstart>'STATUS_LMM_MASSE',' #@9777;P00000FB0h;#_STD [ 24563] SETTELPARAMETER #@9778;P00000FB0h;# _STD [ 24563] INPUT: FF FF 00 00 #@9779;P00000FB0h;# _STD [ 24563] ERROR: NO ERROR #@9780;P00000FB0h;# _STD [ 24563] OUTPUT: -- #@9781;P00000FB0h;# _STD [ 24563] SENDECUTEL #@9782;P00000FB0h;# _STD [ 24563] INPUT: 12 09 06 00 00 DA 34 02 #@9783;P00000FB0h;# _STD [ 24563] I -> D: 14 06 00 FF FF 00 #@9784;P00000FB0h;# _STD [ 24563] D -> I: 01 03 00 #@9785;P00000FB0h;# _STD [ 24563] I -> D: 13 04 00 01 #@9786;P00000FB0h;# _STD [ 24563] D -> I: 01 04 00 00 #@9787;P00000FB0h;# _STD [ 24563] I -> D: 06 0B 00 12 09 06 00 00 DA 34 02 #@9788;P00000FB0h;# _STD [ 24656] D -> I: 01 09 00 12 06 A0 92 00 26 #@9789;P00000FB0h;# _STD [ 24656] I -> D: 13 04 00 01 #@9790;P00000FB0h;# _STD [ 24656] D -> I: 01 04 00 00 #@9791;P00000FB0h;# _STD [ 24656] ERROR: NO ERROR #@9792;P00000FB0h;# _STD [ 24656] OUTPUT: 12 06 A0 92 00 26 ' 11.10.2014 18:37:55 'OBJECT','ms411ds1','text' 11.10.2014 18:37:55 'SAETZE','1','word' 11.10.2014 18:37:55 'JOBNAME','STATUS_LMM_MASSE','text' 11.10.2014 18:37:55 'VARIANTE','MS411DS1','text' 11.10.2014 18:37:55 'JOBSTATUS','','text' 11.10.2014 18:37:55 'UBATTCURRENT','1','integer' 11.10.2014 18:37:55 'UBATTHISTORY','1','integer' 11.10.2014 18:37:55 'IGNITIONCURRENT','1','integer' 11.10.2014 18:37:55 'IGNITIONHISTORY','1','integer' 11.10.2014 18:37:55 'JOB_STATUS','OKAY','text' 11.10.2014 18:37:55 'STAT_LMM_MASSE_EINH','kg/h','text' 11.10.2014 18:37:55 'STAT_LMM_MASSE_WERT','3.650000E+001','real' 11.10.2014 18:37:55 <jobend>
Last edited by mrf; 10-11-2014 at 07:25 PM.
Wow.. you guys have been busy :-)
I'm decoding results within Testo. Ediabas API does not have the possibility to decode a single packet (array or chars) for some particular ecu. You'll have to execute a named job and then you'll get the results.
STATUS_LMM AND STATUS_LMM_MASSE are the same jobs
I was thinking I could share with you the MS41/MS42 datatables just to save you some time :-) or have you figured them out already ??
The status_digital i.e. bit values is something I haven't done and decoded. So if you figure those out please let me know or add your findings here. Thanks.
E61 520d LCI
Check out TestO - free datalogger for BMW. Includes support for: AEM, PLX, 14point7, Innovate (through SDK)
IIRC, both the US S52 and M52 use MS41.1, and only the Euro S52 got MS41.2.
Yep, some items are not covered by the tables. If you're interested in reverse engineering this stuff I'd suggest getting INPA + the other tools setup, Tool32 is a good resource for poking at things.
Likely they're all the same, just different names.
Ahh, I saw the .BIV file for the serial protocol and assumed there must be some EDIABAS dependency.
I've got much of the MS42 stuff figured out (because that's what my car uses), some items I've left out (like throttle valve opening) because it doesn't seem to get updated in real-time, and some I've yet to get to. I've not yet looked at any of the MS41 stuff.
Keep an eye on the github repository. That's where any/all of my findings end up. You can use the JSON schema and README to get a good idea as to how the files are structured (there are validation scripts included but I prefer this validator for its more useful output -- but it will barf on comments). So far I've done a digital_status job for the GM5 and something similar for the E46 LSZ but not for MS42. Where I could really use some help and insight is with the matrices used to determine which parameters are included with a DTC.
On the MS42 front, this is what I have so far:
Code:$ ./ds2-dump --ecu 12000000-0001-0000-0000-000000000000 --operations Operations for: Siemens MS 42.0 (12000000-0001-0000-0000-000000000000) Operation: amm_voltage Returns: voltage.air_mass_meter Operation: dtc_count Returns: error_code.count Operation: dtc_load_bank1 Returns: error_code.codes.0.attributes, error_code.codes.0.description, error_code.codes.0.drive_cycles_until_clear, error_code.codes.0.dtc, error_code.codes.0.frequency, error_code.codes.0.last_occurrence, error_code.codes.1.attributes, error_code.codes.1.description, error_code.codes.1.drive_cycles_until_clear, error_code.codes.1.dtc, error_code.codes.1.frequency, error_code.codes.1.last_occurrence, error_code.codes.2.attributes, error_code.codes.2.description, error_code.codes.2.drive_cycles_until_clear, error_code.codes.2.dtc, error_code.codes.2.frequency, error_code.codes.2.last_occurrence, error_code.codes.3.attributes, error_code.codes.3.description, error_code.codes.3.drive_cycles_until_clear, error_code.codes.3.dtc, error_code.codes.3.frequency, error_code.codes.3.last_occurrence, error_code.codes.4.attributes, error_code.codes.4.description, error_code.codes.4.drive_cycles_until_clear, error_code.codes.4.dtc, error_code.codes.4.frequency, error_code.codes.4.last_occurrence, error_code.codes.5.attributes, error_code.codes.5.description, error_code.codes.5.drive_cycles_until_clear, error_code.codes.5.dtc, error_code.codes.5.frequency, error_code.codes.5.last_occurrence, error_code.codes.6.attributes, error_code.codes.6.description, error_code.codes.6.drive_cycles_until_clear, error_code.codes.6.dtc, error_code.codes.6.frequency, error_code.codes.6.last_occurrence, error_code.codes.7.attributes, error_code.codes.7.description, error_code.codes.7.drive_cycles_until_clear, error_code.codes.7.dtc, error_code.codes.7.frequency, error_code.codes.7.last_occurrence, error_code.count Operation: dtc_load_bank2 Returns: error_code.codes.0.attributes, error_code.codes.0.description, error_code.codes.0.drive_cycles_until_clear, error_code.codes.0.dtc, error_code.codes.0.frequency, error_code.codes.0.last_occurrence, error_code.codes.1.attributes, error_code.codes.1.description, error_code.codes.1.drive_cycles_until_clear, error_code.codes.1.dtc, error_code.codes.1.frequency, error_code.codes.1.last_occurrence, error_code.codes.2.attributes, error_code.codes.2.description, error_code.codes.2.drive_cycles_until_clear, error_code.codes.2.dtc, error_code.codes.2.frequency, error_code.codes.2.last_occurrence, error_code.codes.3.attributes, error_code.codes.3.description, error_code.codes.3.drive_cycles_until_clear, error_code.codes.3.dtc, error_code.codes.3.frequency, error_code.codes.3.last_occurrence, error_code.codes.4.attributes, error_code.codes.4.description, error_code.codes.4.drive_cycles_until_clear, error_code.codes.4.dtc, error_code.codes.4.frequency, error_code.codes.4.last_occurrence, error_code.codes.5.attributes, error_code.codes.5.description, error_code.codes.5.drive_cycles_until_clear, error_code.codes.5.dtc, error_code.codes.5.frequency, error_code.codes.5.last_occurrence, error_code.codes.6.attributes, error_code.codes.6.description, error_code.codes.6.drive_cycles_until_clear, error_code.codes.6.dtc, error_code.codes.6.frequency, error_code.codes.6.last_occurrence, error_code.count Operation: dtc_shadow_count Returns: error_code.shadow_count Operation: dtc_shadow_load_bank1 Returns: error_code.shadow.0.description, error_code.shadow.0.dtc, error_code.shadow.1.description, error_code.shadow.1.dtc, error_code.shadow.2.description, error_code.shadow.2.dtc, error_code.shadow_count Operation: engine_status Returns: engine.current_rpm, engine.throttle_opening, input.throttle_pedal_angle, vehicle.current_speed Operation: exhaust_variant Returns: engine.exhaust_variant Operation: identify Returns: build_date.week, build_date.year, bus_index, coding_index, diag_index, hardware_number, part_number, software_number, supplier Operation: knock_sensor_bank1_voltage Returns: knock_sensor.bank1.voltage Operation: knock_sensor_bank2_voltage Returns: knock_sensor.bank2.voltage Operation: lambda_adaptation_status Returns: lambda.bank1.additive_factor, lambda.bank1.multiplicative_factor, lambda.bank2.additive_factor, lambda.bank2.multiplicative_factor Operation: mdk_pot1_voltage Returns: voltage.mdk.pot1 Operation: mdk_pot2_voltage Returns: voltage.mdk.pot2 Operation: postcat_o2_bank1_voltage Returns: voltage.postcat_o2.bank1 Operation: postcat_o2_bank2_voltage Returns: voltage.postcat_o2.bank2 Operation: precat_o2_bank1_voltage Returns: voltage.precat_o2.bank1 Operation: precat_o2_bank2_voltage Returns: voltage.precat_o2.bank2 Operation: status Returns: ignition_deg_kw, temp.coolant, temp.coolant_outlet, temp.intake_air, temp.motor_oil, voltage.battery Operation: vanos_status Returns: vanos.NW_BESTROMUNGSZEIT_ADAPT_AUSLASS_WERT, vanos.NW_BESTROMUNGSZEIT_ADAPT_EINLASS_WERT, vanos.NW_HALTE_TV_ADAPT_AUSLASS_WERT, vanos.NW_HALTE_TV_ADAPT_EINLASS_WERT, vanos.exhaust.actual, vanos.exhaust.adaptation, vanos.exhaust.reference, vanos.exhaust.target, vanos.intake.actual, vanos.intake.adaptation, vanos.intake.reference, vanos.intake.target, vanos.temperature_mode Operation: vehicle_id Returns: vin
Last edited by blarf; 10-12-2014 at 03:38 PM.
Yeah, the ECU label says MS41.1 for the US S52, but the software says MS41.2. Don't know about the Euro S52. Pretty sure that's run by an entirely different ECU; MSS50.IIRC, both the US S52 and M52 use MS41.1, and only the Euro S52 got MS41.2.
http://www.m3forum.net/m3forum/showthread.php?t=473890
pheno, I can't figure out how to attach a spreadsheet but attaching a picture of what I have so far. If you already have a similar database with MS41 serial commands and how to decipher then I'd love to see it! It would save me the time from recreating your work.
Looks good! Reading DTC is something I would like to get working too although I've thought that people would use INPA for that. I haven't had time to look at that at all. There's a table in the .prg that seems to have all the error codes for the ecu. I could take a look at this next.
- - - Updated - - -
Attached, it says MS411 but I worked this from MS41.2 trace files.
MS411DS1_DATATABLE.txt
7th column is for data type. 2 is unsigned byte. 4 and 5 is two unsigned bytes.
About the trace files generation. I use Ediabas to generate two trace files and Test-O just smartly combines them.
Last edited by pheno; 10-17-2014 at 03:43 AM.
E61 520d LCI
Check out TestO - free datalogger for BMW. Includes support for: AEM, PLX, 14point7, Innovate (through SDK)
Yeah, my goal was to avoid having an EDIABAS/INPA dependency. So far I can pull DTCs + info from shadow memory, typically I can decode the fixed data (timestamps, etc). But with the DME fault codes I can't pull the dynamic data that's dependent upon which error code you're looking at (a.k.a. I've not figured out how to decode the matrixes).
Thanks pheno! Glad to see the multiplier/offset I came up with so far matches what you have!
But I have some concerns about the following.
STATUS_INT STATUS_INT_2 STATUS_LS_VKAT_HEIZUNG_TV_1 STATUS_LS_VKAT_HEIZUNG_TV_2 STATUS_LAMBDA_INTEGRATOR_1 STATUS_LAMBDA_INTEGRATOR_2
You don't have anything listed for bytes 6,16,17, 19, 21, 23, 26,27.
The output has 27 bytes of returned data if we accept byte 28 is the checksum, right?
*Attaching my spreadsheet. delete the .txt at the end to open as *.xlsx file
Last edited by mrf; 10-20-2014 at 07:19 PM.
E61 520d LCI
Check out TestO - free datalogger for BMW. Includes support for: AEM, PLX, 14point7, Innovate (through SDK)
According to RealOEM: 2012 335is (E93) seems to have MSD81.
E61 520d LCI
Check out TestO - free datalogger for BMW. Includes support for: AEM, PLX, 14point7, Innovate (through SDK)
Yes - I you are correct - the 's' stayed with the N54 and MSD81
Pheno, please clear your messages![]()
Cleared :-)
E61 520d LCI
Check out TestO - free datalogger for BMW. Includes support for: AEM, PLX, 14point7, Innovate (through SDK)
Pheno,
My first post but it looks like this might be what I have been looking for. Got a poorly E39 525d that has some random bogging down moments.
Was after some method of logging the data in a drive to then be able to isolate where to look.
Have downloaded it and will try it in my car over the next few days once I have got my head around the word.
So many thanks and lets see what happens.
Hi pheno, after IDA analysis we've found the function in MS41 that responds to 12050B03 and were able to fill in some gaps for some of the values you were missing. Hope this helps.
Byte 6 is TPS % = x*.47
Byte 16,17 is a word related to Idle. Not sure what yet.
Byte 19 is Battery Voltage V = x*.1
Byte 20,21 is a HiLo word. I think you have just Byte 20 listed right now.
Byte 22,23 is a HiLo word. I think you have just Byte 22 listed right now.
Byte 26 is Downstream Lambda Heater 1 % = x*.3906
Byte 27 is Downstream Lambda Heater 2 % = x*.3906
Also wanted to thank you for sharing the DS2 serial stuff because that led us to find the chunk of DS2 stuff in the code that deals with this and a lot more. Which has led to even more development. Knowledge sharing is good for everyone!
Last edited by mrf; 12-18-2014 at 07:08 PM. Reason: .
Well it 'seems' to be working as I can get some readings on the jobs when selected. I have taken an educated guess selected a couple and then started the data logging. Next to work out the best way to display the data. The ones I read are just a lot of numbers that did not read what I thought they would.
All I need to do is understand how to get a set on continuous readings. Would like to be able to read all the engine sensor including the pre supply fuel pump so I can sync the engine revs with the sensors.
I better read this from the start again and make notes.
Hi Andy, sorry for late answer. For some reason I didn't get any email notification about new posts. But I've sent you an email..
Pretty awesome work!
Thanks for the new information about TPS, battery, etc. Bytes 20 and 22 are only one byte on purpose, just like the EDIABAS displays it but yes probably you'll get more resolution by using two bytes.
E61 520d LCI
Check out TestO - free datalogger for BMW. Includes support for: AEM, PLX, 14point7, Innovate (through SDK)
I get an error that reads "The program can't start because api32.dll is missing from your computer. Try reinstalling the problem to fix this problem."
I have reinstalled two times now and it still says api32 is missing... where would i get the dll file?
Thanks.
"Engine in the front. Drive in the rear. And a big smiley piece of meat in the middle." - Jeremy Clarkson
Check from folder: c:\ediabas\bin. I have added c:\ediabas\bin into PATH so it's always available to programs
E61 520d LCI
Check out TestO - free datalogger for BMW. Includes support for: AEM, PLX, 14point7, Innovate (through SDK)
Rather than start something new I am hoping that the following might also help others.
A suggestion from Pheno on what I was looking for in DDE40KW0 ECU for my 525d E39
From some head scratching I think I have got what they are measuring
Values #2
STAT_anmKDF - fuel KDF rail pressure measured in bar
STAT_anmPWG - amount of throttle % requested
STAT_anmVDF - fuel VDF prefeed pressure measured in bar
STAT_armM_List_EINH -M_L current air mass measured in mg/Hub Luft
STAT_dzmNmit_EINH - Engine Revs measured in 1/min
STAT_ehmFARS_EINH - Sampling rate control EGR actuator measured in%
STAT_zumAB_HE_EINH - Control start main injection measured in Grad KW
STAT_zumPQsoll_EINH - Rail pressure setpoint measured inbar
STAT_zuoAD_HE_EINH - Main injection control duration measured in uS (micro seconds) on my results varies between 400-700
STAT_zuoMEHE_EINH - M_E amount of main injection measured in mm^3
STAT_zuoME_VE_EINH - M_E amount of pilot injectionmeasured in mm^3
Injector Values
STAT_dzmzMk - Selective speed cylindermeasured in 1/min
STAT_dzmzN - Selective quantity correction measured in mm^3
From the values I have seen it does look like there are occasional pre supply fuel pressure drops under acceleration.
The actual Pre Supply pump changed about 2 years ago after failing in dramatic fashion at a set of traffic lights.
All fun trying to source the issue but at least I will be saving money.
Andy, thanks for the translations.
I've added ecu detection function. I'd be happy to hear if there are any problems using that. From menu: File -> Detect ecu -> Detect
E61 520d LCI
Check out TestO - free datalogger for BMW. Includes support for: AEM, PLX, 14point7, Innovate (through SDK)
Bookmarks