文章總列表

ELM327 OBD-II 心得 (6),使用Pi-WIRE逆向工程HUD

目的
借助Pi-WIRE的幫忙,在社區狹窄的地下室用時速120飆車,證明我高超的駕駛技術!

惡搞HUD需要搞定Pi-WIRE和Pi-CAR。首先要弄清楚HUD和汽車的介面,我猜HUD是定期和車子詢問速度,所以我修改第四篇配置,把ELM327換成HUD,觀察Pi-CAR要怎麼回應才能顯示時速120:
  • Before
    • ELM327 ---- Pi-WIRE ---- Pi-CAR
  • After-1
    • HUD ---- Pi-WIRE ---- Pi-CAR (report speed=120)
然後再把Pi-CAR換成真的車,讓Pi-WIRE竄改速度:把速度灌水100看來不錯
  • After-2
    • HUD ---- Pi-WIRE (report speed = car_speed + 100) ---- XC60 (speed < 20)

HUD逆向工程開始
配置妥當,Pi-WIRE開始監聽。歷史上CANBUS格式有兩種,舊年份Volvo使用29bit-ID,現在新車都是11bit-ID。HUD會發出兩種格式,查詢Service01 PID00,看哪一種有人理他,這樣就能判斷CANBUS版本(為什麼是7E8和18DB33F1,參考資料ISO 15765-4有答案)

HUD會接下來查詢底下資料,只要讓Pi-CAR回應命令,HUD就會老實顯示速度了
  • 01 00, supported PID in 01-20, 4byte bitmap
  • 01 05, Engine coolant
  • 01 0C, Engine RPM
  • 01 0D, Speed
  • 01 10, MAF air flow rate
  • 01 20, supported PID in 21-40, 4byte bitmap
  • 01 40, supported PID in 41-60, 4byte bitmap


我在家裡把HUD飆上180喔!



逆向工程HUD,有趣的點
  • HUD啟動的機制
    • 汽車發動電瓶電壓會瞬間下降,因為發電機運轉電壓上升
    • 我轉電源供應器,發現HUD是偵測電壓上升開機
  • HUD關閉的機制
    • HUD接在OBD-II的頭,車子熄火狀態OBD-II不會斷電,HUD永遠上電
    • HUD讀到引擎轉速歸零關閉(一般熄火),或著CANBUS久久沒回應也會關閉(我直接拔線)
  • HUD low power做得太爛了!
    • 用行動電源加直流轉換器(5v to 12v)給HUD,測量到靜態耗電為5v 130mA
      • 等於12V 50mA,約略是24小時吃掉電瓶1Ah電量
      • 我的電瓶是是70Ah,一個禮拜放掉7Ah(10%電瓶),難怪這陣子我拔下HUD做實驗,發現電瓶充飽電容易多了
      • 這個low power真的做太爛了!
    • 我只能接受一個禮拜放掉電瓶0.5Ah的電量
      • 靜態耗電要壓在3mA以內(3mA*24hr*7days=504mAh=0.5Ah)
      • 某手機晶片設計公司,low power團隊連0.8v@1mA都斤斤計較,這個HUD用電倒是一點都不客氣
  • HUD會因為資料等太久送出Error Frame
    • 後面會談到,因為Pi-WIRE延遲太久的關係,HUD運作會受影響

我的展示Video1: 開發環境簡介

我的展示Video2: 試著用Pi-WIRE竄改數據




參考資料
枯燥乏味的東西放在這裡。可以讀底下的文件學習上面的01 0C(Service 01 PID 0C)是什麼,汽車和HUD究竟傳輸什麼資料,另外讀出和清除錯誤碼的規範也包括在裡面
  • ELM327 Data Sheet
    • ELM327文件其實寫得很好,他是整個研究我反覆閱讀的文件。特別是P.29~P.47包括汽車怎麼回應OBD-II的請求,訊息格式(ISO 15765)
    • ISO 15765怎麼下命令給車子,具體的回應是什麼
  • WIKI OBD-II PID
    • OBD-II提供的服務列表(工業規格)
  • ISO 15765-4文件真身!!
    • 這份文件不好找,新版的要錢,初版的有出現在網路過;托寫部落格的福,竟然讓我找到了
  • 參考1
  • 參考2

TODO
如果順利,下一輪鼓起勇氣就是上車試試看了

留言

這個網誌中的熱門文章

STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收

幼犬書桌椅選擇心得 升降桌 兒童桌椅

CANON G3000 廢墨瓶改裝