1. LIN 是什么? LIN 是 Local Interconnect Network 的缩写,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter / Serial Communication Interface,通用异步收发器/串行通信接口)的低成本串行通信协议。可用于汽车、家电、办 公设备等多种领域。% |- B0 W; K" @% V 2. LIN 在汽车车身系统中的应用9 l- e) l/ s' e2 e, o 3. LIN 子网(Cluster)[1]与节点(Node) ! y4 _ P6 k2 w# X: Q+ G, ] 以上图为例, 黄色方块为 LIN 的从机节点, 蓝色方块为 LIN 的主机节点。LIN 网络与主干线 CAN(Controller Area Network,控制器局域网)总线相连时, 需要加入 CAN-LIN 网关,一般由主机节点来充当。 注释:[1] 由于 LIN 网络在汽车中一般不独立存在,经常与上层网络(如CAN总线)相连,因此子网的概念是相对于上层网络而言。在不强调与上层网络相连的情况下,也可称 LIN 网络。' M3 Z0 [1 N. ^ N: S/ F# E ! N- C8 }; u0 x* U, p9 ? 4. LIN 与上层网络相连示意图 5. 主/从机节点与主/从机任务 LIN 的拓扑结构为单线总线,应用单主机多从机的概念。LIN总线电平为 12V,传输位速率(Bitrate)最高为 20kbps。由于物理层限制,一个 LIN 网络最多可以连接 16 个节点,典型应用一般都在 12 个节点以下。 主机节点(Master Node)包含主机任务(Master Task)和从机任务(Slave Task),从机节点(Slave Node)只包含从机任务。 / F* h' g" O7 Y; k* l& v + u6 N4 K" l0 B/ ?" j- R/ i 主机任务:: A. v0 {5 o% P7 O: u( | 1.调度总线上帧的传输次序;( `5 @& ]% u9 n% B W8 n- ` z: c 2.监测数据,处理错误;6 E- r! \3 s- Y, n# ^- L 3.作为标准时钟参考;/ S3 e4 H* t: |' g/ M8 { 4.接收从机节点发出的总线唤醒命令。! f% h/ @9 S* F5 ` j 从机任务不能主动发送数据,需要接收主机发送的帧头,根据帧头所包含的信息(这里指帧 ID )判断:; _9 x4 X+ [9 L6 p0 O 5.发送应答( 帧中除帧头外剩下的部分 );! M) W9 U# E- z5 O) b- q 6.接收应答;# F- C# o5 t. b! K$ Y) L 7.既不接收也不发送应答。& Z0 e; n! f! L$ b* d" ^ 3 F' B% W- C$ \! i }! m2 N6 c L$ d! A 6. LIN 的特点% L. t, F* @3 `! [; O! q6 j6 P, h 1.网络由一个主机节点和多个从机节点构成; v* }( Z' C) I% M4 @& m G P 2.使用 LIN 可以大幅度的削减成本:6 ?+ `2 A/ [. t2 z 2.1)开放型规范(免费从官方网站获得);. P5 H- A$ L1 a: ]. a 2.2)硬件成本削减(基于普通 UART/SCI 接口的低成本硬件实现,无需单独的硬件模块支持);0 ^; j" X. ?3 ]& d W( _ 2.3)从机节点无需高精度时钟就可完成自同步; 2.4)总线为一根单线电缆;( y3 c' H7 D% c9 P! M/ F 2.5)装配成本削减:采用工作流(Work Flow)和现成节点(Off-the-shelf Node)的概念,将网络装配标准化,通过 LIN 传输层 进行再配置; 2.6)缩短软件开发周期:LIN 协议将 API(Application Programming Interface,应用编程接口)标准化。 3.信号传输具有确定性,传播时间可以提前计算出;( i0 q% R4 Q$ ~6 x LIN 具有可预测的 EMC(ElectroMagnetic Compatibility,电磁兼容性)性能。为了限制 EMI(ElectroMagnetic Interference,电磁干扰)强度,LIN 协议规定最大位速率为 20kbps。" r1 D& U6 L/ I# y! j LIN 提供信号处理、配置、识别和诊断四项功能。 " |; J9 K# B# h; w1 @2 U 7. 帧的结构+ e9 x1 q8 C6 D, h8 s9 t0 k* Z" ` 帧(Frame)包含帧头(Header)和应答(Response)两部分。' I5 ?) R9 m# p 主机任务发送帧头,从机任务接收帧头并对帧头所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应。 帧在总线上的传输如下图所示: U" @2 t! O, u% [, x $ F. u0 x7 u2 b" a 帧头包括:同步间隔段、同步段以及PID(Protected Identifier,受保护ID)段;8 Z& ?! O F% } 应答包括:数据段和校验和段(如下图所示),其中值“0”为显性电平(Dominant),值“1”为隐性电平(Recessive)。! ~; U, l4 q) x, I/ n 总线上实行“线与”:当总线上有 大于等于一个节点发送显性电平时,总线呈显性电平;所有的节点都发送隐性电平或不发送信息(默认呈隐性电平)时,总线才呈隐性电平。5 f A4 P$ e- p { # D, e) T9 C6 z- O 7.1)同步间隔段(Break Field)7 [5 e4 t7 G$ o 同步间隔段由**同步间隔(Break)和同步间隔段间隔符(Break Delimiter)**构成。$ v) q3 Z& ~( ]6 q2 h9 ~ 同步间隔是至少持续 13 位的显性电平,由于帧中的所有间隔或总线空闲时都应保持隐性电平,并且帧中的任何其它字段都不会发出大于 9 位的显性电平,因此同步间隔可以标志一个帧的开始。, {! W( v3 e- G) A( C# E 同步间隔段间隔符是至少持续 1 位的隐性电平。4 p' u" M V: n. w6 S; I / ^! t' E6 L. [; }* T1 W" q3 Z 7.2)同步段(Sync Byte Field) 首先介绍字节域(Byte Field)的概念: 字节域包括 1 位起始位(Start Bit,显性) + 8 位数据位 + 1 位停止位(Stop Bit,隐性),是一种标准 UART 数据传输格式。在 LIN 的一帧中, 除了上一节讲述的同步间隔段,后面的各段都是通过字节域的格式传输的。在 LIN 帧中,数据传输都是先发送 LSB(Least Significant Bit,低有效位),后发送 MSB(Most Significant Bit,高有效位)。/ z6 H$ m1 w% F2 u* V5 h+ A & ?4 ~" T6 G6 F3 c* c+ d% ~ LIN 同步以下降沿为判断标志,采用字节 0x55(转换为二进制为 01010101b),如下图所示: |4 h# f% g8 B9 s 8 G% b' |1 T. }3 ] 由于从机节点采用片上振荡器等精度和成本相对较低的时钟,由此带来的与主机节点时钟产生的偏差,需要通过同步段进行调整,调整的目的是使从机节点数据的位速率与主机节点一致。1 z0 D& r/ K" q* f) l; `8 p 同步段用于同步的基准时钟为主机节点的时钟。从机节点通过接收主机节点发出的同步段,计算出主机节点位速率,根据计算结果对自身的位速率重新作调整。计算位速率公式如下: c. d# U a. T" ?6 M/ ]9 Q8 q 1位时间=(第7位下降沿时刻-起始位下降沿时刻)/8+ T: O+ O; ?. i: f 7.3)受保护 ID 段(Protected Identifier Field), w/ W6 v- G# o, X6 e' X% c2 s) Q 受保护 ID 段的前 6 位叫作帧 ID(Frame ID),加上两个奇偶校验位后称作受保护 ID。 $ _) U: l3 f* e" J ~- ^ 帧 ID 的范围在 0x00~0x3F 之间,共 64 个。从机任务对于帧头作出的反应(接收/发送/忽略应答部分)就是依据帧 ID 判断的。如果帧 ID 传输错误,将会导致信号无法正确到达目的地, 因此引入奇偶校验位。校验公式如下,其中“⊕”代表“异或”运算,“¬”代表“取非”运算:8 q: l F. m( x+ [% T$ z, s1 \6 S; W P0=ID0⊕ID1⊕ID2⊕ID4" n& n1 P/ `* d, ^ P1=¬(ID1⊕ID3⊕ID4⊕ID5) 由公式可以看出,PID 不会出现全 0 或全 1 的情况,因此,如果从机节点收到“0xFF”或“0x00”,可判断为传输错误。 依据帧 ID 不同将帧进行分类,如下表所示。( @1 e J6 n6 \( v/ J3 Y - }7 ?% t8 {+ b! h' o: r0 [ ! A( B8 a1 e0 Z 7.4)数据段(Data Field)" m& f7 ~" q7 f8 @ 节点发送的数据位于数据段,包含 1 到 8 个字节。 数据段包含两种数据类型,信号(Signal)和诊断消息(Diagnostic messages)。1 f( [1 g! x6 H6 a- r 信号(Signal) 由信号携带帧传递,一个帧 ID 对应的数据段可能包含一个或多个信号。信号更新时要保证其完整性,不能只更新一部分。一个信号通常由一个固定的节点发出,此节点称为该信号的发布节点(Publisher); 其余的一个或多个节点接收,它们称为信号的收听节点(Subscriber)。 诊断消息(Diagnostic message) 由诊断帧传递,对消息内容的解析由数据自身和节点状态决定。' |7 B6 G$ h: r$ T: h8 I 6 S p* Y$ e1 Z- J9 ~1 ?" V 7.5) 校验和段(Checksum Field) 校验和段是对帧中所传输的内容进行校验. m' j! Z8 H, e% D3 n0 t 2 n# p; G5 y: _# j 校验和分为标准型校验和(Classic Checksum) 及 增强型校验和(Enhanced Checksum),如下表所示。 0 [: `0 F K8 x% q 7.6)帧传输时间的计算 帧在总线上传输的时间计算如下表所示。: _4 {' d3 B' w' B3 a' u 其中, TFrame_Maximum为帧在总线上传输的最大时间; `& \- ^$ q# B0 A- g# P THeader_Maximum为帧头在总线上传输的最大时间; TResponse_Maximum为应答在总线上传输的最大时间; THeader_Nominal为帧头额定传输时间:同步间隔段(包含同步间隔和同步间隔段间隔符)的最小传输时间 + 同步段传输时间 + 受保护ID段传输时间;' W/ ]# E/ _& X2 B0 z# T& [6 z) |2 m 帧头的余量THeader_Rest包含字节间间隔,规定为帧头额定传输时间的 0.4 倍; TResponse_Nominal为应答额定传输时间:数据段传输时间 + 校验和段传输时间; 应答的余量TResponse_Rest包含应答间隔以及字节间间隔,规定为应答额定传输时间的 0.4 倍;! N0 k. \- F: @4 o- G' {; U Ndata表示数据段包含N个字节。; g& E) I8 V3 F a- N$ ? : H: i8 N- ] G. R 8. 帧的类型 8.1)无条件帧(Unconditional Frame); ~5 A' U1 L( k- h" m 无条件帧是具有单一发布节点,无论信号是否发生变化,帧头都被无条件应答的帧。8 c4 P9 b" N5 j5 P% y B 无条件帧在主机任务分配给它的固定的帧时隙中传输。总线上一旦有帧头发送出去,必须有从机任务作应答(即无条件发送应答)。 ( W- y8 o9 S5 D) z. t 以上图为例,4 _# ^/ Y: s- d9 W 1)帧 ID = 0x30 应答部分的发布节点为从机节点 1,收听节点为主机节点。典型应用如从机节点 1 向主机节点报告自身某信号的状态。 2)帧 ID = 0x31 应答部分的发布节点为主机节点,收听节点为从机节点 1 和从机节点 2。典型应用如主机节点向从机节点发布信息。7 S8 J5 p K6 f, p ?+ T2 t0 `8 {# a( S 3)帧 ID = 0x32 应答部分的发布节点为从机节点 2,收听节点为从机节点 1。典型应用如从机节点之间彼此通信。 ; ]6 [. ]9 H7 { U/ H. o* K 8.2)事件触发帧(Event Triggered Frame)1 D. t7 C1 a8 _$ ~7 w 事件触发帧是主机节点在一个帧时隙中查询各从机节点的信号是否发生变化时使用的帧,当存在多个发布节点时,通过冲突解决进度表来解决冲突。' ]- Q" T: R) `) [5 m0 D; W 当从机节点信号发生变化的频率较低时,主机任务一次次地轮询各个信号会占用一定的带宽。为减小带宽的占用,引入事件触发帧的念。+ ?5 O$ G% R6 w+ K' x + l2 @0 J8 [ g" _& {: D 事件触发帧的典型应用就是轮询四个车门的开关情况8 S7 K8 D7 B( t* O# i6 L% S9 X9 ? 与其利用无条件帧每个车门轮询一遍,不如同时对四个车门进行询问,如果其中一个车门打开了(事件发生),该车门要对询问作应答,即事件触发的含义。 这样做可以减小带宽,但同时会导致两种现象: 一是没有车门被打开,即无节点应答——事件触发帧允许一帧中只有帧头无应答; 二是冲突,即同时有大于等于两个车门被打开,对该问题同时作答——事件触发帧允许两个以上的节点对帧头作应答而不视为错误。 当发生冲突时,主机节点需要重新作轮询,这样会增加一些响应时间,但由于事件触发帧本身就用来处理低概率事件,总的来说还是节省了带宽。 $ b0 T0 f" \) ?' ?" x 原先用作轮询的无条件帧,称为与该事件触发帧关联的无条件帧,即事件触发帧的应答部分是与其关联的无条件帧所提供的应答。当发生冲突时,需要立刻中断当前的进度表,启动冲突解决进度表(Collision Resolving Schedule),重新调用这些关联的无条件帧。其中,冲突解决进度表要求包含所有的关联的无条件帧。+ K( W- q6 e# H" j : z* |5 R3 j& d; n& @9 d; G: E - \$ V/ k4 w& i% p: H 上图示例描述了事件触发帧的传输状况。事件触发帧的帧 ID 为 0x10,与其关联的两个无条件帧的帧 ID 分 别是 0x11 和 0x12。' e/ w6 E- T# m, F) {7 i6 N 5 s0 x' t' A9 Z 与事件触发帧关联的多个无条件帧需要满足以下 5 个条件: 1.数据段包含的数据字节数等长;7 h3 S9 X3 A3 s& E" H! ^$ v; h 2.使用相同的校验和类型; 3.数据段的第一个字节为该无条件帧的受保护 ID,这样才能够知道应答是哪个关联的无条件帧发送出来的;3 Y: t$ x. ?7 d+ z2 V2 e! a' W 4.由不同的从机节点发布;7 ^6 }: Y4 v* E$ |* k 5.不能与事件触发帧处于同一个进度表中。2 `$ n" y4 @0 s, ]5 @) F / j) N# F& O2 t+ v* R3 b' `) K* f 8.3)偶发帧(Sporadic Frame) 偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过事先设定的优先级来仲裁。与事件触发帧一样,偶发帧的应答也关联了一组无条件帧。- f' v7 `( d. i: B3 d 规定偶发帧只能由主机节点作为发布节点。偶发帧的传输可能出现三种状况: 1)当关联的无条件帧没有信号发生变化时,该时隙保持沉默,如下图所示,主机节点连帧头都不需要发送; " K, m7 f! {! Y7 G 2)当其中一个关联的无条件帧包含的信号发生了变化,则发送该关联的无条件帧的应答部分;6 g) A5 G9 ~( r2 T0 N, d: q9 s 3)如果有两个或两个关联的无条件帧包含的信号发生了变化,则按照事 先规定好的优先级,优先级较高的关联的无条件帧获得发送权,优先级较低的要等到下一个偶发帧的帧头到来时才能发送应答。8 ^5 d$ d5 r! l9 ] 由于主机节点是唯一的发布节点,所以主机节点事先就知道各个关联信号的优先级别,这样在传输时就不会产生冲突。# i x0 ?) |8 @5 e; ^, N+ o 引入偶发帧的目的在于为进度表增加一些动态特性——当主机节点的信号发生变化时才有通信发生。 事件触发帧和偶发帧反映了帧在不同时机(信号变化或未发生变化)的传输状况,引入它们的目的是为了增加通信的灵活性。 8.4)诊断帧(Diagnostic Frame) 诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用。9 ^& \ P' E& v1 W# E 主机请求帧(Master Request Frame, MRF),帧 ID = 0x3C,应答部分的发布节点为主机节点;+ u n) p9 G7 h5 i/ a! Y 从机应答帧(Slave Response Frame,SRF),帧 ID = 0x3D, 应答部分的发布节点为从机节点。 数据段规定为 8 个字节,一律采用标准型校验和。; Q1 K: x7 ], `9 V! @ 这部分知识以后会单独介绍。' @6 Z, P# @/ p4 }4 w6 F . s2 b$ ]" n& }/ `9 a6 K* R0 o 8.5)保留帧(Reserved Frame)/ S+ y) n4 P1 H9 u0 X4 V8 [" X 保留帧的帧 ID 为 0x3E 和 0x3F,为将来扩展用。4 V# o+ b' P2 t9 R8 @& ^ ————————————————* R1 ?$ a$ v9 W# p, ] 版权声明:天亮继续睡! m8 g6 @3 p5 ~ % @; s! S+ r& B9 I9 r$ C- w 6 ~; y8 R6 M9 }7 t: B |