For the past couple years I've been trying to get the stock 2020 USDM ecu to work on the 2019 USDM, as it contains a variety of tuning changes that Subaru made in the car's final year (that I
suspect result from side-by-side bench tests of the FA20 while finalizing and tuning the FA24) and shipped in both U00B/U01A and V00C/V01D. I
finally pinned down the last obstacle today: it turns out that canbus CAN id 0x3D1 changed to 0x3D7, so patching @cd10- 00 00 03
D7 FF F8 to ...
D1 ... resolves the persistent limp-mode CEL U0155 that's been my obstacle for the past three years.
I looked through the history and 0x3D1 was introduced for the 2015 model year, and seems to have been used consistently from D0xx through U0xx. Prior to that, it looks like it was 0x111. And when I looked at the code changes, I think it'll be fine for whatever's parsing it on the other end: approximately, before it sent xx yy zz 00 00 ..., now it sends xx yy zz
ww 00 ..., and the way it calculates the existing values is unchanged.
But.. what is this CAN id? I haven't been able to identify anything that explains what cares about it. The 3D1 code sends along the Ambient Sensor Temperature, but I don't know which module in the car is consuming it. I
suspect it's the instrument cluster, but there aren't any documented changes in 2020 MY for that I can find. Perhaps something changed in the HVAC system.
Anyways, with that and the usual ECU ID hacks, I think I've finally successfully backported 2020 to my 2019 (and imported the much-improved DI/PI tuning from S20G, too). It's been doing fine in drive tests with U0155 disabled and now that I don't need that override, I'm finally able to move forward from U01A (JP) to V00C (US) - and since only that single byte change was required, it should work on a much wider range of our cars than "just 2020" now.
I'd still like to understand CAN 0x111 / 0x3D1 / 0x3D7, but duly noted for anyone else who's interested in such things. The same exact patch should work on both V00C (US MT) and V01D (US AT); for folks outside of evap regions, U01A (JP MT) and U00B (JP AT) use 0x3D1 and no patch is required; they're all in
the stock ROMs thread. (Yes, I
could just calid hack K00G; instead, I'm learning how the autotune systems works, how to inspect the LTFT / FLKC learning progress with the car parked, etc.)
ps. V00C = ZA1JV00C = ZA1JV00C00G, I have no idea why their naming scheme changed.
EDIT: Changed "pre-2020" to "pre-2020 US" in title. If you're trying to run V00C00G, you're in the US, or else you don't need the US-specific smog code and so you should use U01A which doesn't have this problem anyways. This should only affect those trying to upgrade MY17/18/19 US vehicles to MY20 US software.
EDIT: RomRaider XML def to create a GUI on/off switch for this:
Code:
<table type="Switch" name="U0155 fix for 2017-2019 USDM" category="Model Year Selection - Prevents U0155" sizey="2" storageaddress="cd12">
<description>In V00C00G 2020 USDM, the instrument cluster and HVAC cluster expect ambient temperature to be sent on CAN id 0x3D7; in prior model years, this data was sent on 0x3D1. Enabling this override changes this 2020 USDM ECU to interact with 0x3D1 rather than 0x3D7; without it, pre-2020 gen1 Kouki facelift cars will code CEL U0155. (Regardless, this ECU is not compatible with gen1 pre-facelift Zenki.)</description>
<state name="Override CAN id for pre-2020 gen1 Kouki facelift (0x3D1)" data="03 d1" /><!-- V00C -->
<state name="Use unmodified OEM CAN id for MY20 USDM (0x3D7)" data="03 d7" /><!-- V00C -->
</table>