基础知识
LIN的全称为Local Interconnect Network。LIN主要功能是为CAN总线网络提供辅助功能,应用场合有智能传感节点、自动车窗节点等。
硬件
特点
1.采用单主多从的组网方式,无CAN总线那样的仲裁机制,最多可连接16个节点(1主15从)。
2.对硬件要求简单,仅需UART/SCI 接口,辅以简单驱动程序便可实现 LIN 协议。故几乎所有的MCU均支持LIN。
3.不需要单独的晶振,便能完成主、从节点的同步,硬件成本大幅降低。
4.仅使用一根信号线便可完成信息的传输,即所谓的单总线设备。
5.传输速率最高可达20Kbps,符合A类网络标准,满足车身控制需要。
6.LIN 网络中新节点的加入,对网络中其他原有节点的软硬件设计不会造成影响。
LIN网络主从节点的功能
LIN网络中的节点任务分为主机任务和从机任务两类。其中,主机任务只在主机节点上运行,而从机任务在主机节点和从机节点上均可运行。也就是说,主机节点可以实现主机任务和从机任务。
A.主机任务主要执行以下功能:
- 1.定义总线上的通信速率。
- 2.发送报文帧头,包含同步间隔场、同步场和标识符场三个部分。
- 3.监控总线通信,通过校验和确定数据正确性与否。
- 4.使从机进入唤醒或睡眠状态,并响应从机的唤醒要求。
B.从机任务既可运行于主机又可运行于从机,它主要完成以下功能:
- 1.等待主机任务发送的同步间隔,使从机与主机于同步场中获得同步。
- 2.分析标识符场,若与自己相关,则接收或发送数据,若与自己无关则什么都不做。
- 3.检查和发送校验和。
- 4.接受主机任务的唤醒和睡眠请求。
软件
显隐性
LIN 总线上具有“显性”和“隐性”两种互补的逻辑电平。
其中,显性电平(参考地电压)是逻辑 0,隐性电平(电源电压)是逻辑1。
LIN报文的帧结构
LIN总线的一帧主要由两部分组成,即报文头(Header)和报文响应(Response)。
报文头是由一个主机节点的主机任务发出的,而报文响应(以下简称响应)是由一个主机节点或从机节点的从机任务发出的。
其中报文头由同步间隔场(最小13个显性位)、同步场(1个字节,数据不变,0x55)、和标识符PID场(1个字节)三部分组成;
报文响应由2/4/8个字节的数据场、校验和场(1个字节)所组成。
报文头和响应之间有一个帧内空间分隔,最小空间为0。
字符场格式
LIN 的字节场格式就是通常的“SCI”或“UART”串行数据格式(N81编码)。即每个字节场的长度是10个位定时(BIT TIME):1bit起始位+8bits数据位+1bit停止位。
起始位(START BIT)是一个“显性”位,它标志着字节场的开始。
接着是8个数据位,首先发送最低位。
停止位(STOP BIT)是一个“隐性”位,它标志着字节场的结束。LIN报文帧中的同步场、标识符场、数据场、校验和场的格式都符合上述字节场的格式。
间隔场
间隔场是唯一一个不符合字节场格式的场。从节点需要检测到至少连续11个显性位才认为是间隔信号。
同步场
一个字节,即0x55。
LIN的被保护标识符场(PID场)
PID场定义了报文的内容和长度。
如图,PID场分为6个标识符位和2个ID奇偶校验位。
6个标识符位我们称之为ID。如果加上2个奇偶校验位就变成PID了,即Protected ID。
6个标识符位中,标识符后两位为数据长度控制位。
总的来看,ID的范围是0-0x3F。
注意是ID,不是PID,要区分开。
上图中的ID4和ID5为数据长度控制位(ID4是低位)。
- 值为00或10时,数据长度为2个字节。
- 值为01时,数据长度为4个字节。
- 值为11时,数据长度为8个字节。
P0和P1为奇偶校验位。
数据场
数据场主要需注意每个字节先传输的是最低位。即如果某一信号长度超过1个字节,采用低位在前的方式发送(小端)。
校验和场(checksum)
校验和场是数据场所有字节的和的反码。所有数据字节的和的补码,与校验和字节相加所得的和必须是0xFF。
下图是一些LIN总线数据,以最后一组为例,2个0xFF之和为0x1FE,处理后仍然为0xFF。故8个0xFF加和之后仍为0xFF,取反码为0x00。
形象理解
总线原理:
物理上就一根线,关联节点都接上,有且仅有一个主设备,N多从设备,每个节点要通信的内容都事先编号号。
这就好比大家开晚会,话筒就一个,主持人一个,N个嘉宾,每人的话题都有一个编号。
表达顺序是这样的,
晚会开始前,大家睡觉的睡觉,闲的闲
1 主持人,把话筒对着大鼓,敲-停-, 敲-停-, … 敲-停-
这样大家都被吵醒了,晚会开始了
晚会都是谈话内容,都是下面步骤的重复
- t1 主持人把话筒同音闭了一会,--LIN总线的Break
- t2 主持人试了试话题,呼呼呼呼--LIN总线的同期
- t3 主持人说,下面是由 PID编号的人讲话--LIN总线的PID
- t4 有PID的人,就开始说了 D0,D1,D2,D3,D4,D5,D6,D7 --LIN总线的数据
- t5 有PID的人,接着说了就这样了--LIN总线的 CRC
就这样重复了多次之后,主持人
- e1 主持人把话筒同音闭了一会,--LIN总线的Break
- e2 主持人试了试话题,呼呼呼呼--LIN总线的同期
- e3 主持人说,下面是由 PID编号是睡眠的人讲话(就他自己)--LIN总线的PID
- e4 有PID的人,就开始说了 Go to sleep --LIN总线的数据,最多8个Byte
- e5 有PID的人,接着说了就这样了--LIN总线的 CRC
就这样,晚会结束了,大家睡觉的睡觉 休息的休息
搞笑的结束了,稍微来点关键词
- . 物理上就一根线,多节点送信,又没有冲突检测,怎么办,主设备调度啊
- . 速度怎么样,和CAN相比,十几kbps不算高,不过连接上的设备就那么大信息量,正好啦
- . 价额怎么样,便宜啊,一个物理tranceiver,一个带UART的CPU,再来的点软件,搞定了
- . 安全系数怎么样,PID带校验,数据带CRC校验,能发现错误,报告
- . 扩展性怎么样,用两个特定的PID,做数据链路层,创送上层的大包TP层,
- TP层上面在支持个诊断功能,能做些其他事情了
- . 各版本兼容性怎么样,主设备版本高,就能管理协调好
- 反之,从设备版本高,有些浪费