CAN-TP 层位于 UDS诊断层和CAN Driver层中间,主要作用是当CAN数据长度超过8Byte(CAN-FD为64Byte)时,对CAN数据进行分包和解包。 通信方面包含时间管理和错误处理。
一.网络层协议的数据单元
N_PDU :
{ 1)N_AI:隐含源地址,目标地址和寻址方式信息。
2)N_PCI:用于标识N_PDU类型:单帧,第一帧,连续帧和流控制帧。
3)N_Data: 包含应用层协议控制信息A_PCI和A_DATA。
}
二. 网络TP层的服务结构
A. 请求服务(Request):用于向网络层传递控制报文信息及要发送的数据,应用于更高层或应用层。如tester向ECU发出数据。应用层-》 传输层
B. 指示服务(Indication):用于向更高层或应用层传递状态信息及接收到的数据,应用于网络层。如ECU收到了tester的数据,传至应用层。 传输层-》应用层
具体说来,Indication前端应该执行的是底层传入数据的处理函数,即读取PDU信息,这一帧具体是SF、FC、CF还是FF。若满足条件,继续向上,即应用层传递。
C. 确认服务(Confirm):被网络层使用,用于向更高层或应用层传递状态信息。tester收到了ECU方面的数据。传输层-》应用层
具体说来,Confirm和Indication很像的是都是从网络层向应用层传递信息,有何区别呢?
在代码的处理中,Confirm的前端应向底层外发Tx数据或超时处理函数,反馈的信息不需要包含数据。而Indication传递的信息则分为两种,一种包含真实数据,另一种不包含。
三. 根据ISO-TP中的描述,Can帧主要分四类:
1) 单帧(Singal frame, SF): 第一个字母总是0,
2) 首帧(First frame, FF) :第一个字母总是1,
2)流控帧(Flow control frame, FC)
3)连续帧(Consecutive frame, CF),第一个字母总是2,
多帧时序如下:
- Sender ->发送首帧
- Receiver ->回复流控帧
- Sender-> 发送连续帧(根据流控帧确认发送连续帧的间隔和次数)
- Receiver -> 收到指定数量的连续帧后,再次回复流控帧
- Sender-> 发送连续帧(根据流控帧确认发送连续帧的间隔和次数)
三.(时间)定时参数: s: sender r: receiver
四.错误识别处理
1) SF_DL错误: 首帧的数据长度为0 或者大于7,则会被接收方忽略。
2) FF_DL错误: 第一帧数据长度不符合规范
3) CF_SN错误:1) 控制流不限制,SN没有按照顺序,跳了,wrong_sn 2) 控制流限制为2
4) CF_SN错误:1)控制流限制2,SN没有按照顺序,接受方没有回应,N_Bs超时
5) FC_FS错误:1)接受方Flow state 非法
6) FC_N_WFTmax错误:接收方最多连续发送多少个等待FC帧个数,本地变量,仅可以在多包报文发送过程中接收方网络实体中定义,系统初始化时应设置正确,使用这个变量用于避免发送方节点一直处于等待FC状态;
五.非预期报文处理 ??
非预期帧的处理:在多包报文传输过程中,任何一方接收到的非期望报文(同一个N_AI),网络设计者确定网络采用全双工或半双工,然后依据节点处于接收状态,发送状态及空闲状态时,接收到非预期报文,
网络层的处理方法不同:
◼ 半双工状态,网络层处于发送状态,收到任何数据报文,均忽略;
◼ 全双工状态,除SF和物理寻址的FF外,其它包括功能寻址FF均作忽略处理,且不向上层报告