當然可以。
分為手動和自動兩種,叫做逆向工程CAN報文 (Reverse Engineering CAN messages)。要不然很多對標軟體怎麼完成的,不就是這樣麼。
如果要完全準確地逆向工程每一個CAN訊號裡的每一個資訊是有難度的,但是要逆向工程諸如車速,扭矩,轉速,溫度,車輛主要狀態:停止,起步,蠕動,升降擋,還有關鍵零部件的狀態:開啟還是關閉,剎車的位置等等,其實並不困難。
如果你是手動逆向工程的話,一般需要透過下面幾步:
1. 設計實車測試用例。 儲存CAN之前你需要先確認你想找的是哪個資訊,比如你要找的是車速訊號。那麼你就需要按照需要找的這個訊號做一些勻加速和勻減速的測試。讓車速在一定時間內發生有規律的大範圍均勻變化。這一步裡你要設計好你的測試用例(test case)。
2. 第二步就是開始實車跑你第一步裡面定義的測試用例,同時儲存所有整車CAN。這個很簡單,使用類似下面Kvaser這樣的CAN logger透過OBD口就可以了,這裡你並不需要知道廠商的CAN訊號佈置。
3. 第三步開始手動分析第二步儲存的原始資料。儲存所有的CAN訊號後你需要先確認總共CAN上有多少條訊息,也就是有多少個不同的CAN ID。然後呢每條CAN訊息有8個byte的資料,你需要的是檢查所有不同的byte值,找出那個在你跑第一步制定的測試用例的時間內發生同樣均勻增加(車速增加),或者均勻減小(車速降低)的CAN訊號。那麼這條CAN訊號就是你想要找的車速訊號所在。再加減乘除一下你還能算出來這個車速CAN訊號的Resolution和Offset。
隨便google了一下就找到一個逆向工程找車速訊號的例子,這裡他們用的是一輛mini cooper,發現車速訊號在CAN ID 153的byte2上面。那麼CAN ID 153可能就是ESP發的一條CAN訊息。
4. 重複以上1-3步驟的話你可以手動翻譯出來大部分主要CAN訊號的所在位置。雖然CAN訊號的佈置位置不同廠商可能完全不一樣,CAN ID也不盡相同,但是諸如每個控制器在CAN上會發哪些內容,以及哪些訊號一般是組織放在同一條CAN ID裡的,其實不同廠商非常相似。
最後,上面說的是手動怎麼找的問題。
我想說其實有非常多自動分析逆向工程CAN報文的工具,很多工程師也會自己寫一些scripts,並沒有什麼難度。只不過直接把這種工具商業化的話好像上不了檯面吧。。。哈哈
當然可以。
分為手動和自動兩種,叫做逆向工程CAN報文 (Reverse Engineering CAN messages)。要不然很多對標軟體怎麼完成的,不就是這樣麼。
如果要完全準確地逆向工程每一個CAN訊號裡的每一個資訊是有難度的,但是要逆向工程諸如車速,扭矩,轉速,溫度,車輛主要狀態:停止,起步,蠕動,升降擋,還有關鍵零部件的狀態:開啟還是關閉,剎車的位置等等,其實並不困難。
如果你是手動逆向工程的話,一般需要透過下面幾步:
1. 設計實車測試用例。 儲存CAN之前你需要先確認你想找的是哪個資訊,比如你要找的是車速訊號。那麼你就需要按照需要找的這個訊號做一些勻加速和勻減速的測試。讓車速在一定時間內發生有規律的大範圍均勻變化。這一步裡你要設計好你的測試用例(test case)。
2. 第二步就是開始實車跑你第一步裡面定義的測試用例,同時儲存所有整車CAN。這個很簡單,使用類似下面Kvaser這樣的CAN logger透過OBD口就可以了,這裡你並不需要知道廠商的CAN訊號佈置。
3. 第三步開始手動分析第二步儲存的原始資料。儲存所有的CAN訊號後你需要先確認總共CAN上有多少條訊息,也就是有多少個不同的CAN ID。然後呢每條CAN訊息有8個byte的資料,你需要的是檢查所有不同的byte值,找出那個在你跑第一步制定的測試用例的時間內發生同樣均勻增加(車速增加),或者均勻減小(車速降低)的CAN訊號。那麼這條CAN訊號就是你想要找的車速訊號所在。再加減乘除一下你還能算出來這個車速CAN訊號的Resolution和Offset。
隨便google了一下就找到一個逆向工程找車速訊號的例子,這裡他們用的是一輛mini cooper,發現車速訊號在CAN ID 153的byte2上面。那麼CAN ID 153可能就是ESP發的一條CAN訊息。
4. 重複以上1-3步驟的話你可以手動翻譯出來大部分主要CAN訊號的所在位置。雖然CAN訊號的佈置位置不同廠商可能完全不一樣,CAN ID也不盡相同,但是諸如每個控制器在CAN上會發哪些內容,以及哪些訊號一般是組織放在同一條CAN ID裡的,其實不同廠商非常相似。
最後,上面說的是手動怎麼找的問題。
我想說其實有非常多自動分析逆向工程CAN報文的工具,很多工程師也會自己寫一些scripts,並沒有什麼難度。只不過直接把這種工具商業化的話好像上不了檯面吧。。。哈哈