Terrano 0281001550

Nissan Terrano II 2.7 TDi · 0281001550

Bosch 0281001550EDC MSA 15.5Nissan 23710-7F405SW 1037356022CPU C167, mask ROMflash 256 KB

Code-level analysis of the stock dump of the earlier 2.7 TDi (TD27ETi) ECU. 40,657 instructions decoded with the C166 disassembler, about 450 functions, a process table of 60 entries and 58 calibration maps (77 references) tied to the functions that read them and to the variables on their axes.

Same generation as the Frontera

0281001791 ≈ 0281001550

Same hardware and memory layout as the Frontera X22DTH ECU. Two flash chips, C167 with mask ROM, code at 0x10000–0x37FFF, calibration at 0x38000–0x3FFFF through DPP0/DPP1 = 0x0E/0x0F, the same task prologue and the same ROM routine addresses (map interpolation 00:20D6 / 00:20AC, task exit 00:07B4). Frontera tools and findings carry over; map addresses do not.

ROM 26FC

The pump metering controller is in ROM. The flash computes the metering setpoint FC56 and passes it straight to CALLS 00:26FC. There is no PI controller and no PWM/CAPCOM2 write in the flash, so the controller gains cannot be changed. The whole fuel chain up to the setpoint is in the flash.

checksum

Checksum algorithm is the same as on the Frontera. One block per dataset (0x00B80–0x07FFB → 0x07FFC, 0x38B80–0x3FFFB → 0x3FFFC); both match on the stock dump. The map editor supports this ECU and recalculates both.

68 mg

Hard fuel limit in the parameter block. It limits fuel independently of every map ECM Titanium lists; above 68 mg it has to be raised too.

Memory file offset = CPU address

AddressesContents
00000–0FFFFThe CPU sees its mask ROM here; calls 00:xxxx go there. In the file, 0x00000–0x07FFF holds a second dataset (Nissan 7F406).
10000–13FFFLoader and services. 19-entry vector table at 0x10120 pointing into ROM (timers, ADC, serial port, reset).
10000–37FFFCode. Dispatcher with 81 entries at 0x2F1A0 (looks like K-line diagnostics).
38000–3FFFFWorking dataset (Nissan 7F405). Process table at 0x383F6 (60 × 10 bytes), map pointer table at 0x38F04. Checksum at 0x3FFFC: the same algorithm as on the Frontera, recalculated by the map editor.

Two datasets

The code works with the dataset at 0x38000 (DPP0 = 0x0E, DPP1 = 0x0F at startup). The copy at 0x00000–0x07FFF has the same layout and differs in 812 bytes, mostly the “fuel → metering” map and two rpm × fuel maps. No code switches to it and the CPU sees ROM at these addresses, so it is most likely unused. Addresses of the same map in the two sets differ by 0x38000; ECM Titanium shows the 0x0xxxx addresses and writes to both sets.

Fuel chain pedal → limiters → metering setpoint

#34
0x20166

Driver demand = f(rpm, pedal C1D0).

#25
0x1D522

Fuel ceiling: rpm limiter (atm. pressure × rpm), smoke limiter with its input , start fuel and 13 more maps.

→ FCBA fuel ceiling
#30
0x1E26A

Fuel coordinator: combines demand and limits; reads 8 maps at 0x3919A–0x39630.

0x2A03E

Final and injection quantity.

→ FC36 final fuel
#24
0x1709A

Fuel temperature correction .

#29
0x14A26

Metering setpoint: converts fuel and rpm into the pump metering position.

→ FC56 → ROM 26FC → pump

Process numbers and functions were found in this firmware directly. Their roles were identified by aligning the code with a later Terrano firmware in which the chain was traced line by line. Variables: rpm FC3A (axis ID E08A), final fuel FC36, ceiling FCBA, pedal C1D0, atmospheric pressure C234, setpoint FC56.

All maps

Maps the code actually reads through the ROM interpolation routines. Confidence of the label: H — role confirmed by code and ECM Titanium, M — by code, L — a guess; maps without a label have no confirmed role yet. Click a row to see the map description.

HeaderDataSizeRoleConf.Function

Tuning notes

What the dump does not contain