楼主:
Pellaeon (秋风孤剑李鸿章)
2026-08-17 04:50:52文长慎入
一、前言
HFM(Hot-Film Mass热膜式空气流量计),正式名称是HFM-SFI
全名是 HFM Sequential Multiport Fuel Injection/Ignition System
大多用在90年代的车子 例如我的1993年 W124 300E 2.8
现代车子常用OBD-II接口 类似一种通用的语言
HFM数据没办法直接用OBD-II读取(头不一样、协定也不一样)
最佳的沟通方式是透过HHT原厂诊断电脑
现在的通用车用诊断电脑也可以 但就差了点
也少了一些coding的功能
但我知道HFM系统的ECU已经具备完整的自我诊断与引擎管理功能
可惜一直都没有办法去读取
最近开始用CODEX来Vibe Coding 想到多年前我曾经看到一个网站
http://www.hfmscan.com/en/index.html
由一位应该是俄国人的W124车主研发出了HFM读取软件
软件有免费功能(可读/清故障码)跟付费升级(阅读即时数据)
可惜无论是当年 还是现在 写信给他都没有回应
考虑到他是俄国人.....希望他一切安好
现在既然有CODEX 或许可以结合原厂资讯与他这个软件
进行逆向工程与开发 最后做出一套我命名为HFMreader的程式
因为是中文系毕业的纯文组 很多叙述或理解可能有误
也有可能我觉得很新奇 但在资工人看来稀松平常的事情
以下部分内容是辅以AI的解释 若有错误还请不吝赐教
二、成本
订阅chatgpt 20 美金
CODEX点数 154.5 美金
AUTOOL汽车诊断协议检测盒 1208 NTD
KKL 409.1 FTDI USB-OBDII 诊断接口 260 NTD
三、开发过程
1.透过wireshark侧录HFMscan跟HFM的沟通方式,得到基本数据。
接线方式非常土炮 透过诊断盒附的香蕉头<->OBDPIN转接头
一端插再KKL USB的OBDII头端PIN脚上 一端插到HFM诊断孔PIN1、8、16
搞半天根本没用到诊断盒 浪费一千二了 哭啊
透过这样 得到宝贵的资讯
它并不是像现代 OBD-II直接用标准 PID 询问转速、水温
串行端是 9600 baud 初始化时先用 8N1 拉一段大约 177 ms 的 K-Line BREAK
放开之后等约 214 ms 再用 space parity 传送 AA
线上会先看到自己的 echo AA,接着ECU 回 55
总之就是先经过特定的 K-Line 初始化
再以不同的 command、group 与 selector 向 ECU 要资料
每个 byte 还伴随 echo、ACK 与特定 parity 规则
我的理解有点像打电话前要先挂断电话几秒钟再打
打过去要说"你好" 电话中会听到自己的讲的"你好"
然后电脑会回"好你"表示收到了 然后才给数据
2.解读数据
拿到 ECU 回传的资料后 通常只是原始的 RAW byte 我根本看不懂
程式必须先依照资料型别判断它是单 byte、双 byte、signed value 或 bit flag
再按照对应的换算公式 把它转成真正有意义的数值
有些比较简单
例如RPM = RAW × 25
所以如果 ECU 回传 0x20 十进制就是 32 故RPM=32 ×25 = 800
有趣的是透过与原厂HHT诊断电脑对比 发现显示出来的最小单位就是25rpm
所以他只会显示675、700这样,不会有679、702
水温则比较困难 他是非线性的公式
我举两段为例
RAW 0xA4 = 164
相邻基准点:
RAW 160 = 61°C
RAW 176 = 70°C
61 + (70 - 61) × (164 - 160) ÷ (176 - 160)
= 63.25°C
RAW 0xBE = 190
相邻基准点:
RAW 176 = 70°C
RAW 192 = 80°C
70 + (80 - 70) × (190 - 176) ÷ (192 - 176)
= 78.75°C
有趣的是 CODEX一开始推估的水温公式
对比我们透过逆工程、原厂资讯得到的公式
差异都在0.1~2度之间 真的蛮厉害的
同时也发现奔驰仪表上的水温表准的不可思议
例如79.16就换刚好落紧贴80白线下方
81.25度则会紧贴80度水温的上方
转速表亦然
整体言而 公式的来源来自原厂资料、HFMscan拆解以及修车厂HHT数据对照
HFM还有近百种 甚至更多可读取的数据 从HHT上可以验证
从档位、时速、引擎发动时间到第几缸失火
这就有待日后慢慢验证了(至少等我下周CODEX用量重置)
3.故障码读取与清除
故障码读取也是一大难题 他的逻辑跟读live data不同
程式先完成 AA/55 同步 再送出 F1 读取命令
依序取得 ECU 内的故障位元资料
我的理解大概像把每一个放资料的抽屉打开检查一遍
得到的数据前半段代表 Stored(曾经发生、已记录)
后半段代表 Current(目前仍存在)
ECU 传回的不是一整句故障描述 而是一组需要软件解码的位元图
所以还要对照原厂HFM诊断表才能正确转译
有趣的是 消除故障码的指令必须在读取指令后的大约0.22秒内发出
不然ECU会把下一个指令视为独立指令 然后就卡住了
所以我们看似按下"清除故障码"
但按下的瞬间他其实会再度重读一次然后迅速发出清除指令
为了准确测试 我可怜的W124被我拔了好几次MAF(空气流量计)的头
辛苦他气喘吁吁好几回了
附带一提 早在93年的W124 他的ECU就有学习功能了
原厂HHT诊断电脑也有学习数据归零甚至coding的功能
后者是可以调整ECU一些细部的version code
举例来说 手排/有触媒会有一组 XXX XXX XXX的序号
自排/无触媒 也会有一组OOO OOO OOO的序号
所以如果你自排改手排 电脑可以沿用 只要改这个序号
让电脑的自我认同从自排变手排即可
不然转速会拉不上去,因为电脑一直以为在空档
这也是未来我想尝试的功能
四、制作程式
交给CODEX,我完全不懂CODING。
只是交代他UI跟背后运算分开
方便我之后做一些酷酷的UI
同时加上读取ECU版本的功能 以便日后开发更多车子可以用的版本
研究中我发现少数数据读取或故障诊断 牵涉到不同版本的ECU
此外还读到自己电脑的生日
Hardware date: 35/92
Software date: 46/92
我猜35 46应该是周啦 跟轮胎一样
CODEX完成后就是实车试验
总之就是各种debug 地下停车场真的超热
不过CODEX其实蛮厉害的 大概来回三次就搞定
五、成品展示
https://youtu.be/EbqY9gmMMY8?si=iVEO-h4DcTltSMyf
前半段是实操第一人称视角
后半段是萤幕录影
车上超乱请大家无视 谢谢
先插PIN1(接地)、8(读资料)、16(12V,开红火才供电)
开红火(或发动) 选连接埠 然后点Connect
目前只有两个功能 读即时数据跟故障码读取/清除
即时数据的部分 目前公式确定的有
RPM、水温、节气门开度角度、含氧感知器电压、引擎负载、点火提前角
结合原厂数据+HHT推算的则是
IAT(进气温度)、MAF(空气流量)
这两个跟原厂HHT数值误差极小
例如怠速675~725转 HHT跟我们读到的平均值都落在15.1~15.3
但毕竟是CODEX推估的公式
所以还不能100%说是完全正确
故障码的部分 因为即时数据马上切过去会故障
原理大概就是ECU反应不过来吧 所以我做了等待2秒的设计
可以读故障码 然后会分成正在发生/曾经发生
CODEX坚持要在清除时跳一个警示"删除不代表修好"
真有趣
六、未来展望
其实坊间卖的诊断电脑也能做到这些
但我做这些最终极的目标
是透过带WIFI功能的ESP32插在引擎室内
然后传讯号到车内有触控萤幕的开发板上
再3D打印一个菸灰缸卡榫底座
制作一个能安放在菸灰缸位置的小萤幕
而不是像目前国内外加装的表 都要拉线
由于现在带WIFI或蓝牙的ELM327诊断头 不能直接传输HFM的数据
经过测试ELM会自己乱解读HFM的数据最后不是传不出来就是乱传
所以必须自己做一个可以忠实把HFM讯号传出来的发讯器
最后解读则交给车内开发板
不过由于我只有高中生活科技课焊过LED灯
这部分还得再研究 感觉道阻且长
同时也希望软件本身多一些功能
例如纪录最大/最小值、60秒波型图之类的
七、结语
经过两个礼拜的闭门造车
终于做出一个可用的程式
很庆幸自己生活在有AI的年代
当WIN11的笔电上跑出W124的数据与故障码
那种感觉真的好奇妙 又好开心
开发过程也开始能同理以前我学生看文言文的感觉了
每个字都懂 整句就鸭子听雷 早知道应该读理组的 恨文组
感谢车友Omega的技术文件
感谢宾皇的HHT支援与数据分享
感谢台大资工的好友阿尧给我的指点
感谢网友Rikki给我ESP32与开发板的知识补充
希望未来能继续改良 让每台电喷W124都能用 造福更多车友
八、参考资料
《Mercedes-Benz HFM-SFI Diagnostic Manual》(Mercedes-Benz,Diagnostic Manual
· Engines,09/2000) Mercedes-Benz HFM-SFI Diagnostic Manual.pdf
《Mercedes-Benz Vehicle Communication Software Manual》(Snap-on Incorporated
,2011) Mercedes-Benz_Vehicle_Communication_Software_Manual.pdf
Mercedes-Benz HFM-SFI Engine 111 Diagnostic Trouble Code(DTC)Memory 原厂故障
码表图片,页面 11/9~11/16
Mercedes-Benz W124 16-pin Data Link Connector/Impulse Counter Scan Tool 接线
图
HFM 故障码读取、清除与 ECM Memory Reset 中文操作说明
http://www.hfmscan.com/en/index.html 相关资料