LIN总线入门

概述

Lin总线最早由Volvo公司于1998年开发,主要用于与车辆内部的各种传感器通信,例如车灯、喇叭、温度传感器等。由于应用领域独特,Lin总线的设计重点是低成本、低功耗、低速传输(10 kbps)和简单易懂的通信协议。

Lin总线采用一个主从式结构,总线上有一个主控制器(Master)和多个从设备(Slave)进行通信。主控制器发送一些命令(称为帧),从设备进行响应。Lin总线的通信协议非常简单,一个帧由几个不同的字段组成,其中一个例子是标识符域(Identifier Field),它用于区分不同的Lin总线消息。

从接口的角度来看,Lin总线需要一个串行总线物理层(类似于RS-232或USB),同时使用Lin总线转换器来将物理层信号转换为Lin总线帧并向主控制器返回响应。

除了Lin总线常规的读写命令外,Lin总线还提供了一些特殊命令,例如逃生命令(Escape Command)用于在紧急情况下快速退出当前帧传输,以尽早处理其他任务。此外,Lin总线还提供了一些错误检测和纠正机制,以确保通信的稳定和正确性。

总的来说,Lin总线是一种简单、成本低廉、易于维护的总线协议,广泛应用于车辆电子领域等各种嵌入式系统,这使得Lin总线成为了Linux系统中一款非常实用的总线协议。

对比

Lin总线和CAN总线是两种常见的面向嵌入式系统的总线协议。它们都具有简单、低成本、可靠等特点,但也有一些区别。

  • 首先,Lin总线的数据传输速率相对较慢,最高速率为19.2 kbps,而CAN总线的最高速率可达1 Mbps或更高。因此,Lin总线适用于传输较小量的数据,而CAN总线适用于传输更大量的数据。其次,Lin总线的主要应用场景是车辆电子领域,例如车灯、喇叭、温度传感器等低带宽传感器的通信。而CAN总线则广泛应用于更广泛的领域,包括汽车、航空航天、工业控制等。因此,它们的使用场景相对不同。另外,Lin总线相对于CAN总线具有更低的成本和更低的功耗,这是由于Lin总线的通信协议更加简化,在实现方面也更容易实现。因此,在对成本和功耗有更高要求的场景下,Lin总线可能是更好的选择。

总的来说,选择Lin总线还是CAN总线取决于具体应用的需求和环境。如果需要高速传输和更广泛的适用性,则CAN总线可能更合适,而如果需要更低的成本和更低的功耗,则Lin总线可能是更好的选择。

LIN总线相比CAN总线具有更低的成本主要有以下几个原因:

  • 通信速度较慢:LIN总线的最高通信速度为19.2 kbps,而CAN总线的最高通信速度可达到1 Mbps及以上,因此,在实现上,LIN总线相对于CAN总线更为简单,成本更低。
  • 硬件要求较低:LIN总线通信协议相对简单,只需要较少的硬件支持,例如少量的电阻、电容等即可实现通信,基本所有微控制器都可实现。而CAN总线则需要更多的硬件支持,例如CAN控制器芯片、收发器等。
  • 适用于特定场景:LIN总线主要应用于低速、低带宽的传感器通信领域,例如车辆电子领域,对成本的要求更为严格。

总的来说,由于LIN总线的通信速度较慢,硬件要求较低,同时适用于特定场景,因此相比CAN总线具有更低的成本。当然,具体选择哪种总线协议还需要根据应用场景和需求进行评估和选择。

