ESP32(10) CAN Logger功能驗收
插在OBD2上的樣本二號像是平安符,注意,第三片小板子上去了。這篇是這系列的最後一篇了,我們來看看它的功能
[Put them together,功能確認]
先前比較少著墨軟體,這裡聊一下軟體設計
驗證部分我使用Linux的的CAN-Utils套件,他是Volkswagen Group Electronic Research編寫的(版權宣告),這一系列工具非常方便。下面的命令會間隔1ms灌包,封包數值會遞增,方便檢查有無掉封包
- cangen can1 -g1 -L8 -Di
實驗完成,真的有檔案跑出來
第一個封包序號0x114,最後序號0x15934F,一共1413961封包,和圖二編輯器行號吻合,沒掉封包。連續錄送1500秒,大約1秒942發。CAN本身會塞一些stuffing bit,這大概125K CAN極速
本來在一個task收CAN和寫資料,加深CAN queue還會掉封包。開出專門寫SD卡的task,並且入口的queue放深一點,從此不掉封包
如前一篇所述,電源供應元件有發熱問題,跑上面實驗會熱當,上車會掛。改buck不知道要多久,靈機一動:如果一枚LDO太燙,那就放兩顆吧。我果然是天才啊,立刻過關
[Configuration As Service]
這次編寫軟體有個新嘗試,把設定和RTOS相關資料結構塞入structure,取代一堆#define和全域變數。過往他們散在軟體裡不容易看出關聯,現在這樣是要花點記憶體,我感覺還不錯。既然能讀SD卡,也有機會開機讀取設定後,動態修改組態
趁晚上涼快開車出來實驗,要搞車子,地下室有蚊子,白天又很熱,還是晚上好
很快發現不合用的地方:要等車子CAN封包停止,軟體才關檔。一輪實驗要10分鐘,直接關電檔案大小都是0什麼都沒有。在書桌上寫那麼爽,一出來立刻踩坑
果斷修改機制:檔案寫滿16000筆記錄,關檔開下一個檔案,搭配一顆LED,開新檔切換亮暗,用眼睛能判斷是否斷電。回去再多補上一顆按鈕,做完實驗按下立刻關檔
[CAN封包分析指南]
假如想分析CAN log,找到駕駛座車門打開或關閉的封包要怎麼做?想30秒再繼續看
我錄了一份log包含以下操作,用寫好的分析工具把log轉成報告,報告對所有封包作圖。比起閱讀log file,看圖舒服很多吧
- 門開著,開始實驗
- (關門1秒,開門3秒)* 5次
判斷開關門也麻煩,門開著的時間故意久一點,很容易就能判斷了
[CAN封包分析指南2]
偶爾我也用EXCEL分析封包,因為有上面的工具,後來比較少用
EXCEL能找到資料裡的unique set,可以計算他們出現的次數。假如錄兩份log,一份有某個操作另一份沒有,就可以觀測unique set找到這包特殊封包
[CAN封包分析指南3]
找到上述的110封包後,我會用Pi搭配candump直接看110封包,開關門看看他數值變化。逆向工程就是如樸實無華
- candump can0 | grep 110
[下一步]
這篇是專題最後一篇了,已經做出logger雛形,能丟在車上玩了。今天玩了一下發現:要看記錄得拔卡有點麻煩,好想要無線傳輸,人懶真的沒藥醫啊!!!
接著要玩ESP32專屬的特異功能
我想用藍芽做遙控工具(比如按一下關檔),OTA韌體升級,或是放個SHELL在上面吃指令。藍芽傳輸速度大概不適合丟出log
有WiFi的時候,能自動上傳log,也可以在上面跑個webserver,能遠端管理log;這個cannelloni很有意思,他能把CAN封包透過UDP導向到遠端電腦!意思是只要有WiF,我也能在房屋裡,摸到地下室的CAN bus
留言