6.1. EXCHANGE_ID message handling

The ASAP1b standard for CCP defines the EXCHANGE_ID message as follows:

Table 6.3. Original EXCHANGE_ID message

PositionTypeDescription
0byteCommand Code = EXCHANGE_ID 0x17
1byteCommand Counter = CTR
2...bytesCCP master device ID information (optional and implementation specific)

OpenECU will interpret the master device ID information to determine how to setup the Memory Transfer Address (MTA0) for later uploading.

Table 6.4. Modified EXCHANGE_ID message

PositionTypeDescription
0byteCommand Code = EXCHANGE_ID 0x17
1byteCommand Counter = CTR
2..4bytesIgnored
5..6byte Manufacturing data key See Table 6.6, “EXCHANGE_ID manufacturing data key values and binary format”
7bytes Selection See Table 6.5, “EXCHANGE_ID selection values”

The message is processed by the ECU by inspecting the selection in position 7:

Table 6.5. EXCHANGE_ID selection values

ValueDescription
1 If the ECU contains manufacturing data and the manufacturing data key in position 5..6 is valid for the ECU, then set the MTA0 to the address of the manufacturing data in binary format. Valid key values and the structure of the data is defined in Table 6.6, “EXCHANGE_ID manufacturing data key values and binary format”. Otherwise, leave MTA0 unmodified and set an appropriate error code in the response message. Note that some older M220, M250, M460 and M461 variants do not contain manufacturing data.
2 If running in application mode then set MTA0 to null terminated ASCII string defined by the application in the put_Identification block. Otherwise, sets MTA0 as if the EXCHANGE_ID selection value were zero.
any other value Set MTA0 to the address of a null terminated ASCII string of the ECU family. The string has the form “OpenECU-[name]”. For example, “OpenECU-M220”.

Position 5 (MSB) and 6 (LSB) is interpreted as the manufacturing data identifier:

Table 6.6. EXCHANGE_ID manufacturing data key values and binary format

Position [a] Description [b]
Key = 1, Serial number
0..3Serial number
Key = 2, Date of manufacture The date is composed as (shift) dd:mm:yyyy, where the shift identifies the team involved in the manufacturing process.
0The team shift at time of manufacture
1The day of the month of manufacture, range [1, 31]
2The month of manufacture, range [1, 12]
3..4The year of manufacture, range [2010, ...]
Key = 3, Engineering part number The engineering part number matches the pattern: prefix letter engineering-part-number. For instance, the engineering part number assigned to the M250-000 is '01T068165', where '01' represents the prefix, 'T' represents the letter and '068165' represents the engineering part number.
0The part number prefix, range [0, 99]
1The part number letter, represented in ASCII, range [A-Z]
2..5The engineering part number, range [0, 999999]
Key = 4, ECU mod and issue numbers The issue level represents a specific design of PCB. Changes to the issue level may have an effect on the software version. The modification level represents what changes were performed to the PCB after manufacturing to correct issue level design mistakes. Changes to the modification level should not have an effect on the software version.
0The PCB issue level, range [0, 255]
1The PCB modification level, range [0, 255]
Key = 5, Factory part number For instance, the factory part number could be '450FT1034', where '450' represents the part_num[0], 'F' represents the letter[0], 'T' represents the letter[1], and '1034' represents the part_num[1].
0..1First number of identifier, range [0, 65535]
2..3Second number of identifier, range [0, 65535]
4..5Characters used to separate identifier numbers, represented in ASCII, range [A-Z]
Key = 6, Factory part number build type
0..1The factory part number build type, represented in ASCII, range [A-Z]

[a] All data is arranged in MSB format.

[b] Not all keys are available on all ECUs.