在两周时间我主要学习了15765协议和14229协议中我师父给我画的重点内容,首先我先总结我第一周的学习内容,在我粗略的查看了一下这个15765协议时,我发现这个协议和一个叫CAN总线的东西有关?那什么是CAN总线呢?我不知道,所以我第一个学习的内容是CAN总线。
什么是can协议?什么是can总线?原理是什么?
CAN是一个控制器局域网,一个ISO标准的串行通信协议,支持分布式系统和实时通信,可扩展性好,可承载大量数据高速通信。
CAN总线的物理连接需要两根线,通过差分信号进行数据传输,有两种电平(显性电平和隐性电平),原则就是最先访问节点的数据可以获得总线控制权,当多个节点同时获取总线控制权时将发生总裁事件,优先级高的节点获取总线控制权,CAN协议中所有消息都以固定数据格式发送,2个以上节点发送数据时,根据节点标识符(11位连续隐性)决定各自优先级关系,节点标识符并非目的地址,而是代表节点的优先级,CAN总线中没有地址概念。
CAN报文每帧由7个部分组成,报文起始位称为帧起始(sof)然后时仲裁场和控制场数据场和CRC场还有应答场和帧结尾 帧间隔
Can报文分为5种 数据帧 遥控帧 帧间隔 错误帧 过载帧
了解完了CAN总线之后我就开始学习15765协议,16765协议有两种传输方式 单帧传输和多帧传输 单帧传输(请求 应答等) 主要内容学习的是N_PDU中的N_PCI的格式.N_PDU是网络协议数据单元
由 N_AI 地址信息 N_PCI 协议控制信息和N_DATA 数据域组成,这里主要看N_PCI,N_PCI包含了原语帧的具体信息(此消息属于何种类型的帧,帧的长度等)
我们可以根据接收到的第一个字节的高4位来判断是单帧还是首帧,连续帧,流控帧
如果第一个字节高4位是0 那么他就是单帧 低4位是数据长度
如果第一个字节高4位是1 那么他就是首帧 低4位和第2个字节就是数据长度
如果第一个字节高4位是2 那么他就是连续帧 低4位是SN 是序列号 标记当前连续帧的第几个连续帧 便于组包
如果第一个字节高4位是3 那么他就是流控帧 低4位是fs 代表的是发送端要进行的动作 0 是继续发送 1是等待发送 2是流量控制
第二个字节是bs 代表一次发送几个连续帧 0的话就是将剩下的连续帧全部发送过来 无需在等流控帧 第三位STmin 代表每两帧的间隔时间 最大128ms 最小100us
标准帧与扩展帧的区别就是仲裁域不同 标准帧是11位 扩展帧是29位 标准帧访问总线的优先级比扩展帧高 因位帧id越小 优先级越高
UDS协议 是一种定向通信,是一种交互协议,即诊断仪向ECU发送指定数据请求,这条数据需要包含SID,如果是肯定回应,回复的是SID+0x40.肯定回应是一组数据,如果回复的是否定回应,回复的是7F+SID+NRC NRC是我否定你的依据 否定回应是一个声明
相同点:uds协议和1576协议都是对帧中的数据域进行定义,相对于CAN总线的进一步封装
uds只规定与诊断相关的服务需求,并没有设计通信机制,因此要实现一个完整的通信还需要定义网络层协议(15765协议)和底层硬件实现方式。由于不涉及通信机制所以可以架设在各种网络上。
非排放相关故障是如何诊断的呢?
首先汽车里的每个ECU都按规则存储故障,例如BMS发生了欠压故障,那么这时候BMS就记录发生故障DTC,以及发生故障的快照信息或者冻结帧信息 便于查找故障
相关术语
DTC:故障码(一个码代表一个故障)
快照:根据快照数据,分析故障是什么原因导致的
快照内容:
发动机速度(第一次发生)
车速 (第一次发生)
电池电压 (第一次发生)
发动机速度(最后一次发生)
车速 (第一次发生)
电池电压 (最后一次发生)
快照和冻结帧:
扩展信息:指除了快照信息之外 故障的发生次数 老化次数
10诊断会话服务
有3个子功能 : 01默认会话 02 编程会话 03扩展会话
ECU上电时,进入默认会话,如果进入了一个非默认会话,一个定时器会运转,如果一段时间没有请求,就会回退到默认会话,如果不想回退可以使用3E服务,可以使诊断保持在非默认状态。
01 可以切到 03 03也可以切到01 03可以切换到 02不能切换到03 02可以切换到01
02编程会话
所有支持服务器内存编程的诊断服务
有3种方法退出02会话
1 超时 等着回退
2 在启动软件下服务器运行编程会话,退出编程会话可以发送0x11服务
直接切01 默认会话
扩展会话
此会话用于启所有支持像“空转速度”,“co值等”的所有服务
格式:
SID + sub-function + 会话参数列表(byte3-byte6)(前2个字节代表 ECU在诊断时对应用层响应时间 后两个字节时暂时无法处理诊断 在应用层响应的时间 这个的具体表现时NRC为0x78)
0x11服务 (ECURest)
通过诊断请求重启ECU
4个子服务
0x01 模拟KL30重启 “硬重启” 会断电源
0x02 模拟KL50重启 模拟钥匙断开接通顺序
0x03 软重启 立即重启程序
0x04 休眠 只适用于待机模式服务器
作用:
当我们通过诊断命令修改了ecu某些参数改写了ECU的某些数据或对ecu进行了某些设置,只有将ecu重启这些设置才会生效,当0x11执行完会从非默认会话,回退到默认会话,在等待肯定回应阶段不处理任何请求和发送响应信息
请求格式
SID+sun-function(重置类型)
SecurityAccess(0x27)安全服务
有些诊断服务在执行之前需要进行一个简单的身份验证,任何一个时刻只有一个安全级别处于活动状态。