下面是一个基本的LIN总线电路实现:

  • 为了实现LIN总线的物理层,需要使用一个UART串行接口芯片。UART芯片用于将数据从并行格式转换为串行格式发送到总线上,并将接收到的串行数据转换为并行格式下发给处理器。在LIN总线中,UART作为数据链路层,主要任务是在发送方与接收方之间进行字节的传输和管理。除了UART芯片外,还需要几个电子器件来实现LIN总线的物理层。这通常包括一个信号调整器(Signal Conditioner)、一个电压转换器(Voltage Translator)和一个电流级转换器(Current Level Translator)。这些器件主要用于将UART芯片生成的信号转换为适合在LIN总线上传输的信号,并将其与处理器或其他LIN总线设备进行连接。在LIN总线中,每个节点(包括主控制器和从设备)都需要使用一个专用的芯片来实现LIN总线接口,称为LIN收发器(LIN Transceiver)。LIN收发器用于将UART输出信号转换为LIN总线所需的电信号,并从总线上接收电信号并转换为UART格式。因此,通过使用LIN收发器,可以使设备通过应用软件,实现与其他设备之间的通信。
    经常需要使用一个电源直接设备(Power Direct Unit)来提供电源供电。因为LIN总线的最大功率通常在50mA左右,所以需要一个小型的电源单元来为LIN接口提供电源。此外,由于硬件和设备数量较少,因此也可以通过自己的电源电路来处理供电问题。

总的来说,实现LIN总线的电路比较简单,通常只需要使用UART芯片、LIN收发器、信号调整器、电压转换器、电流级转换器等少量器件即可。此外,需要注意的是,LIN总线的实现需要依赖于正确的硬件,这需要在实际应用中仔细选择和配置电路。

LIN通信报文

LIN报文帧由帧头(Hearder)与应答(Response)两部分组成。传输过程中,主机节点负责发送帧头;从机节点负责接收帧头,然后作出解析决定发送应答,还是接收应答或不回复
帧头结构包括同步间隔场、同步场、PID场(受保护ID)场,应答部分包括数据场与效验和场。
同步间隔场:最少13位显性电平、同步间隔段用1位隐性电平。
同步场:0x55
PID场计算:受保护的ID,其前6位为帧ID,加上两个奇偶效验码称作受保护的ID,帧ID的取值范围为0x00~0x3F,共64个,帧ID标识了帧的类别,从机任务会根据帧头ID作出反应(接收/发送/忽略应答)。比较特殊有诊断ID0x3C(主机)、0x3D(从机应答,标准效验和,并且是一个完整的帧)
计算如下

P0 = (((id)^(id>>1)^(id>>2)^(id>>4))&0x01)<<6 ;
P1 = ((~((id>>1)^(id>>3)^(id>>4)^(id>>5)))&0x01)<<7 ;
returnpid = id|P0|P1 ;

帧类型

无条件帧
  • 无条件帧(Unconditional Frame)是 LIN(Local Interconnect Network)总线中的一种基本帧类型。它用于在总线上传输数据,不需要接收方的任何触发,这种帧是长期存在的(对于支持周期性帧的芯片,会周期性地发送),常见的用法是发送传感器数据和控制命令。
  • 无条件帧是 LIN 总线中数据传输的基础,主机和从机可以使用无条件帧进行数据的传输和交互。同时,还有其他类型的帧可以与无条件帧组合使用,以满足不同的应用需求。无条件帧(Unconditional Frame)在 LIN(Local Interconnect Network)总线上可以由主机或从机发起,用于周期性地发送数据或控制信息。
  • 在周期性数据传输场景中,主机需要定期向从机发送控制指令,以保证传输的数据能够得到及时更新。从机在接收到无条件帧后,会解析数据并进行相应的操作。例如,从机可以通过解析无条件帧中实际的数据信息来控制某个设备的状态,并发送响应帧来反馈状态变化。
  • 另外,无条件帧也可以被用于实现事件驱动(Event Driven)的通信机制。例如,如果从机检测到一个发生了异常的事件,它可以发送一个无条件帧来通知主机,请求主机进行相应的处理。这种方式可以缩短故障响应的时间,提高系统的实时性和可靠性。
    无条件帧包含以下几部分:
    同步码(Sync Byte):同步码是为了同步总线上所有设备的时钟,并将数据包的传输开端标记为同步帧,其字节值为0x55。
    帧头(Header Byte):帧头通常由标识符(Identifier)和控制位(Control)组成。标识符是一个8位的数据字段,用于识别数据包中所包含的数据类型和发送方或目标设备,其中包括:帧类型标识、目标从机地址(Target ID)、消息类型标识等。控制位包括两个字段:命令位(Command)和校验使能位(Checksum Enable)。
    数据(Data):数据部分可以包含0-8字节的数据,用于传输有效负载。
    校验和(Checksum):校验和通常是一个字节,用于验证数据的完整性。LIN总线使用的校验算法是异或校验。

