自製W124 HFM 診斷軟體
文長慎入
一、前言
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其實蠻厲害的 大概來回三次就搞定
五、成品展示
前半段是實操第一人稱視角
後半段是螢幕錄影
車上超亂請大家無視 謝謝
先插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 相關資料
--
/ ̄ ̄﹨
▁▁ / ◤ ≡ /
▕鴻木▏ \ . .
秋風孤劍 ▕章子▏ Pellaeon ξ◥ /︻\
 ̄ ̄ ψ η ◢ ;川;◣
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ζ\■/
--