Datalogging

Datalogging can simplistically be broken down into 4 basics, 1- disrupting the code, 2- executing the patch code, 3- shadowing payloads, 4- parsing data with the QH With the new "Standardized" ADX datalogging its simplified significantly. This will prevent errors when jumping between strategies and makes it very easy to create datalogging support as well as maintaining your adx since you only keep one master file. The patch code stays consistent for all defs except for the raminit flag that you took out the console routine in order to call the patch code routine. Once you've located the console call routine, insert your CALL to your patch code address. If your console call routine is not within' bank 8 you will have to update the bank calls in the patch code. I have listed patch codes for the logging list and patch in different banks to make it easier to implement in the chart below for reference.

This table below is outdated

Strategy Datalogging Addresses
DateStrategyBanksCode Address Code SizeList AddressList SizeRAMINIT FlgConfiguration (Console,Call,Call,List)
2017-07-03GUFX18x DF401598x EE00128xx xx xxSingle Bank
2017-07-03RZASA48x FF571690x FE0029871 EF 908 -> 8 -> X -> 0
*2017-07-03CRAJ048x FF571690x FE0019471 EF 908 -> 8 -> X -> 0
2017-07-03CVAF148x FF571690x FE00xx71 EF 908 -> 8 -> X -> 0
2017-07-03FBFG248x FF571690x FF0020471 EF 928 -> 8 -> X -> 0
2017-07-03FBGI048x FF571690x FE00xxx71 EF 928 -> 8 -> X -> 0
OMAE24808 -> 8 -> X -> 0 ?
CMAI64808 -> 8 -> X -> 0 ?
*2017-06-09b code shadowed to 1x1F20 instead of C000, change of 3 bytes, 8xff5f from 0x00 to 0x20; 8xff60 from 0xc0 to 0x1f; 8xfff8 from 0xc0 to 0x1f

Part 1 - RAM Addresses

Payload List - in ADX due to DMA logging


The following is the ORDERED list that MUST be used for the Standardized ADX to function correctly.

NOTE: To skip over an parameter simply log 1F20. As for the ops list if you do not have the ddress for a bitmask then set the address to FFFE which will skip over that stacked bit to continue on with the remaining stacked bits.

This list is outdated



List A - Word Shadowing - Payload List addressing is posted above. See Strategy DataLogging Address Table Above
ADX Offset
Descriptions
Shadow
Address
PIDXX Address XXEquationUnits
00 00 == STOP MUST BE HERE to END MARKER LIST A
110BIDI Port A21F8Dflags-flagsflags
109BIDI Port A11F8CflagsFFFFflagsflags
108knk sensor spark adjustment1F8BSPKAD-xx
107fuel pump voltage1F8AFP_INPUT_VLTFFFF/16Volts
105mbt spark limit1F88SPK_M_B_T0E9A/128 sispkadv
103bdl spark limit1F86SPK_BDL0E90/128 sispkadv
101Fuel Level input1F84IF_FUEL_LVL02F8xx
99Fuel tank pressure1F82TPR_ENGF1CCxx
97Est Fuel Consumption1F80FLI_FUEL_SUM148E/33554432lb/m
95deciphas enrichment fuel1F7ELOST_FUEL__AF112/32768Lambse
93Feeback Spark1F7CSPK_ACTUALF0DE/4dBtdc
91Calc pump fuel flow1F7AFP_FLOWRATEF322/16384
89Fuel Rail Pressure1F78FIP_DELTAF0F2
87modulated fuel pump dutycycle1F76FPUMP_DC1132/32768%duty
86lost alternate fuel lambse1F75LOST_ALT_MUL/128lambse
85cold fuel lambse adder1F74FUL_ADD_CLDFFFF/128Lambse
83filtered Acceleration Rate1F72VS_RATE1274/ 512MPH/sec
81inferred engine oil temp1F70INF_EOTF04Exx
80flags (spark)1F6Fflags
79Spark Source1F6ESPK_SOURCEFFFFxRef
77inferred ambient temp1F6CINFAMB_KAM147exx
75trans Input/Output Ratio1F6ASPD_RATIO1226/16384Slip Ratio
73Trans oil temp1F68TOT02AC/8Temp F
72unassigned1F67unassigned-XX
71Engine Tq into TCC1F66TQ_NETFFFF/ 0.5ft/lbs
70flags (trans)1F65flags
69Trans Line Pressure1F64TV_PRESFFFF/2psi
68 MOVEDFN725A_ACT1F63spk_bdl_act_retard-xmoved as of 10-13-17
67Gear Commanded1F62GR_CMFFFF/2Gear
65OSS RPM1F60NOBART1264/4RPM
63TCC PWM DutyCycle1F5EBCSDC1230/32768TCC_DTY
62unassigned1F5Dunassigned-XX
61total fault codes stored1F5CNUM_CODESFFFFXX
59hego2 voltage1F5AIEGO210164/64
57driver side ltft1F58KAMRF207A6
55driver side stft1F56LAM_FINAL20450
53knk sensor 1 voltage1F54KNK_SNS1_CNTF14AXVolts?
51transient fuel time const1F52EFUEL/TFC_TAU or TSIEF01B6512sec?
49transient dynamic fuel trapped fraction1F50EFTRFF/TFC_DYNX or AEFUEL01B8512%
48park drive lever position1F4FPDL-x/27=p;6=r;5=n;4=od;3=d;2=2;1=1
47desired idle rpm1F4EDSDRPMFFFF/4rpm
45injector pulse width1F4CFUELPW1012C/ 0.5pw (in ticks)
44isc mode1F4BISCFLGXstate
43throttle position flag1F4AAPTFFFFXstate
41throttle position voltage1F48TP0122/64ADCnts
40cyl head temp or iat2 (cobra/L/HD)1F47CHT or IAT2-xtemp F
39battery voltage1F46VBATFFFF/16Volts
38flags1F45flags
37flags1F44flagsFFFF
36*vsbar is mph calculated from vss1F43VSBAR/2MPH
35*vsbart is mph calculated from oss1F42VSBART_RTFFFF/2MPH
33isc duty1F40ISCDTY012632768%Duty
31dashpot airmass1F3EDASPOT1418/4096lbs/min
29hego1 passenger1F3CIEGO11015C/64ADCnts?
27passenger ltft1F3AKAMRF107A4256Err%
25passenger bank1 STFT1F38LAM_FINAL1044E32768Lambda
23dpfe / evp voltage1F36EPTBAR or IEVP (WBo2)014A/64ADCnts
21raw maf voltage1F34IMAF or VMAF, or MAPOPE017E/64ADCnts, [Speed Density == /128 = MAPOPE (byte)]
19inferred load (not PCT_LOAD)1F32TOTLDST or MAPF018/32768LOAD
17filtered TP_REL for shifting1F30TP_SS_L or RATCHF38C/64ADCnts
15percentage of load1F2EPERLOAD or MAPPA1372/32768%load
13Filtered RPM1F2CNE03EA/4RPM
11engine VE1F2ALOAD_FG or MAP0134/32768Load, [Speed Density == /8 = MAP (byte)]
9spark advance1F28SAFTOT1794/4 (signed)dBtdc
7airmass flow1F26AM134C/1024lbs/min
6*inlet air temp1F25ACT/0.5 (signed)F
5*engine coolant temp1F24ECTFFFF/0.5 (signed)F
3CL idle isc correction1F22IPSIBR140E/4096lbs/min
1engine run timer1F20ATMR1 or ATMR3_HI_RES15FE/8sec
0null1F1Fnulldoes not existXoffset 0 - not in list but polled for superlogger offset
*bytes listed in bold = Must be done per byte in List B

