LIN通信介绍
LIN 是 Local Interconnect Network 的缩写,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter / Serial Communication Interface,通用异步收发器/串行通信接口)的低成本串行通信协议。可用于汽车、家电、办公设备等多种领域。
LIN通信特点
串行通信线间干扰小,节省线束,传输距离长单线传输单线 , 总线电压 12V最高速率 20Kbit/s满足车身上大部分的应用需求单主多从结构不存在冲突,无需仲裁基于通用 UART/SCI 的低成本接口硬件几乎所有 MCU 有具备 LIN 总线的硬件基础从节点无须晶振或陶瓷震荡器就可以实现同步利用报头里的同步场实现同步,大幅度降低成本可计算的信号传输的延迟时间网络通信可预期性可灵活的增加或减少从节点无需改变其他节点的硬件电路一条总线最多可连接 16 个节点由总线电气特性决定,主节点有且只有1个,从节点有1到15个支持多包报文传输基于 ISO15765-2 的传输层规范支持诊断功能支持 ISO14229 的诊断服务
LIN网路拓扑结构 ![](https://i-blog.csdnimg.cn/blog_migrate/a0e818f45fa7e0a400f84736609253c5.png)
一个LIN网络由一个主任务,若干个从任务组成
主节点既有主任务又有从任务, 从节点只包含从任务,因此主节点从节点和主任务从任务不是一个对等的关系主任务负责决定总线上的报文,从任务提供每一帧的数据
LIN的帧结构
帧(Frame)包含帧头(Header)和应答(Response)两部分。主机任务负责发送帧头;从机任务接收帧头并对帧头所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应。帧在总线上的传输如图 3.1所示。
通信原理: 主任务发送报头,从任务用响应来补充报头形成完整的报文。系统灵活性: 可以自由地增减从节点,而不需要改变其它从节点的软件和硬件报文传输: 报文的内容由 ID 来定义 ( 跟 CAN 相似)广播: 所有节点都能够同时地接受和响应总线上的帧
帧结构:
间隔场和间隔界定符
表示一帧报文的起始,由主节点发出间隔信号至少由13个显性位组成,间隔界定符至少由1个隐性位组成间隔场是唯一一个不符合字节场格式的场从节点需要检测到至少连续11个显性位才认为是间隔信号
同步场
LIN同步以下降沿为判断标志,采用字节0x55(01010101b)进行同步。
确保所有从节点使用与主节点相同的波特率发送和接收数据
标识符场
受保护的ID的前6位叫做帧的ID,加上两个奇偶效验码后称作受保护的ID。帧ID的取值范围为0x00~0x3f总共64个,帧ID标识了帧的类别和目的地。从机任务会根据帧头ID作出反应(接收/发送/忽略应答)。其中P0与P1效验如下:
数据场
数据段可以包含1-8个字节,其中包含有两种数据类型,信号(singal)和诊断消息(diagnostic messages)。信号由信号携带帧传递,诊断消息由诊断帧传递
基于SCI的通信格式发送一个字节需要10个位时间(TBIT)
LIN协议中并没有规定哪一部分显示数据长度码的信息(这点与CAN总线不同),数据的内容与长度均是由系统设计者根据帧ID事先约定好的。 总线上的数据是以广播形式发出,任何节点均可以收到,但并非对每个节点有用(与CAN相同)。具体到发布与接收是由哪个节点进行完成这个取决于应用层的软件配置,一般情况下,对于一个帧中的应答,总线上只存在一个发布节点,否则就会出现错误。事件触发帧例外,可能出现0,1,多个发布节点。
校验和场
用于校验接收的数据是否正确(1个字节)
经典校验(Classic Checksum):仅校验数据场(1.3)
增强校验(Enhance Checksum):校验标识符场与数据场内容(2.0)
标识符为0x3C(60)和0x3D(61)的帧只能使用经典校验
采用标准型校验和还是增强型校验和由主机节点管理,发布节点和各收听节点根据帧 ID 来判断采用哪种校验和。
校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于256时就减去255),并将所得最终的和逐位取反,以该结果作为要发送的校验和。接收方根据校验和类型,对接收数据作相同的带进位二进制加法,最终的和不取反,并将该和与接收到的校验和作加法,如果结果为0xFF,则校验和无误,这在一定程度上保证了数据传输的正确性。
字节间隔
字节间隔位于每个字节之间,响应间隔位于报头与响应之间,留给MCU足够的处理时间, 最小值可以是 0,字节间隔可能导致 帧长度增长
帧类型
无条件帧(Unconditional Frame)
主任务发出报头,所有节点都进行接收,但只有对应的从任务对报头提供响应帧
事件触发帧(Event Triggered Frame)
(1)事件触发帧是主机节点在一个帧时隙中轮询各从机节点的信号是否发生变化时使用的帧。
(2)由于事件触发帧的帧头后只能有一个响应,因此其响应中第一个数据字节通常为该响应对应的无条件帧的PID,这样就可以确定是哪个关联的无条件帧发送的。为确保事件触发帧的长度,所有对应同一事件触发帧的无条件帧中响应的数据字节数均相同。
(3)由于多个从节点可以向来自主节点的帧头发送响应,这样可能会发生冲突,因此使用冲突解决调度表(Collision Resolving Schedule)来解决这个问题,当主节点在检测到冲突后跳转至冲突解决调度表进行一轮发送,然后跳转到开始的调度表,保证了所有响应都能被发送出来。
(4)事件触发帧是为了减小带宽的占用,而引入了的概念。
偶发帧(Sporadic Frame)
(1)零星帧/偶发帧是主节点共用一个时隙、在需要时才被发送的一组帧。主节点使用零星帧/偶发帧发送很少使用的信息,会有多个无条件帧共享同一时隙。主节点根据需要发送零星帧/偶发帧,如果无需发送,则相关的时隙为空。
(2)如果至少一个与无条件帧相关的信号发生了变化,则发送其响应部分。
(3)当多个从节点需要进行发送时,主节点会根据LDF中定义好的优先级顺序,将这些无条件帧依次在调度表多轮运行的同一时隙进行发送,避免发生冲突。
诊断帧(Diagnostic Frame)
诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用。主机请求帧(Master Request Frame,MRF),帧 ID = 0x3C,应答部分的发布节点为主机节点;从机应答帧(Slave Response Frame,SRF),帧 ID = 0x3D,应答部分的发布节点为从机节点。数据段规定为 8 个字节,一律采用标准型校验和。
保留帧(Reserved Frame)
保留帧的帧 ID 为 0x3E 和 0x3F,为将来扩展用。
调度表:
调度表是在网络系统设计阶段确定的用来为报文分配发送时隙,以及调度各报文的发送顺序的任务调度制度。调度表可以保证总线永远不会过载,同时还可以保证信号的周期性。
调度表中用来发送一帧报文的时间称为帧时隙(Frame_Slot),帧时隙必须是时基的整数倍,调度表是由帧时隙组成的。LIN总线最小时间单位是时基(Tbase)。
主任务可以拥有多个调度表,并在不同的调度表之间切换,该处理方式增加通信的灵活性。
偏移(jitter)是指一帧报文实际开始发送的时刻与帧时隙起点的时间差(该值在LDF文件中定义)。
TFrame_Slot> jitter + TFrame_Maximum\
网络管理
睡眠(Go To Sleep)
主节点可以发送一帧ID为60(0x3c),第一个字节为0x00其余全为0xFF的主请求帧来使处于工作状态的从节点进入睡眠。这帧报文称为睡眠指令。睡眠指令只有主节点可以发送,从节点在接到睡眠指令之后,也可以选择不进入睡眠状态而继续工作,这根据应用层协议而定。
唤醒(Wake Up)
发送节点发送的唤醒信号:
当从节点发出唤醒信号之后150ms,主节点仍未发送报头时,从节点可以再次发送唤醒信号。当连续发送了3次唤醒信号之后如果主节点仍未发送报头,从节点要至少等待1.5秒以后才可以发送第四次唤醒信号
接收节点检测的唤醒信号: