452 J1939廣播多幀報文的例程分析

2021-10-10 13:32:35 字數 1097 閱讀 8999

全部學習彙總:

借助乙個簡單的例子來看一下j1939廣播多幀報文的傳送實現。為什麼不叫多幀報文而叫廣播多幀報文呢?因為在j1939中存在兩種多幀報文的傳送模式,乙個是廣播另外乙個是點對點的。而兩個流程是不同的。

上面的這個流程圖就是j1939的廣播多幀報文的實現,這個是我從vector的乙份檔案中擷取出來的。從上面可以看得出,大概的流程是先傳送一幀tp.cm_bam的報文,然後是一連串的資料報。而tp.cm_bam採用的是乙個特殊的pgn 60416。

上面的截圖資訊則是來自乙個**,這裡說明了廣播多幀報文傳送tp.cm_bam的時候的報文內容。其中,需要注意的是乙個是目標位址是全域性位址,另乙個則是包含了資料位元組數、資料報數目還有pgn的資訊。不過這裡我有一點疑問,居然資料一包最多7個,難道知道了資料位元組數這個多少包的資料不就可以計算出來了嗎?為什麼還有這麼乙個資料資訊呢?

上面的報文傳送完了之後,接下來,進行資料的傳輸。而傳輸所用到的功能是另乙個特殊pgn 60160,也就是tp.dt。具體的資訊如下:

接下來看看我手裡面的例程**:

其實,這個就是tp.cm的傳送。pgn 0x00fed8用於說明接下來的多幀報文的具體的作用。資料一共是9個位元組,分成了2個資料報。

接下來則是2包資料,其中沒有用到的資料場全都填充成了0xff。這裡的資料的排列,似乎沒有什麼大小端的說法了。直接按照資料場的index來的,其實是可以理解為大端的?與看的文件有所差異的地方是幀間隔的控制,其實這裡沒有延時控制,似乎是不合理的。應該至少要有50ms的時間間隔。

zynq CAN中斷傳送J1939資料

1 手冊 認真翻譯上邊的一段話 示例 使用中斷的方式來想txfifo中寫入資料 在中斷模式中,寫操作可以持續直到can.isr txfll 產生乙個中斷。資料能夠持續寫入txfifo直到txfifo被寫滿。當txfifo寫滿的時候,can.isr txfll 和 can.sr txfll 被設定成1...

J1939 多包報文傳輸

以j1939 rc retarder configration 報文為例,19個位元組,需要分3條報文傳送。1 將要傳送多包報文之前先會廣播一條id為0x18ecff 形式的一條報文tpcm 以目前理解最後 為源位址,rc報文的話為0f 資料場會提示接下來將會傳送多少條報文,包含什麼資訊 rc 2 ...

CAN匯流排 J1939 速成指南 1

這是乙個can擴充套件幀的完整結構圖,針對剛入門的小夥伴來說。不需要每乙個元素都理解,思想的套路是讓大家先能看懂報文。至於其他的元素就在實際的工作中進行擴充套件學習。擴充套件幀頭部有32位的仲裁字段,仲裁欄位中對於我們最有用的就是11位的識別符號和18位的拓展識別符號 這29位的資料就組成了我們通常...