ESP32做汽車封包紀錄器
緣起
我手邊的CAN Bus工具很難用,做實驗很痛苦;我想根本解決一些問題
- 遠端分析:去地下室分析得餵蚊子,我想在家裡幹活兒
- 容易操作:操作Linux連我都嫌麻煩,我想點web網頁
- 常駐車上:樹莓派的耗電太高,MCU能達成uA等級待機耗電
萬丈高樓平地起,先用ESP32可以上車紀錄數據,後面還有很多事能做
硬體設計
藍色電路板是ESP32C3開發版,跳線接綠色電路板CAN收發晶片;背面放Micro-SD卡插座,加上OBD2接頭,硬體原型就做好了。電源暫時用USB-C,之後再考慮從OBD2拉電
CAN BUS
ESP32的CAN bus我搞過,CAN封包導入資料紀錄器,很快就能錄數據,以及轉檔。讓樹梅派用極速送出50000個封包,數值遞增,確定沒掉任何封包,紀錄器就搞定了
上車實驗
把ESP32板子上車紀錄,照影片按遙控器,按兩下鎖定,等一下,再按兩下鎖定。我們要在汽車網路上找到關鍵封包
VOLVO車的封包格式長下圖,VOLVO沒公開定義,我也看不懂
逆向工程來找吧,上圖can1 xxx三個數值是ID,可以看成是資料分類。最早用EXCEL分析
- 把上圖導入EXCEL,照ID分類,找出unique封包,並且計算出現幾次
- 我們按遙控器四下,找出所有出現4次的封包
- 然後用Linux的candump錄下封包,搭配grep肉眼仔細觀察
上述流程後來變成自製工具,把Log塞入網頁,為每個ID繪圖
畫出一堆圖,下面這個圖四個點不就對上遙控器手勢?AI說這招是資料指紋化,不關心意義,只關心資料變了嗎,以及變成哪種狀態
實際狀態
實際做實驗還是得吃苦的,掙扎一個小時沒錄出來;先鎖車再實驗呢?到車外餵蚊子,再掙扎一下才錄到這些信號
效能優化
轉檔有夠慢,10000個封包紀錄檔392KB要22.3秒
修改軟體架構反覆做實驗,這個例子最後優化到1.48秒,大概15倍加速,堪用了
- 效能基準線是22.3秒
- 加大檔案讀寫緩衝區,效能變超爛( 217.42s),9.74x
因為呼叫fseek()讓緩衝區作廢,更大緩衝區等於讀更多資料丟掉,傻了 - 避免呼叫fseek()( 2.33s),0.1x
- 整併兩次fread(),加速字串處理,調整SD卡參數(1.48s),0.066x
結語
連上網的開發工具,用起來真的爽!後面還能繼續搞事
- 加一顆電池,常駐在車上
- 把封包導向遠方,讓我在家裡,能處理世界任何地方的封包
留言