REMEMBER: FFFF skips that address for byte or bitmask manipulation.
and FFFE zeros that value for unlogged words.
0x1F4F is set to be a value of 0 or 1 determined by the OL_DES flag done in the bits code.
PDL needs to be moved.
List B - Copy MSB to LSB for odd addesses.
Again, start at the bottom and work up to the top, and most importantly, don't forget to put the Quad 0s to mark the end of the list and continue on to C.

LIST B - SHADOW BYTES
ParameterAddress
0000 == STOP, END MARKER FOR LIST B
1F8D
BIDI_REG_6A6A
1F8C
BIDI_REG_5454
1F8B
SPKAD1799
1F8A
FP_INPUT_VLTF30F
1F75
LOST_FUEL_MULF114
1F74
FUL_ADD_CLD1354
1F6E
SPK_SOURCE0637
1F67
UNASSIGNEDFFFE
1F66
TQ_NET129A
1F64
TV_PRES1297
1F63
FN725A_ACTF225
1F62
GR_CM1288
1F5D
UNASSIGNEDFFFE
1F5C
NUM_CODES077A
1F4F
PDL1270
1F4E
DSDRPM1449
1F4B
ISCFLG144D
1F4A
APT00D0
1F47
CHT or IAT211EF
1F46
VBAT0763
1F43
VSBAR11CF
1F42
VSBART_RT127D
1F25
ACT007B
1F24
ECT0079



Part 3 - Bit Comparisons
NOTE: Bits can only report when they are on, anything in the off state will
not show an indicator so FFFE can zero out unlogged bytes/words/bits and not
set an incorrect flag button.

REMEMBER: 1FXX == offset to copy to
Bit Flags Reference Values
Bit-0Bit-1Bit-2Bit-3Bit-4Bit-5Bit-6Bit-7
0102040810204080


List C - Shadow and Stack BitFlags - 1F44, 1F45, 1F63, 1F65, 1F67, 1F6F
1F6F
INJ8_FAULT
Bit 7
6F02
0071
INJ7_FAULT
Bit 6
6F01
0071
INJ6_FAULT
Bit 5
6F20
0071
INJ5_FAULT
Bit 4
6F10
0071
INJ4_FAULT
Bit 3
6F02
0070
INJ3_FAULT
Bit 2
6F01
0070
INJ2_FAULT
Bit 1
6F02
006F
INJ1_FAULT
Bit 0
6F01
006F
1F65
FLASH_TCIL
Bit 7
6580
03B6
DO_KOEO_TST
Bit 6
6520
00BE
FLG_ADAPT_RST
Bit 5
6501
13F4
FLG_OLUP
Bit 4
6510
00B0
BOO_LVL
Bit 3
6508
0058
DSFFLG
Bit 2
6580
00B1
CL_THRTL
Bit 1
6580
00D0
OCTADJ
Bit 0
6540
13F2
1F45
MISFIRING
Bit 7
4502
00B8
MIL
Bit 6
4508
006C
LEGOFG11
Bit 5
4580Hego 1 not switching
07C2
KNOCK_DETECT
Bit 4
4520
00A5
KNK_FMEM_2
Bit 3
4502
07C2
KNK_FMEM_1
Bit 2
4510
07C4
FRP_FAULT
Bit 1
4580
04D6
MASTER_KEY
Bit 0
4520
1757
1F44
OL_DES
Bit 7
4402
0094
NDSFLG
Bit 6
4480
009D
LSF
Bit 5
4480
0377
HSF
Bit 4
4480
014F
ACCFLG
Bit 3
4404
00C1
FUEL_IN_SYNC
Bit 2
4480
008E
UNDSP
Bit 1
4404
0098
WOT
Bit 0
4401
0090