事件触发帧

  • 事件触发帧(Event Triggered Frame)是 LIN(Local Interconnect Network)总线中可选的一种帧类型,与无条件帧(Unconditional Frame)不同,事件触发帧是由从机主动触发发送的,用于主动向主机发送数据。

  • 事件触发帧的主要作用是在从机检测到特定条件(如传感器数值超出阈值)后,通过发送事件触发帧来主动向主机发送相关数据以及系统状态信息。这种方式不需要主机发起请求,可以大大降低主机访问从机的频率,提高总线通信的效率。同时,在事件发生后,主机可以及时采取相应措施,避免出现故障或安全问题。
    总之,由于从机可以主动触发发送消息,事件触发帧通常会使用在需要及时向主控发送数据的领域中,例如车辆系统的发动机管理、安全气囊控制等。

偶发帧

  • 偶发帧(Spontaneous Frame)是 LIN(Local Interconnect Network)总线中可选的一种帧类型,用于描述一些随机事件或情况的发生,例如传感器数据发生变化或错误事件发生等。
    与无条件帧和事件触发帧不同,偶发帧是由从机自主发送的,但发送的时间不规律、不确定,并不是以一定的周期进行发送,所以在总线上出现的频率和时间不确定。需要注意的是,偶发帧要求传输时间较短,通常在200毫秒以内。
    例如,在汽车领域中,偶发帧可以用于检测车辆各个部件的状态,并定期向主控发送相应信息。例如,刹车控制器可以定期向主控发送车辆的刹车状态,以便主控知道何时需要采取相应的措施。此外,发动机控制器可以向主控定期发送发动机状态,如转速、冷却水温度、发动机报警等信息。
    总之,偶发帧可以用于描述发生在任何时刻的随机事件或情况,可以迅速地向主控提供关键的系统状态信息,帮助主控采取相应的措施。

诊断帧

  • 诊断帧(Diagnostic Frame)是 LIN(Local Interconnect Network)总线中一种特殊的帧类型,用于在 LIN 总线上传输各种诊断信息,如故障码、检测结果等,以便进行故障诊断和修复。通过诊断帧,主机可以主动向从机发送请求,从机也可以向主机发送响应,从而实现数据的双向传输,以及对车辆系统进行诊断和故障排除。
    举例来说,在汽车领域中,诊断帧可以用于以下场景:
  • 诊断故障:主控通过向车辆上的各个部件发送请求,获取诊断信息,从而诊断车辆是否存在故障。清除故障码:在排除故障后,主控可以向车辆的故障码存储器发送指令,清除之前存储的故障码。执行某个测试任务:例如发送一个80帧(在汽车领域中,80帧通常是指由48位数据、保留位和校验位组成的帧)来测试流量细节。

在 LIN 总线中,诊断帧一般由两个部分组成:

  • 服务标识符(Service Identifier):服务标识符用于定义具体的诊断服务,如读取故障码、清除故障码、获取实时数据等。
  • 数据域(Data Field):数据域包含具体的诊断数据,例如读取到的故障码、实时数据的数值等。

通过诊断帧,主机可以向从机进行诊断和控制,同时也能很好地保护车辆的安全性和可靠性,是 LIN 总线中不可或缺的帧类型之一。

参考文章:

知乎

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小昭dedug

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

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

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

打赏作者

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

抵扣说明:

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

余额充值