TomFLV/5eat-tcu-reverse-engineering
GitHub: TomFLV/5eat-tcu-reverse-engineering
逆向工程斯巴鲁5EAT变速箱控制单元固件,提供带有真实物理单位换算的RomRaider调校定义和开箱即用的编辑工具。
Stars: 4 | Forks: 0
# Subaru 5EAT TCU — 逆向工程与 RomRaider 定义
Subaru 5EAT 将其换挡点、管路压力和离合器正时保存在一个此前无人发布过调校定义的变速箱控制器中。这就是拆解它的研究成果。
### ▶ [下载 Windows 应用程序](../../releases/latest)
解压文件夹,运行 `RomRaider-TCU.exe`,通过 `File -> Open` 打开 `app\roms` 中的一个 ROM。
程序已内置 Java runtime、定义文件和十一个 ROM 镜像 —— 无需安装,无需配置。
已经在使用 RomRaider 了吗?请将其指向 [`definitions/5eat_tcu_romraider_defs.xml`](definitions/) 即可。需要 1.0.0 及以上版本;0.8.2 无法加载 3D 表格。
## 换挡图谱
`Transmission - Shift Schedule → Shift Map` —— 在一个表中包含所有八个换挡点:以 km/h 为单位的车辆速度,对应油门踏板角度,每次换挡事件占一行。
调高某个值可延迟换挡,调低则可提前换挡。升挡行在前,降挡行在后;成对数据之间的差值是防止变速箱频繁换挡的迟滞量,因此除非你有意为之,否则请同时调整它们。
显示为 `-` 的单元格是不可编辑的 —— 该曲线在该踏板位置没有顶点,因此没有可修改的字节。与其凭空捏造,不如将其留空。