To summarize:

first words are payload adresses - List A
second bytes are copying high to low - List B <--- not any more, simply log a word
3rd bits are copying bits flags to 0 - List C
Note: Max Polling Limit of the QH is 102 bytes

Below is outdated

We saved the best for last, now that the patch is written we are ready to start requesting RAM addresses to poll. But not just so fast there young grasshoppah, it is very important that you keep track of the order in which you poll your addresses. If you have setup the patch code with registers in the correct order then you are done! Simply enable the datalogging patch code in your tune and use the DECIPHA.ADX datalogging file to datalog. The following is the ACTUAL functioning of the datalogging in detail for your knowledge.

8065 REGISTERS are from 0x000 to 0x3FF, the QuarterHorse cannot access those addresses directly. Directly addressable RAM begins at 0x400 on up. Since you cannot access the ecu's REGISTERS directly, In order to datalog these registers you must write patch code to copy/shadow REGISTERS to MBUS where they are visible. For simplicity and to reduce errors, the majority of the QH_CONFIG can be reused from the available strategy files, but for the sake of understanding, I will break down exactly what is going on so you have a much better understanding of it and can write your own datalogging files for the strategy your working on. The QH Write Patch command is fairly simple once you know how it works.

I highly recommend referencing the DECIPHA.ADX file to follow along. The following applies to the Quarterhorse from Moates.net using Tunerpro RT.

To follow along open up the ADX Editor in TunerPro and cruise on down to Commands >> QH_Configure QH for Payloads [QH_CONFIG] tab

I highly recommend overwriting the raminit flg at the end of console routine and calling the patch code then using 0x1F20 to shadow for datalogging.

< 0 > Configure QH for Payloads [QH_CONFIG]

This is the actual list of steps IN ORDER that TunerPro will perform to datalog and MUST ALWAYS be in this exact order:

