設定初始化,配置管腳,是否進行對映,配置波特率,設定中斷函式等等。
下面詳細介紹如何解析整車報文的詳細過程
can1控制器發,can2控制器接收。傳送比較簡單,設定好傳送函式,配置一下id就完事了,接收也同樣簡單,只需濾波一下需要的id就行。但是如果是整車報文的解析就不一樣了。主要是接收方的解析。
首先我們得到要解析的報文的id,通過過濾器篩選出自己想要的id,儲存在fifo裡面,由於fifo空間有限,我們需要及時的讀取出來,但是由於需要進行判斷報文的作用,這個過程很漫長,但系統不希望在中斷裡面進行一些運算,因此採用快取陣列,將fifo裡面的報文讀取出來。fifo裡面只要有報文,中斷標誌位就觸發,及時讀取。這裡舉例,如何設定報文過濾,這也是我困惑的地方。
例如我們移植需要接收id為0x90(標準格式的id共11位)。這個時候我們設定過濾器, 一般我們都採用標準幀格式。那麼過濾器是32位的就相當於可以拆分開來等於兩個id。比如0x00900030使我們想要的id報文,那麼其實就是兩個0x0090,0x0030。
我們只要設定canfilterid=0x00900030,canfiltermaskid=0xffffffff然後這兩個暫存器分別分為高位和低位,這時只要進行移位和與處理就可以分別提取出來0x90和0x30。然後進行在進行移位提取11位,最後儲存,因為是左對齊,後面補0不影響(我困惑的地方)。
can_filterinitstructure.can_filterscale = can_filterscale_16bit; //16位
can_filterinitstructure.can_filteridhigh = (id>>16)<<5;
can_filterinitstructure.can_filteridlow = (id&0xffff)<<5;
can_filterinitstructure.can_filtermaskidhigh = (maskid>>16)<<5;
can_filterinitstructure.can_filtermaskidlow = (maskid&0xffff)<<5
報文解id讀取出來之後,需要解析是什麼報文,有可能是解析報文,也有可能是只能診斷報文和網路管理報文。然後分別儲存在各自分配的佇列裡。然後在根據id分配在不同的id下的快取裡面。好處是防止在中斷裡進行處理,系統出錯。然後在解析的時候提取出來。
解析出來的資訊分為開關量和數字量。乙個報文裡面有很多資訊,對照起始byte和bite以及long得到自己想要的資料資訊。然後賦值給一些tag,當然中間要進行一些處理,比如開關量過濾,防止偶然或者時間上的錯誤。
報文解析 Excel公式自動解析CAN報文的方法
在can網路上擷取的報文一般被儲存為為.txt或.asc等格式,在分析報文時經常需要對著協議來逐條報文 逐個位元組甚至逐節來解析。為了應對這種情況,行業內也是提出了各種解決方案,比如vector的can報文軟體,或者自己寫上位機來自動解析,再或者將對應報文匯入進excel中用公式自動解析 本文詳細介...
基於簡單工廠模式的CAN報文解析
所謂工廠模式,就是通過物件建立模式繞開new,來避免物件建立 new 過程中所導致的緊耦合,從而支援物件闖將的穩定。具體實現是通過定義乙個用於建立物件的介面,讓子類例項化哪乙個類,本例中應用的是簡單工廠模式,基類為parse frame,定義了解析can報文的資料結構以及解析的方法,子類為parse...
CAN報文格式
can協議的報文傳輸過程中有 資料幀 遠端幀 錯誤幀 過載幀和幀間隔。1.資料幀 用於傳送節點向接收節點傳送資料的幀。2.遠端幀 用於接收節點向具有相同id的傳送節點傳送資料的幀。3.錯誤幀 用於當檢測出錯誤時向其他節點通知錯誤的幀。4.過載幀 用於接收節點通知其尚未做好準備的幀。5.幀間隔 用於將...