The ASAP1b standard for CCP defines the EXCHANGE_ID message as follows:
Table 6.3. Original EXCHANGE_ID message
Position | Type | Description |
---|---|---|
0 | byte | Command Code = EXCHANGE_ID 0x17 |
1 | byte | Command Counter = CTR |
2... | bytes | CCP 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
Position | Type | Description |
---|---|---|
0 | byte | Command Code = EXCHANGE_ID 0x17 |
1 | byte | Command Counter = CTR |
2..4 | bytes | Ignored |
5..6 | byte | Manufacturing data key See Table 6.6, “EXCHANGE_ID manufacturing data key values and binary format” |
7 | bytes | 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
Value | Description |
---|---|
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..3 | Serial 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. | |
0 | The team shift at time of manufacture |
1 | The day of the month of manufacture, range [1, 31] |
2 | The month of manufacture, range [1, 12] |
3..4 | The 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. | |
0 | The part number prefix, range [0, 99] |
1 | The part number letter, represented in ASCII, range [A-Z] |
2..5 | The 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. | |
0 | The PCB issue level, range [0, 255] |
1 | The 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..1 | First number of identifier, range [0, 65535] |
2..3 | Second number of identifier, range [0, 65535] |
4..5 | Characters used to separate identifier numbers, represented in ASCII, range [A-Z] |
Key = 6, Factory part number build type | |
0..1 | The 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. |