*图表由 [rimwall](https://github.com/rimwall) 提供,并非本人所作 —— 单位的验证正是基于此图表。*
## 固件
已解析出十一个镜像,均为 Renesas M32R,且均经过校验和验证。十六个镜像的反编译器输出位于 [`decompiled/`](decompiled/)。
| Cal ID | ROM ID | Size | 车型 / 备注 |
|---|---|---|---|
| `MB431M` | `91D1206000` | 384K | JDM |
| `MB436G` | `91FE216300` | 512K | USDM,早期 2005 款 Outback XT |
| `MB436T` | `91D0207500` | 384K | JDM |
| `MB436P` | `91F0217100` | 384K | USDM Outback 03 |
| `MB4434` | `ABD1A03100` | 384K | JDM Legacy GT 2005 |
| `MB4373` | `91D1207900` | 384K | Hitachi 31711AG589 |
| `MB440X` | `AAD1A07100` | 384K | Hitachi 31711AJ782 |
| `MB5300` | `ABD1207000` | 384K | 06 款 JDM Legacy GT |
| `MB558D20` | `ACD1A06000` | 512K | JDM 2007 |
| `MB558D01` | `ACD1207000` | 512K | LGT06 JDM |
| `MB562EH` | `ADE0236000` | 512K | — |
RomRaider 会匹配位于 `0x8008` 处的 Cal ID,并自动加载正确的定义。
## 已确认的单位
每一项都通过两种独立方式进行了验证 —— 既有外部参考,也有固件自身的算法。
| 物理量 | 换算方式 | 验证方法 |
|---|---|---|
| 齿轮比 | `raw / 1024` | 3.540 / 2.264 / 1.471 / 1.000 / 0.834 —— 与公布的齿轮比误差在 0.0007 以内 |
| 发动机转速 | `raw / 8` | 整齐的 640 RPM 断点。**上限为 8191 RPM** —— 这是 `uint16` 的极限,而非显示选项 |
| 温度 | `raw − 40` °C | 标准的 −40…+215 °C 汽车编码 |
| 车速 | 直接对应 km/h | 出厂换挡图表 |
| 油门角度 | `raw × 100/255` | 换挡图表,以及 CAN `0x412` 的第 0 字节 |
| **管路压力** | **直接对应 kPa** | 手册标明在油门全开时为 1370 kPa;该数值存在于所有十一个镜像的表格中 |
其他已确认内容:**校验和**(32 位大端序二进制补码加法,双重存储于 `0x8000`/`0x8004`,遵循两种由工具检测而非假设的区域约定),以及完全解码的 **shift schedule**。
关于压力的结果值得说明一下:早期的四次尝试失败了,因为它们都在 ROM 中进行搜索。ROM 里根本不存在所谓的换算 —— 固件内部本来就以 kPa 为单位进行处理,而答案自始至终都在维修手册中。
## 未解之谜
**液力变矩器锁止 —— 未找到。** `0x018060` 处的一个成对曲线块看起来很像(成对意味着应用/释放,并且它位于 5 挡索引处),但它实际上被换挡决策代码消耗了,因此并非锁止控制。手册中只有一段定性的描述,没有数据。没有为此添加任何定义,因为一个满是换挡阈值的“锁止”分类还不如没有。
**82 条阈值曲线中有 74 条未映射。** `scan_threshold_curves.py` 找到了 82 个具有完整换挡曲线特征的数组;但定义中只包含了 8 个。其余的属于按模式和按条件划分的换挡图谱 —— 该变速箱有多个此类图谱,而工具目前只显示了一个。这是最大的未解线索。参见 [FINDINGS.md](FINDINGS.md) §15。
**未找到 DTC 表。** 此前声称存放 DTC 表的地址实际上是指令流。DTC 通过 CAN `0x412` 的第 3-4 字节发出,格式为 2 位索引加 14 位代码;要找到存储的表,意味着必须定位到构建该消息的代码。
部分表格仍然显示为 `raw`。这些是其物理量尚未确定的项。使用错误的单位看起来会像已确认一样;而诚实的 `raw` 则不会。
## 仓库
| 路径 | 内容 |
|---|---|
| [`romraider-5eat/`](romraider-5eat/) | Windows 应用程序:补丁、构建脚本。**GPL-2.0**,非 MIT |
| [`definitions/`](definitions/) | RomRaider 定义文件 |
| [`tools/`](tools/) | 生成器、验证器、校验和、扫描器 —— 参见 [README](tools/README.md) |
| [`decompiled/`](decompiled/) | Ghidra 输出,包含十六个镜像 |
| [`rom/`](rom/) | ROM 镜像 |
| [`docs/`](docs/) | [ROM 详情](docs/ROM-DETAILS.md) · [技术说明](docs/TECHNICAL-NOTES.md) · [手动设置](docs/ROMRAIDER-SETUP.md) |
| [`FINDINGS.md`](FINDINGS.md) | 完整的研究日志,按时间顺序排列,包括走过的弯路。篇幅较长 |
### 前期与同期工作
- **[FastECU](https://github.com/miikasyvanen/FastECU)** (Miika Syvänen) 以及
**[rimwall's OEM fork](https://github.com/rimwall/fastecu-oem)** —— 使得读写这些 TCU 成为可能的工具。其
`checksum_tcu_subaru_hitachi_m32r_can` 模块独立印证了
校验和算法。
- **[FreeSSM](https://github.com/Comer352L/FreeSSM)** (Comer352L) —— 诊断程序,
以及增加 TCU 调整支持的分支。
- **[ghidra-m32r](https://github.com/ripnet/ghidra-m32r)** (ripnet) —— Ghidra
处理器模块,没有它就不会有这些反汇编代码。
- **[RomRaider](https://github.com/RomRaider/RomRaider)** —— 编辑器本身。
- 直接引用的论坛发现:CAN ID 的含义(`0x412` 代表发动机扭矩,`0x514`
代表换挡事件),MCU 识别,以及关于挡位变化由踏板角度/车速曲线控制的观察结果 —— 这正是最初指向换挡表的线索。
齿轮比、管路压力目标值和 ATF 温度来源于 Subaru 原厂
维修手册(2004 款 Legacy)。该文档版权归 Subaru 所有,在此**并未**被重新分发。
### 本人成果归属
[`tools/`](tools/) 中的工具、[`definitions/`](definitions/) 中的定义,以及 [`docs/`](docs/) 中的书面分析 —— 包括表格映射、单位推导、校验和区域检测、多固件移植。这些,且仅有这些,才是 MIT 许可证所涵盖的内容。
## 法律声明
ROM 镜像属于 Subaru/Fuji Heavy Industries 固件,此处收录仅为了实现互操作性和维修研究。非本人作品,不主张任何权利。[`decompiled/`](decompiled/) 中的反编译器输出衍生自这些固件,因此具有相同的法律状态。
我个人的贡献基于 MIT 许可证发布 —— 参见 [LICENSE](LICENSE)。
**[`romraider-5eat/`](romraider-5eat/) 采用 GPL-2.0,而非 MIT。** 这些补丁是针对 RomRaider 的 diff,因此它们是 GPL-2.0 程序的衍生作品,基于它们构建的打包程序也是如此。如果你重新分发它,GPL-2.0 要求你提供相应的源代码;这些补丁加上在 `build-standalone.sh` 中固定的上游修订版本即满足该要求。参见
[`romraider-5eat/LICENSE`](romraider-5eat/LICENSE)。
**刷入修改过的变速箱控制器可能会损坏变速箱。** 本项目属于静态分析;几乎没有在运行中的车辆上进行过验证。任何标记为实验性或仅供专家使用的项,都确确实实具有极高的风险。使用风险自负。
— TomFLV
标签:ECU调校, JS文件枚举, Renesas M32R, RomRaider, 云资产清单, 嵌入式系统, 汽车电子, 逆向工具, 逆向工程