目录
5.1.1 PDU 结构
5.1.1.1 NAD
5.1.1.2 PCI
5.1.1.3 SID 与 RSID
5.1.1.4 消息字节段
传输层的任务单一,就是充当一个“翻译官”,把来自诊断服务的消息(Message)“翻译”成协议层可以处理的PDU (Packet Data Unit,分组数据单元),或者反过来,把协议层收到的 PDU“翻译”成诊断服务需要的消息。消息到 PDU 的转换过程称为拆分(Packing), PDU 到消息的转换过程称为重组(Unpacking)。 PDU 对应着帧结构的数据段,并通过诊断帧发送或接收。
为满足汽车行业的要求, LIN 传输层 PDU 的格式与 ISO 制定的基于 CAN 网络的诊断标准非常相似(是 ISO 标准的子集)。这种兼容性大大减少了在 CAN 和 LIN 之间转换数据格式的工作量, 降低了对节点计算能力的要求。
从发送格式上, PDU 单元可分为单帧(Single Frame, SF)、首帧(First Frame, FF)和续帧(Consecutive Frames, CF)三种。从发送源上,主机发送请求 PDU,从机发送应答 PDU。
如图 5.1 所示,为 PDU 格式,包括节点地址(NAD),协议控制信息(PCI),LEN,服务 ID(SID),应答服务 ID(RSID),消息字节段(D1~D6)。首字节 NAD 首先发送,末字节 D4,D5,D6 最后发送。
(PDU是LIN协议中的8位数据段,而且得是诊断帧3C 3D)
(Request请求,Respose应答,有些中文版的资料这里是错误的,所以我截取了英文版的图)
(续帧CF在请求和应答中都是一样的格式)
(单帧SF适用于数据长度小于6的帧,即D1--D5)
(首帧续帧适用于数据长度大于5的帧,发送一个首帧作开头后,后面全是续帧)
PDU 单元的第一个字节是 NAD(node address),用于区分不同从机节点的地址。如表 5.1 所示,列出了 NAD 的取值范围。
(0x00的休眠命令是不是很熟悉,0x7F是NAD的通配符)
PDU 单元的第二个字节是 PCI(Protocol Control Information)信息,包含了 PDU 单元类型和消息字节长度的信息。如表 5.2:
单帧中,附加信息 Length 表示消息字节数加 1(加1是因为把SID也算上了)。首帧中,附加信息只表示 Length 的高 4 位,低 8 位在 LEN中表示。因此在消息长度为 12 位数据,最大长度为 4095(0xFFF)。
续帧中的附加信息表示首帧后,跟随的续帧的编号,第一个续帧编号为 1,之后累加 1。如果续帧数多于15 个,那么帧计数器在第 16 个续帧时从 0 重新计数。
SID(Service Identifier)表示了从机节点应完成的服务请求。节点配置服务的 SID 区间为 0xB0~0xB7,诊断服务的 SID 区间为 0x00~0xAF,0xB8~0xFE。
RSID(Response Service Identifier)表示从机节点应答的内容,它的值是 SID+0x40。
(后面应用层会详细介绍这一部分,提供信号处理、配置、识别和诊断四项功能)
消息字节段的内容取决于服务的种类。在单帧中,消息字段最多 6 个字节。在首帧和续帧中,所有 PDU 的消息字段,经过“重组”组成一个完成的消息。