我正在开发一个OBD-II读取器,在这里我想查询使用stm32处理器读取PID参数的请求。我已经理解了数据字段应该做什么,但是ID让我头疼。正如我所读过的,一个人必须发送0x7DF来广播一个请求,每个ECU都会用他自己的ID来响应。然而,我被要求在SAE J1939协议中这样做,它使用了29位扩展标识符,我不知道我需要在这个ID中添加什么。
正如我在标题中所说的,有人能用这种方法向我展示一些总线上的实际数据吗?我一直在网上搜索真正的帧,但到目前为止没有任何运气。
我也会感激,如果有人可以粉碎一些光,如果OBD-II通信需要一些确认才能正常工作。
谢谢
发布于 2021-12-09 14:07:38
我建议您查看一下SAE J1939文档,更具体地看一下J 1939/21、J 1939-71和J 1939/73。
通常,可以按以下方式处理J1939传输协议响应序列:
ID为1CEBFF00的J1939数据传输消息(PGN 60160或EB00)。
上面,BAM的最后3个字节等于E3FE00。当重新排序时,这些都等于PGN FEE3 aka引擎配置1 (EC1)。此外,通过将前39个字节组合到6个数据传输数据包/fram中,可以找到有效负载。
在使用车辆使用状态PID生成未经授权的使用警报之前,管理控制设备或发出车辆使用状态PID的任何设备都应该对运行开关状态(SPN 3046 - 0xFDC0 )和任何其他本地定义的授权使用标准(即驾驶员登录)敏感。
此外,您也不能忘记使用读取/发送来扩展ID消息,因为这是一个24位的消息。
事实上,我建议您使用罐用使您的分析更加容易。一个简单的罐头转储或罐嗅探器,你可以看到什么是你的广播。
一些汽车的dbc https://github.com/commaai/opendbc
https://stackoverflow.com/questions/70079143
复制相似问题