ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于ASEJ1939的解析

2022-08-31 01:30:19  阅读:197  来源: 互联网

标签:02 00 01 04 ASEJ1939 FE FF 解析 关于


项目要用到ASEJ1939的协议,看了很多网上的博客,发现没有特别详细的,有些写的我都看不懂,理论一大堆。硬着头皮粗粗学了一下,大致摸出了点门道,就此记录一下,以免以后用忘记了。

先上图最小数据结构pdu 打开SAE+J1939-21-2001文档可以获得

 

P:优先级,决定该 PDU 进入总线的优先权限。值越小则优 先级越高。

R:预留的  基本为0

DP:数据页,这是 PGN 装载的一个位置,超过 65536 后该 位才会被置 1,现在一般的项目基本用不到,除非航天航空才会用到这么多pgn。

PF:PDU 格式(PDU Fomat),PGN 装载的位置,PDU 格式分为 PDU1 和 PDU2,小于240的是PDU1 格式的,大于等于240就是PDU2格式的。

PS:PDU 特征(PDU Specific),PF是PDU1时该域存放的是目标地址(DA:Destination Address),如果 PF 是 PDU2 时,该域 存放 PGN 扩展(GE:Group Extension)。

SA:源地址(Source Address),和目标地址相对,发送和接收的时候用的。

DATA Field:发送和接收的内容,发送的时候是pgn  接收就是回应的数据。

下面开始进入正题

介绍完了这个PDU,然后就是实战应用了。

首先拿一个练练手,遇到什么就讲什么。

如下是一个申请车轮转速的请求,我们来拆解下

18EA00F9  BF FE 00      F9(诊断设备)向00(发动机)请求车轮转速

18:这是前面的优先级什么的,不用管pass。

EA:这个是申请的pgn 具体可以找对应的文档SAE+J1939-21-2001如下图,

 

 00:因为前面EA小于240 所以是PDU1 格式的,当前这个就是一个目标地址,00表示的是发送机,这个可以参考SAE+J1939-2005这个文档的Table B2,

当然下面的源地址也是要通过这个来找的。

F9:源地址,因为我们当前的是一个诊断设备,所以Table B2 中是249 也就是F9。

然后就是对应的pgn,BF FE 00  这里的实际值应该是0x00febf   因为协议里的是小端模式,低位放在前。

0xfebf 要去SAE+J1939-71-2006 这个文档下找,如下图,可以看到是wheel speed

 

 

 申请数据的指令讲完了,就开始分析收到的指令

18FEBF00   00 00 00 00 00 00 00 00 

这个简单说下就是  优先级+pgn0xfebf +源地址(来自发动机的)   后面的数据就是具体的车轮的转速。因为当时没有转动轮子,得到的全是0.

就是按照上图下面的8byte去依次解析得到数据。

开始增加难度

接下来个难点的。这是一个获取故障码的请求,和这个也差不多我们来拆解

18EAFFF9 CA FE 00 
1CECFF00 20 16 00 04 FF CA FE 00 
1CEBFF00 01 00 FF FD 03 01 02 FE 
1CEBFF00 02 03 01 02 FF 03 01 02
1CEBFF00 03 00 04 01 02 01 04 01
1CEBFF00 04 02 00 00 00 00 00 00

第一条就不用分析了,不过后面这个故障码pgn,在SAE+J1939-71-2006找不到 要去SAE+J1939-73-2004 这个文档里去找。

首先要知道J1939的数据传输。  

数据传输的时候会有2种类型 一种是bam 姑且叫他广播模式    一种是RTS/CTS 这里可以简单理解成tcp通信。具体的还是要看文档SAE+J1939-21-2001,

下面这个图是判断这个指令是bam还是rts 这里一定要看英文的文档,翻译过来的文档根本不靠谱。

 

 我们按这个图来分析一下当前这个指令是什么传输的

18EAFFF9 CA FE 00 

被请求的pgn是00FECA  FE大于240 是pdu2,数据长度大于8byte,请求地址F9 特定地址   响应地址FF全局 按照上图得知是倒数第二个bam

也可以通过第二条传输明明看出

1CECFF00 20 16 00 04 FF CA FE 00 

后面的消息是 20 16 00 04 FF CA FE 00 怎么分析这个呢?  可以参考文档SAE+J1939-21-2001的FIGURE 14 FORMAT OF MESSAGES FOR TRANSPORT PROTOCOL  因为之前判断是bam所以就是下面的箭头 byte=32 也就是16进制的0x20.

 

 

这里主要的就是他们交互的关系

具体的去看一下 SAE+J1939-21-2001的   TRANSPORT PROTOCOL TRANSFER SEQUENCES  

 

 

图有点多就放1个当前讲的这个例子吧。

下面就直接注释搞起了 ,感觉分开分析有点麻烦。

 

 

18EAFFF9 CA FE 00 
1CECFF00 20 16 00 04 FF CA FE 00   TP.CM_BAM  就是下图,然后各个byte的解释  20表示bam  16 00 表示有22个数据 04 4个包 CA FE 00 pgn
1CEBFF00 01 00 FF FD 03 01 02 FE   TP.DT    图也放下面了 01 队列数  然后就是数据
1CEBFF00 02 03 01 02 FF 03 01 02
1CEBFF00 03 00 04 01 02 01 04 01
1CEBFF00 04 02 00 00 00 00 00 00

 

 

 

 

 

 

 

 

 

 然后这bam的解析就算全部完成了。。。

再加一个rts的吧,读取车架号 参考下面的图

18EA00F9 EB FE 00                 F9 向00  发送车架号请求
1CECF900 10 2C 00 07 FF EB FE 00        TP.CM_RTS 44个数据  07个包  EB FE 00 pgn
1CEC00F9 11 07 01 FF FF EB FE 00        TP.CM_CTS 07个包  下个发送的包01  EB FE 00 pgn
1CEBF900 01 4E 4C 43 49 44 2A 31        包的序列 01  数据
1CEBF900 02 32 33 34 35 36 37 38
1CEBF900 03 39 41 42 43 44 45 46
1CEBF900 04 47 48 2A 31 32 33 34
1CEBF900 05 35 36 37 38 2A 31 32
1CEBF900 06 33 34 35 36 37 38 39
1CEBF900 07 41 2A FF FF FF FF FF        包的序列 07  数据  结束了
1CEC00F9 13 2C 00 07 FF EB FE 00        TP.CM_EndOfMsgACK  44个数据  07个包   EB FE 00 pgn

 

 

 

 

 完结撒花!!!!!

应该来说把ASEJ1939的应用层的大部分都解释完了。我目前的开发也就用到这么多了把,还有补充那就等下次了。

相关的J1939协议文档放百度网盘

链接:https://pan.baidu.com/s/1RGvenTdF5BECX6ceBLGL9w
提取码:t03m

 

标签:02,00,01,04,ASEJ1939,FE,FF,解析,关于
来源: https://www.cnblogs.com/yepc/p/16641476.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有