文章總列表

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



結語

連上網的開發工具,用起來真的爽!後面還能繼續搞事

  • 加一顆電池,常駐在車上
  • 把封包導向遠方,讓我在家裡,能處理世界任何地方的封包


留言

這個網誌中的熱門文章

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

小米掃地機器人S20+ review

玩CAN bus的傢伙們 (1) CandleLight-based USB-CAN