TunerPro Command Structure
  • 1
  • (Pause for Data Rate) 100msec [WAIT]
  • 2
  • reQuest QH Packet
  • 3
  • Reply to Q - 400 msec (0x4F)

    < 1 > Pause for Data Rate

    Pause for Data Rate; just as it states, the QH must reply with its data rate before anything can function, its nothing more than a 100ms wait timeout

    < 2 > reQuest QH Packet - KEEP TRACK OF OFFSETS!!!!

    The order in which the addresses are polled below will determine the TunerPro offset for each VALUE so when it comes time to configuring the values you must keep track of the offset they are at. This is a VERY TEDIOUS PROCESS THEREFORE, If you poll your payloads in the order I have defined below then you can use my DECIPHA.ADX and the hard part is already done for you!!!!!!!! I recommend you log all the critical payloads I have defined below in the ordered layed out. You can then log any additional payloads as you desire AFTERWARDS. If doing so, be sure to you configure a new dashboard for your additional values.

    Also note, the QH has a hard poll limit of 109 bytes per query. I have created my TunerPro dash to be what I find the most efficient, I highly recommend you follow suit as it is a significant time investment to create an in depth dashboard. I will keep the RAM addresses here to personally keep track of the payloads and value offset but also for others to reference. If you look at the registers you'll see many are in the same location throughout most if not all strategies. This can give you a head start in many cases. If you do develop any datalogging support I highly encourage you to send me your logging list and I will add them to my listing. This way if I update the structure of the universal ADX I can update the logging list as well. It makes it significantly easier to manage updates as I can very quickly update 20+ logging lists on multiple strategy files by simply copy and pasting.
    NOTE: Only addresses in the 0x000 - 0x3FF range must be shadowed up above in the 2nd step of writing the patch code "INSERT Registers Payloads." I shadow all registers even upper memory which is directly accessible over the MBUS because it allows me to have a STANDARDIZED offset for any given payload.



    51 is the Query code in ASCii = Q
    0x6D is the sum of elements to poll, 0x6D = 109 bytes

    NOTE: 0x6D == 109 is the maximum bytes of data the QuarterHorse can poll per Query.

    0x01 0x01 0x1F 0x1F
    read 1 byte(s) from QHRam1 address 1F1F; this has an offset of 0 since it is the first address being queried
    keep in mind, the address requested will be polled in the order you query them
    If you've been paying attention your probably thinking right now, wtf decipha?? why 1F1F??, simple...
    With the addition of the SuperLogger all offsets get pushed out 1 byte, by omitting the first byte while
    polling with the non-superlogger, it keeps the same adx viable for use with and without!!!!!!

    Thus, 1F20 = offset byte 1

    More Examples of query commands:

    0x01 0x01 0x02 0xA8
    read 1 byte from ""RAM1"" address 02A8, this has an offset of byte 8 (which you don't need to know, but for more understanding, it's shadowed at 1xDD98)

    0x02 0x01 0x02 0xC0 = offset 9-10, since the prior address was only 1 byte, these byte will be placed in the next address, 1xDD99 to 1xDD9A

    0x01 0x01 0x03 0x6F = offset byte 1

    and so on and so fourth...
  • 8>Payloads - RAM ADDRESS LIST This is where the RAM Addresses are shadowed, reference the Payloads section for the list of RAM Addresses.
  • 9>Config Reply to Q request a reply and that patch code is complete, now its time to move on to the "Values" and add in the payloads, be mindful of your offsets and byte sizes!!!

    < 2 > Insert Register Payloads

    57 36 05 DF 9A 4E 00 78 00 ....CONTINUE ADDRESS LIST OF REGISTERS...

    0x57 is W in ASCii which is the QH command to WRITE
    0x36 is the # of RAM BYTES in HEX of the code to be copied to shadow memory ( 2 bytes taken per register )
    0x05 is the QH MEMORY SLOT to write the patch, see the table below for reference.

    QH Write Modes
    Note: 0x05 is to write up to a 256 bytes at a time, you can also write to 0x15 if you choose to write a patch for each byte!!!! Wayyy too time consuming to even be considered. Again, with 0x05 you can only write 256 bytes at a time, if your patch code is longer than that you'll need to split it up into more Send Commands.

    The QuarterHorse command mapping is listed in the table below for reference.
    QH MEMORY MAPPING
    01= QH Memory Bank 1
    05= ROM Bank 1
    15= ROM bank1 (1 byte)
    06= ROM Bank 8
    16= ROM bank8 (1 byte)
    07= Upper Memory (single bank tunes)
    0xYYHSB of address YYzz to write patch code
    0xZZLSB of address yyZZ to write patch code
    Note: single bank EEC-IV use bank 07 as the code goes at the top of RAM.

    Below is outdated



    0xFF00 is the actual ROM location where the ops list are to be written. for my patch, bank 8 is what we are going after. Keep in mind, this patch will most likely work for 99% of all 4 bank strategies but you MUST VERIFY this address contains null filler and no code. Note: Usually, only the inserting jump to patch code address would need to be updated to be within the main loop later down in "Step X - Write Patch Routine".

    These address are the RAM registers you wish to datalog, note that they are LSB first as thats how the Intel ECU accesses ROM.
    AC 02 // TOT
    00 00 // MARKER FOR END OF LIST
    00 00 // MARKET FOR END OF LIST

    IMPORTANT NOTE: make sure you do not shadow into RAM!!! RAM is from 1xE000 to 1xFFFF, shadowing in ram will corrupt the ecu and cause odd behavior!!! 1xE000 - 1xDF9A = 0x66 == 102 bytes, highly unlikely you'll ever have that many payloads in the 0x000 to 0x3FF range but noteworthy.

    Note: The addresses above are ONLY in the 0x000 to 0x3FF range where registers are inaccessible on the MBUS and must be shadowed. All addresses 0x400 and above will be read directly in Step 6

    < 3 > Reply to Q

    < 4 > Insert Jump to Patch Code / (BE - QHorse tab in XLS)

    For my code, I chose to 'splice' a jump to my new datalogging patch code routine at the tail end of the console routine (8xF66F), you can insert a jump wherever you wish or find most reasonable. I highly recommend using the console routine, it can very easily be found by searching for "= 2062" in your disassembly, you will see another scratch register being set to "= f0" directly beneath it for the rom pointers to be loaded. You want to go to the end of that routine where it 'returns' with the 0xF0 op-code. Usually just before that op-code there is a flag being set that is 3 bytes in length including the op-code. You can rewrite that line and jump to null filler at the end of bank 8 to execute the datalogging patch code. In RZASA, 8xFFDE is tail end of null filler at the end of bank 8. And 8xF66F is the console routine with the line that contains the code we will overwrite to jump to our new patch code routine.

    f66f: 71,ef,90 an2b R90,ef ATMR2_FLAG &= ef;
    ^^ must save the above and put it at the end of the shadowing patch routine so its executed.

    I will rewrite this with
    f66f: ef,6c,09 scall 8xFFDE
    so to do so we simply enter it in...

    0x57 0x03 0x06 0xF6 0x6F 0xEF 0x6C 0x09
    57 is W in ASCii = Write
    03 is the number of bytes to be written
    06 is the QH memory slot which corresponds with rom bank 8
    F6 6F is the ROM memory location 8xF66F to write the following code
    EF 6C 09 is the code to be written

    EF 6C 09 in intel disassembly is an 0xEF= call to +0x6C, so being that 8xF672 is the next location +0x6C = F6DE, and 0x09= +0x900; F6DE+0x900 = 8xFFDE is being called.

    < 5 > Reply to Q

    < 6 > Write Patch Routine

    I recommend using the console routine to execute your patch code. If you cannot do so for whatever reason, in mosy 4 bank defs, 8xFFDE is null filler at the very end of bank 8 where I recommend writing your patch code. This should work for all eec-v ecu's as code is not normally written to the very tail end of bank 8.

    57 20 06 FF DE A1 9A DF 42 8A 42 00 DF 13 A2 42 46 A2 46 44 65 00 C0 46 C2 46 44 65 02 00 42 27 E8 71 EF 90 F0

    57 is W=Write
    20 is the number of bytes to write (32 bytes == 0x20 in hex)
    06 is the QH memory slot == bank 8 from reference chart above,
    8xFFDE is where we are writing the following new subroutine we are creating for the patch code to execute within the rom's code
    0xA1 and onward is the actual patch code to write (0xA1 is the load word op-code in intel assembly)
    9A DF using Intel LSB == DF9A, this is the address where we wrote our register list of addresses to log

    Now you've reached the point where you need to actually start writing some patch code, or just reuse this.

    The following is the actual datalogging patch code in my decipha.adx file. Keep in mind, this can be reused on other strategies with only the shadowing address needing to be updated if changed.

  • Patch Code
  • This is the actual patch code written in Intel Assembly
    A1 9A DF 42 // r42 = DF9A // shadowing address
    8A 42 00 DF 13
    A2 42 46
    A2 46 44
    65 00 C0 46 // Offset Address 0xC000 is visible on the MBUS for shadowing
    C2 46 44
    65 02 00 42
    27 E8
    71 EF 90 // code overwritten in console routine to insert jump to new patch routine
    F0 // return back to console routine and execute normal ecu code flow

    Note: The datalogging offset 0xC000 is the ACTUAL QH RAM ADDRESS, there is no additional offset added and it IS NOT added to the Base Address!!!!
    Skip down to step 7
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------
    The following is for reference only
    CBAZA Patch Code
    The following is how the cbaza patch code functions for datalogging for referece, special thanks to derek fenwick for creating this and sharing.

    d6d5: a1,08,d7,42 ldw R42,d708 R42 = d708; // list of registers to shadow to mbus
    d6d9: a2,43,14 ldw R14,[R42++] R14 = [R42++]; // 14 = register address
    d6dc: a2,14,1c ldw R1c,[R14] R1c = [R14]; // 1c = registers value
    d6df: c3,15,00,0d,1c stw R1c,[R14+d00] [R14+d00] = R1c; // shadowed =register+offset = value
    d6e4: 8a,42,00 cmpw 0,[R42] // check 0 to stop loop
    d6e7: d7,f0 jne d6d9 if (0 != [R42]) goto d6d9; // loop until reached end of list
    d6e9: a1,22,20,14 ldw R14,2022 R14 = 2022; // lost console code follows
    d6ed: 3c,24,01 jb B4,R24,d6f1 if (!B4_R24) {
    d6f0: fb ei enable ints; }
    d6f1: a1,f0,00,18 ldw R18,f0 R18 = f0;
    d6f5: b3,01,20,20,1a ldb R1a,[2020] R1a = [2020];
    d6fa: a2,15,1c ldw R1c,[R14++] R1c = [R14++];
    d6fd: c2,19,1c stw R1c,[R18++] [R18++] = R1c;
    d700: e0,1a,f7 djnz R1a,d6fa R1a--;
    if (R1a != 0) goto d6fa;
    d703: 71,ef,24 an2b R24,ef R24 &= ef;
    d706: f0 ret return;

    d707: ff fill

    d708: ac,00 // reg 0xac = start of register list to shadow

    d70a: b0,00, // register 0xb0 = 2nd register to shadow
    ...
    d728: 00,00 // end of register list
    d72a: 00,00 // end of register list
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------

    SuperLogger Configuration

    ADX Header Config
    Connection Command:None
    Monitor Command:Harvest Data Macro
    Disconnect Command:None
    Pause Command:VersionFetch
    Unpause Command:VersionFetch
    SUPERLOGGER SEND COMMANDS
    TitleUnique IDDescriptionBaudHex CMD StringChecksumManually Sendable
    Set Accel Paramsetaccelparam00x41 0x01 0x2B 0x02Sum 0x6FN,N
    Set LogBut Active Startup Inactivesetlogbutactsu00x44 0x4F 0x61Sum 0xF4N,N
    DR: Configure PacketD_R_QH00x44 0x52 0xFF 0x00 0xC8 0x00 0x01 0x01 0x74 0x71Sum 0x44N,N
    readeepreqreadeepreq00x48 0x52 0x80 0x05 0x00Sum 0x1FN,N
    PT close lastbyteptlastbyteclos00x74None -
    SL DS Setup for PatchetcSLDS00x44 0x53 0x0A 0x0B 0x0C 0x0D 0x03 0xFE 0x00 0x51 0x4A 0x01 0x03 0x0D 0xB1 0x01 0x03 0x0D 0xB0 0x02 0x03 0x02 0x50 0x02 0x03 0x02 0x4E 0x02 0x03 0x02 0x5C 0x02 0x03 0x02 0x60 0x02 0x03 0x02 0x0A 0x02 0x03 0x02 0x0C 0x02 0x03 0x07 0xB4 0x02 0x03 0x07 0xB6 0x02 0x03 0x02 0x06 0x02 0x03 0x02 0x08 0x02 0x03 0x01 0x1C 0x02 0x03 0x01 0x1E 0x02 0x03 0x01 0x16 0x02 0x03 0x0D 0xAE 0x01 0x03 0x02 0x9F 0x01 0x03 0x02 0xBD 0x02 0x03 0x02 0x9A 0x02 0x03 0x0D 0xAA 0x01 0x03 0x0D 0xD0 0x02 0x03 0x01 0x26 0x01 0x03 0x02 0x11 0x02 0x03 0x01 0x8C 0x02 0x03 0x01 0x88 0x01 0x03 0x01 0x2F 0x01 0x03 0x01 0x66 0x02 0x03 0x01 0x5C 0x02 0x03 0x0D 0xB8 0x01 0x03 0x01 0x57 0x01 0x03 0x01 0x6B 0x02 0x03 0x01 0x54 0x01 0x03 0x0D 0xEE 0x01 0x03 0x0D 0xE7 0x01 0x03 0x0D 0x26 0x01 0x03 0x0D 0x27 0x01 0x03 0x0D 0xEC 0x01 0x03 0x0D 0xE9 0x01 0x03 0x0D 0x29 0x01 0x03 0x0D 0x28 0x01 0x03 0x0D 0x2E 0x01 0x03 0x0D 0xEF 0x02 0x03 0x02 0x52 0x02 0x03 0x02 0x58 0x02 0x03 0x02 0x56 0x01 0x03 0x02 0xDC 0x01 0x03 0x01 0x2C 0x02 0x03 0x01 0x68 0x02 0x03 0x0D 0xD2 0x01 0x03 0x02 0x88 0x01 0x03 0x01 0x93 0x02 0x03 0x01 0x8E 0x02 0x03 0x03 0x2A 0x02 0x03 0x03 0xA6 0x02 0x03 0x03 0x30 0x02 0x03 0x02 0x9C 0x02 0x03 0x01 0x6C 0x01 0x03 0x02 0x9E 0x02 0x03 0x01 0x24 0x02 0x03 0x07 0xE4 0x02 0x03 0x07 0xE6 0x02 0x03 0x07 0xE8 0x02 0x03 0x07 0xEA 0x02 0x00 0x01 0x03 0x2B 0x01 0x01 0x44 0x01 0x03 0xFF 0xFE 0x01 0x03 0x02 0x72 0x01 0x03 0x0D 0xC8 0x01 0x03 0x0D 0xC9 0x01 0x03 0x01 0x4D 0x01 0x03 0x01 0x48 0x02 0x03 0x01 0x14 0x02 0x03 0x01 0x12 0x02 0x03 0x01 0x80 0x01 0x03 0x0D 0xCB 0x24 0x4FSum 0x8BN,N
    SLSetupSimpleSetupSimple00x44 0x53 0x0A 0x0B 0x0C 0x0D 0x02 0x80 0x00 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x80 0x00 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01Sum 0xC7N,N
    Read Time Requestreadtimereq00x44 0x54 0x52 0x00 0x08Sum 0xF2n,n
    QH Patch Sendqhpatch00x57 0x3D 0x07 0x84 0xB2 0xA1 0xEE 0x84 0x42 0xA2 0x43 0x14 0xA2 0x14 0x1C 0xC3 0x15 0x00 0x0D 0x1C 0x8A 0x42 0x00 0xD7 0xF0 0xA1 0x22 0x20 0x14 0x3C 0x24 0x01 0xFB 0xA1 0xF0 0x00 0x18 0xB3 0x01 0x20 0x20 0x1A 0xA2 0x15 0x1C 0xC2 0x19 0x1C 0xE0 0x1A 0xF7 0x71 0xEF 0x24 0xA3 0x01 0xFC 0xFF 0x42 0xC3 0x01 0xFE 0xFF 0x42 0xF0 0x00Sum 0xA2n,n
    QH Patch Send 2patch200x57 0x21 0x07 0x84 0xEE 0xB0 0x00 0xAE 0x00 0xAA 0x00 0xD0 0x00 0xB8 0x00 0xEE 0x00 0xE6 0x00 0x26 0x00 0xEC 0x00 0xE8 0x00 0x28 0x00 0x2E 0x00 0xD2 0x00 0xC8 0x00 0xCA 0x00 0x00 0x00 0x00Sum 0x09n,n
    QH Config Singleqhsingleconfig00x51 0x4A 0x01 0x03 0x0D 0xB1 0x01 0x03 0x0D 0xB0 0x02 0x03 0x02 0x50 0x02 0x03 0x02 0x4E 0x02 0x03 0x02 0x5C 0x02 0x03 0x02 0x60 0x02 0x03 0x02 0x0A 0x02 0x03 0x02 0x0C 0x02 0x03 0x07 0xB4 0x02 0x03 0x07 0xB6 0x02 0x03 0x02 0x06 0x02 0x03 0x02 0x08 0x02 0x03 0x01 0x1C 0x02 0x03 0x01 0x1E 0x02 0x03 0x01 0x16 0x02 0x03 0x0D 0xAE 0x01 0x03 0x02 0x9F 0x01 0x03 0x02 0xBD 0x02 0x03 0x02 0x9A 0x02 0x03 0x0D 0xAA 0x01 0x03 0x0D 0xD0 0x02 0x03 0x01 0x26 0x01 0x03 0x02 0x11 0x02 0x03 0x01 0x8C 0x02 0x03 0x01 0x88 0x01 0x03 0x01 0x2F 0x01 0x03 0x01 0x66 0x02 0x03 0x01 0x5C 0x02 0x03 0x0D 0xB8 0x01 0x03 0x01 0x57 0x01 0x03 0x01 0x6B 0x02 0x03 0x01 0x54 0x01 0x03 0x0D 0xEE 0x01 0x03 0x0D 0xE7 0x01 0x03 0x0D 0x26 0x01 0x03 0x0D 0x27 0x01 0x03 0x0D 0xEC 0x01 0x03 0x0D 0xE9 0x01 0x03 0x0D 0x29 0x01 0x03 0x0D 0x28 0x01 0x03 0x0D 0x2E 0x01 0x03 0x0D 0xEF 0x02 0x03 0x02 0x52 0x02 0x03 0x02 0x58 0x02 0x03 0x02 0x56 0x01 0x03 0x02 0xDC 0x01 0x03 0x01 0x2C 0x02 0x03 0x01 0x68 0x02 0x03 0x0D 0xD2 0x01 0x03 0x02 0x88 0x01 0x03 0x01 0x93 0x02 0x03 0x01 0x8E 0x02 0x03 0x03 0x2A 0x02 0x03 0x03 0xA6 0x02 0x03 0x03 0x30 0x02 0x03 0x02 0x9C 0x02 0x03 0x01 0x6C 0x01 0x03 0x02 0x9E 0x02 0x03 0x01 0x24 0x02 0x03 0x07 0xE4 0x02 0x03 0x07 0xE6 0x02 0x03 0x07 0xE8 0x02 0x03 0x07 0xEA 0x01 0x03 0x01 0x44 0x01 0x03 0xFF 0xFE 0x01 0x03 0x02 0x72 0x01 0x03 0x0D 0xC8 0x01 0x03 0x0D 0xC9 0x01 0x03 0x01 0x4D 0x01 0x03 0x01 0x48 0x02 0x03 0x01 0x14 0x02 0x03 0x01 0x12 0x02 0x03 0x01 0x80 0x01 0x03 0x0D 0xCBSum 0x24n,n
    QH Config Single SimplifiedQHSIMPLE00x51 0x4A 0x01 0x03 0x0D 0xB1 0x01 0x03 0x0D 0xB0 0x02 0x03 0x02 0x50 0x02 0x03 0x02 0x4E 0x02 0x03 0x02 0x5C 0x02 0x03 0x02 0x60 0x02 0x03 0x02 0x0A 0x02 0x03 0x02 0x0C 0x02 0x03 0x07 0xB4 0x02 0x03 0x07 0xB6 0x02 0x03 0x02 0x06 0x02 0x03 0x02 0x08 0x02 0x03 0x01 0x1C 0x02 0x03 0x01 0x1E 0x02 0x03 0x01 0x16 0x02 0x03 0x0D 0xAE 0x01 0x03 0x02 0x9F 0x01 0x03 0x02 0xBD 0x02 0x03 0x02 0x9A 0x02 0x03 0x0D 0xAA 0x01 0x03 0x0D 0xD0 0x02 0x03 0x01 0x26 0x01 0x03 0x02 0x11 0x02 0x03 0x01 0x8C 0x02 0x03 0x01 0x88 0x01 0x03 0x01 0x2F 0x01 0x03 0x01 0x66 0x02 0x03 0x01 0x5C 0x02 0x03 0x0D 0xB8 0x01 0x03 0x01 0x57 0x01 0x03 0x01 0x6B 0x02 0x03 0x01 0x54 0x01 0x03 0x0D 0xEE 0x01 0x03 0x0D 0xE7 0x01 0x03 0x0D 0x26 0x01 0x03 0x0D 0x27 0x01 0x03 0x0D 0xEC 0x01 0x03 0x0D 0xE9 0x01 0x03 0x0D 0x29 0x01 0x03 0x0D 0x28 0x01 0x03 0x0D 0x2E 0x01 0x03 0x0D 0xEF 0x02 0x03 0x02 0x52 0x02 0x03 0x02 0x58 0x02 0x03 0x02 0x56 0x01 0x03 0x02 0xDC 0x01 0x03 0x01 0x2C 0x02 0x03 0x01 0x68 0x02 0x03 0x0D 0xD2 0x01 0x03 0x02 0x88 0x01 0x03 0x01 0x93 0x02 0x03 0x01 0x8E 0x02 0x03 0x03 0x2A 0x02 0x03 0x03 0xA6 0x02 0x03 0x03 0x30 0x02 0x03 0x02 0x9C 0x02 0x03 0x01 0x6C 0x01 0x03 0x02 0x9E 0x02 0x03 0x01 0x24 0x02 0x03 0x07 0xE4 0x02 0x03 0x07 0xE6 0x02 0x03 0x07 0xE8 0x02 0x03 0x07 0xEA 0x01 0x03 0x01 0x44 0x01 0x03 0xFF 0xFE 0x01 0x03 0x02 0x72 0x01 0x03 0x0D 0xC8 0x01 0x03 0x0D 0xC9 0x01 0x03 0x01 0x4D 0x01 0x03 0x01 0x48 0x02 0x03 0x01 0x14 0x02 0x03 0x01 0x12 0x02 0x03 0x01 0x80 0x01 0x03 0x0D 0xCBSum 0x24n,n
    Passthrough Beginptbegin00x70 0x70Sum 0xE0n,n
    d: Query for packetQUERY00x64None -n,n
    DOLI: Request Onboard StatusREQSTATUS00x44 0x4F 0x4C 0x49Sum 0x28n,n
    VV: Request VersionVER_REQ00x56 0x56None -n,n
    DOCYsendDOCYsend00x44 0x4F 0x43 0x59Sum 0x2Fn,n
    DOCNsendDOCNsend00x44 0x4F 0x43 0x4ESum 0x24n,n
    DOEsendDOEsend00x44 0x4F 0x45Sum 0xD8n,n
    DOLYsendDOLYSEND00x44 0x4F 0x4C 0x59Sum 0x38n,n
    DOLNsendDOLNSEND00x44 0x4F 0x4C 0x4ESum 0x2Dn,n
    DOLysendDOLySEND00x44 0x4F 0x4C 0x79Sum 0x58n,n
    DOLnsendDOLnSEND00x44 0x4F 0x4C 0x6ESum 0x4Dn,n
    DLsendDLSENDThis should set things up to log no ADC, do a 10:1 skip ratio for logging, and no conditional windows. So every 10th frame will get stored.00x44 0x4C 0x00 0x00 0x00 0x00 0x00Sum 0x90Y,Y
    Exit Passthroughexitpass00x45 0x78 0x69None -n,n
    SUPERLOGGER MACRO COMMANDS
    TitleUnique IDDescriptionManually SendableMacros Repeat CountCommandEntry Repeat CountBOF,BOS
    AccelMacroaccelmacroY,Y1Set Accel Param
    Okay Response1
    Initialize SettingsInitY,Y1QH Config Macro
    Configure SL for Payload
    DL: Configure Onboad Logging Structure
    DOCN: Turn Compression Off
    DOLN: Disable Onboard Logging
    DOLn: Disable Background Polling1n,n
    Set Logbut ActiveMacsetlogbutactmaY,Y1Set LogBut Active Startup Inactive
    Okay Response1n,n
    Configure SL for PayloadCONFIGY,Y1Pause for Data Rate
    DR: Configure Packet
    Okay Response1n,n
    Read EEPreadeepmacY,Y1readeepreq
    eepreadrec1n,n
    SL SetupstringSLSTRINGY,Y1SL DS Setup for Patchetc
    Okay Response1n,n
    Passthrough StartptstartY,Y1Passthrough Begin
    Okay Response1n,n
    QH Config MacroqhconfigmacroY,Y1Passthrough Start
    VersionFetch
    QH Patch Send
    Okay Response
    QH Patch Send 2
    Okay Response
    QH Config Single
    1 Second Pause
    Okay Reponse
    Passthrough End / Version Fetch1n,n
    Passthrough End / Version FetchDISCONY,Y1Pause for Data Rate
    Exit Passthrough
    Bytes for Drain
    PT close lastbyte
    VV: Version Response1n,n
    QH Config Basicqhconfig basicY,Y1QH Config Single
    1 second Pause
    Okay Response
    VersionFetch1n,n
    SL Setup Simple MacroslsetmacsimpleY,Y1SLSetupSimple
    Okay Response1n,n
    ReadTime MacroreadmacY,Y1Read Time Request
    ReadTimeResp1n,n
    Pass-Patch-ReturnpasspatchY,Y1Passthrough Start
    VersionFetch
    QH Patch Send
    QH Patch Send 2
    Okay Response
    VersionFetch
    Passthorugh End / Version Fetch1n,n
    Poll Status MacroPOLLSTATUSY,Y1DOLI: Request Onboard Status
    DOLI: Retrieve Status1n,n
    DOE: Erase DataFlash Onboard MemoryERASE_DFY,Y1DOEsend
    1 Second Pause
    1 Second Pause
    1 Second Pause
    1 Second Pause
    1 Second Pause
    1 Second Pause
    1 Second Pause
    1 Second Pause
    1 Second Pause
    1 Second Pause
    1 Second Pause
    okay Response LongErase1n,n
    Monitor MacroMONITORn,n1Harvest Data Macro
    Poll Status Macro1n,n
    Harvest Data MacroHARVESTY,Y1d: Query for packet
    d: Harvest Packet
    Okay Response
    Pause for Data Rate1n,n
    HarvestBothharvestbothn,n1d: Harvest Packet
    d: Harvest Extras1n,n
    VersionFetchverfetchY,Y1VV: Request Version
    VV: Version Response1n,n
    DOCY: Turn Compression OnCOMPRESS_YY,Y1DOCYsend
    Okay Response1n,n
    DOCN: Turn Compression OffCOMPRESS_NY,Y1DOCNsend
    Okay Response1n,n
    DOLY: Enable Onboard LoggingONBOARD_YY,Y1DOLYsend
    Okay Response1n,n
    DOLN: Disable Onboard LoggingONBOARD_NY,Y1DOLNsend
    Okay Response1n,n
    DOLy: Enable Background PollingPOLLING_yY,Y1DOLysend
    Okay Response1n,n
    DOLn: Disable Background PollingPOLLING_nY,Y1DOLnsend
    Okay Response1n,n
    DL: Configure Onboard Logging StructureCONFIGURE_LOGSY,Y1DLsend
    Okay Response1n,n
    SUPERLOGGER LISTEN PACKET COMMANDS
    TitleUnique IDDescriptionBaudProcess DataPacket TypeHeaderFooterTimeoutBody SizePayload OffsetPayload Size
    eepreadreceepreadrec0NStatic40040000
    Bytes for DrainDrainbytes0nStatic20303
    ReadTimeRespReadTimeResp0YStatic40010010
    d: Harvest PacketPACKET0YStatic4001590159
    d: Harvest Extrasextraharv0YStatic40041041
    DOLI: Retrieve StatusGETSTATUS0YStatic40017017
    VV: Version ResponseVERSION_RESP0nStatic400202
    Okay ResponseOK0YStatic1000101
    Okay Response LongEraseOKLONG0NStatic100000101
    SUPERLOGGER SILENCE/TIMEOUT COMMANDS
    TitleUnique IDDescriptionBaudSilence LengthTimeout
    Pause for Data RateWAITThis timeout mS value can be adjusted to 100 for 10 samples per second.005
    1 Second Pause1SEC00800

    Important Ford Variables

    j1979_01_06SCP Lambse1 byte
    j1979_01_08SCP Lambse2 byte
    R63"new_data"