RENES-LIN入门二:LIN协议层一

本章内容介绍了帧结构、进度表、主/从机的状态机实现、LIN 网络的休眠(Sleep)/唤醒(Wakeup)和状态管理等。
一、帧的结构:帧(Frame)包含帧头(Header)和应答(Response)两部分。主机任务负责发送帧头;从机任务接收帧头并对帧头所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应。帧在总线上的传输如图 3.1所示。
在这里插入图片描述

帧头包括同步间隔段、同步段以及PID(Protected Identifier,受保护ID)段,应答包括数据段和校验和段,如图 3.2 所示,其中值“0”为显性电平(Dominant),值“1”为隐性电平(Recessive),总线上实行“线-与”:当总线上有大于等于一个节点发送显性电平时,总线呈显性电平;所有的节点都发送隐性电平或不发送信息(不发送任何信息时总线默认呈隐性电平)时,总线才呈现隐性电平,即显性电平起主导作用。图中帧间隔为帧之间的间隔;应答间隔为帧头和应答之间的间隔;字节间间隔包括同步段和受保护ID段之间的间隔、数据段各字节间之间的间隔以及数据段最后一个字节和校验和段之间的间隔。下面对帧头和应答的各部分进行详细说明。
在这里插入图片描述

同步间隔段(Break Field)

同步间隔段由同步间隔(Break)和同步间隔段间隔符(Break Delimiter)构成,如图3.3所示。同步间隔是至少(注1)持续 13 位(以主机节点的位速率为准)的显性电平,由于帧中的所有间隔或总线空闲时都应保持隐性电平,并且帧中的任何其它字段都不会发出大于 9 位的显性电平,因此同步间隔可以标志一个帧的开始。同步间隔段的间隔符是至少持续 1 位的隐性电平。从机任务接收帧头的同步间隔段时,以该从机任务所在节点的位速率为准,当检测总线上出现持续 11 位(注2)的显性电平时,认为是帧的开始。当从机节点使用精度较高的时钟时,识别阈值可以选择 9.5 位。
在这里插入图片描述

同步段(Sync Byte Field)

在介绍同步段之前,首先介绍一下字节域(Byte Field)的概念,字节域包括 1 位起始位(Start Bit,显性) + 8位数据位 + 1 位停止位(Stop Bit,隐性),是一种标准 UART 数据传输格式,如图 3.4 所示。
在这里插入图片描述

在 LIN 的一帧当中,除了上一节讲述的同步间隔段,后面的各段都是通过字节域的格式传输的。在 LIN 帧中,数据传输都是先发送LSB(Least Significant Bit,最低有效位),最后发送 MSB(Most Significant Bit,最高有效位)。LIN 同步以下降沿为判断标志,采用字节 0x55(转换为二进制为 01010101b)。同步段的字节域如图 3.5 所示。

受保护 ID 段(Protected Identifier Field)

受保护 ID 段的前 6 位叫作帧 ID(Frame ID),加上两个奇偶校验位后称作受保护 ID。如图 3.6 所示。
在这里插入图片描述

帧 ID 的范围在 0x00~0x3F 之间,共 64 个。帧 ID 标识了帧的类别和目的地。从机任务对于帧头作出的反应(接收/发送/忽略应答部分)都是依据帧 ID 判断的。如果帧 ID 传输错误,将会导致信号无法正确到达目的地,因此引入奇偶校验位。校验公式如下,其中“⊕”代表“异或”运算,“¬”代表“取非”运算。
在这里插入图片描述

由公式可以看出,PID 不会出现全 0 或全 1 的情况,因此,如果从机节点收到了“0xFF”或“0x00”,可判断为传输错误。依据帧 ID 不同将帧进行分类,如表 3.1 所示,对各种类型的详细说明参照 3.2 节。
在这里插入图片描述

数据段(Data Field)

节点发送的数据位于数据段,包含 1 到 8 个字节(注 1),先发送编号最低的字节 DATA1(这样便于接收数据,先接收的字节存放在低位,跟数据实际的位置一致),编号依次增加,如图 3.7 所示。

数据段包含了两种数据类型,信号(Signal)和诊断消息(Diagnostic messages)。信号(Signal)由信号携带帧传递,一个帧 ID 对应的数据段可能包含一个或多个信号。信号更新时要保证其完整性,不能只更新一部分。一个信号通常由一个固定的节点发出,此节点称为该信号的发布节点(Publisher);其余的一个或多个节点接收,它们称为信号的收听节点Subscriber)(注 2)。诊断消息(Diagnostic message)由诊断帧传递,对消息内容的解析由数据自身和节点状态决定。
在这里插入图片描述

*注:

  1. 协议没有规定帧中的哪一部分显示数据长度码的信息,数据的内容和长度是由系统设计者根据帧 ID 事先约定好的。
  2. 总线上的数据是以广播形式被发送到总线上的,任何节点均能接收,但并非所有信号对每个节点都有用。收听节点接收帧的应答是因为该节点的应用层会使用这些信号,而对于其余节点,由于用不到这些信号,所以没有必要作接收处理,将忽略帧的应答部分。发布和收听由哪个节点进行完全根据应用层的需要由软件或配置工具实现。一般情况下,对于一个帧中的应答,总线上只存在一个发布节点,否则就会出现错误。事件触发帧例外,可能存在零个、一个或多个发布节点,参照 3.2.2 节。*

校验和段(Checksum Field)

校验和段是对帧中所传输的内容进行校验,如图 3.8 所示。
在这里插入图片描述

校验和分为标准型校验和(Classic Checksum)及增强型校验和(Enhanced Checksum),如表 3.2 所示。
在这里插入图片描述

采用标准型校验和还是增强型校验和由主机节点管理,发布节点和各收听节点根据帧 ID 来判断采用哪种校验和。校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于 256 时就减去 255),并将所得最终的和逐位取反,以该结果作为要发送的校验和。接收方根据校验和类型,对接收数据作相同的带进位二进制加法,最终的和不取反,并将该和与接收到的校验和作加法,如果结果为 0xFF,则校验和无误,这在一定程度上保证了数据传输的正确性。例如:采用标准型校验和,Data1 = 0x4A,Data2 = 0x55,Data3 = 0x93,Data4 = 0xE5,计算方法如表 3.3所示。
在这里插入图片描述

帧传输时间的计算

帧(有关帧的结构参照 3.1 节的图 3.2)在总线上传输的时间计算如表 3.4 所示。其中,TFrame_Maximum为帧在总线上传输的最大时间;THeader_Maximum为帧头在总线上传输的最大时间;TResponse_Maximum为应答在总线上传输的最大时间;THeader_Nominal为帧头额定传输时间:同步间隔段(包含同步间隔和同步间隔段间隔符)的最小传输时间 +同步段传输时间 + 受保护ID段传输时间;帧头的余量THeader_Rest包含字节间间隔,规定为帧头额定传输时间的0.4 倍;TResponse_Nominal为应答额定传输时间:数据段传输时间 + 校验和段传输时间;应答的余量TResponse_Rest包含应答间隔以及字节间间隔,规定为应答额定传输时间的 0.4 倍;Ndata表示数据段包含N个字节。
在这里插入图片描述

帧在总线上的传输波形

帧在总线上的传输波形示例如图 3.9 所示。

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赤豆糊_siki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值