tag 标签: LIN总线

相关帖子
相关博文
  • 热度 1
    2023-1-5 10:06
    372 次阅读|
    0 个评论
    科普系列:诊断路由类型简介及测试实践
    简介 当前车载以太网得到了大范围应用,但出于成本、可靠性等综合因素的考虑,CAN和LIN仍大范围应用于车载总线中,CAN和LIN之间的信息交互的需求仍然很大,承载着 CAN -CAN,CAN - LIN之间信息路由的“网关”,可能不再是独立的物理实体(单独网关控制器),但对应逻辑实体依然发挥着十分重要的作用。 诊断路由的作用和路由方式的选择 在研发阶段的诊断测试过程中,我们一般将被测的诊断网段直连至诊断测试设备进行测试,但在成品汽车中,各电子部件之间通过线束直连在一起,而线束由胶皮或其他防护材料包裹,如果车辆已经生产完成或者已经售出,此时想对某个单独的样件进行诊断,我们拆下零件剪开线束再接到诊断仪上进行测试是不现实的。而如果我们给每部分定义不同的诊断ID,从一条预留出的用于诊断网段发送诊断请求,通过诊断ID判断是对哪个样件进行诊断请求并将该诊断请求通过网关路由到相应的ECU上,之后,样件的诊断 响应 再通过网关路由回我们预留的诊断线路上。这样,我们只需要预留一条总线,就可以对全车支持诊断功能的ECU进行诊断。而不同的零件的诊断请求和诊断响应通过网关路由的行为称之为诊断路由,如下图。 对于需要路由的信息,我们一般有以下几种方式对其路由: 1)直接报文路由 无论源网段的发送模式(事件、周期或者其他形式),网关在从源网段接收到报文后立即将报文路由到目标网段,如果没有收到源报文,则不需要路由。可以改变ID,但不可以改变报文中信号的值 、 Layout以及DLC,转发速率较快。 2)周期报文路由 在网关路由功能激活状态下,需要周期性的将报文从源网段发送到目标网段的模式称之为周期报文路由。可以改变ID,但不可以改变报文中信号的值 、 Layout以及DLC。 3)直接信号路由 在此模式下,可以更改报文中的 ID 、 DLC 、 信号的布局和长度。网关在从源网段接收到信号后立即路由到目标网段,如果没有 收到源信号,则不需要向目标网段路由。 4)周期信号路由 如果需要路由的信号来自多个报文,则可以使用周期信号路由模式。网关将从多个源报文导出的信号重新组合成一个新的目标报文,并以周期方式发送。 对于诊断报文,我们对其进行路由时不需要修改其数据场,同时大部分情况下我们不需要诊断报文在目标网段进行周期性发送(为维持当前会话周期性发送3E 80 等情况除外),与此同时,诊断报文对顺序,时效性和报文完整度也有一定要求。因此这种情况下我们对诊断报文采用直接报文的形式进行路由是较为合理的。 诊断路由的测试环境 以使用CANoe和VN设备为例,进行诊断路由测试的环境如下: CANoe:使用Vector公司的CANoe软件来模拟除了DUT以外的其他网络节点;仿真各节点的报文发送与接收;记录检测总线报文。 VN1640A:提供CAN总线和LIN总线的硬件接口,结合CANoe进行信号和报文的采集与输出 Power supply:对DUT和LIN总线提供供电电压和接地。 R:终端电阻 诊断路由常见的功能与测试 1)网关诊断网段测试 一般情况下网关最多只有两个网段支持诊断(其中一条用于远程诊断),即我们使用网关本身的诊断请求ID通过不同的网段向网关进行诊断请求,应该有且只有两条网段发送时,DUT才会给予响应,使用其他网段对网关进行诊断请求网关应该不予响应。 网关是路由该网关下支持诊断功能的样件,对于网关自身的请求ID和诊断ID,一般不参与路由且只有规定的至多两路总线可以支持与网关本身进行诊断通讯。 2)网关诊断路由的一致性测试 根据路由表仿真源网段报文,观察我们仿真的源网段的诊断报文是否按照路由表正确地路由(包括ID 、 DLC 、 数据场等)。 3 )网络数据映射功能 当我们通过诊断将一网段的数据 映射 功能打开时,此网段的数据能够全部映射到诊断网段,无论它是否在路由表中;当数据映射功能关闭时,此网段的数据停止映射。开启此功能可以很方便的通过OBD功能来读取其他网段上的应用报文、网络管理报文、诊断报文,方便工程师和售后维修人员对总线进行设置和维修。 4 ) gatewaying-on-the-fly 在诊断消息需要多帧发送的时候,如果存在该功能,路由将在所有数据被接收前就开始转发(当达到指定阈值时),如果我们需要传输的数据量较大,使用该功能可以节省内存和时间。 CA N- L IN 等带协议转换的路由 在传统网关的路由中经常涉及到不同传输协议间的路由,例如CAN FD - CAN,CAN - LIN等,我们以CAN - LIN的路由作为介绍。 由于CAN和LIN的传输协议不一致,网关在源网段以 CAN的传输层协议接收数据后,在LIN的网段按照LIN传输层协议发送数据。CAN和LIN的报文虽然都是8字节,但由于传输层协议不同, CAN和LIN网段的每帧报文传输的数据内容都是不一致的。此外,由于CAN和LIN的传输速率不一样,CAN网段接收数据后存储在缓存中,在LIN网段按顺序发出。 因此,当我们在作为源网段的CAN上发送一条诊断请求消息时,CAN的诊断消息首先存储在网关的缓存中,等待LIN的调度表执行到0x 3C 的报文时再从缓存中发出到LIN总线上。 发送和接收过程如下图: 其中,虚线箭头代表网关发出的LIN报文头。 小结 随着电子电器架构的升级换代,网关的“型态”和功能特性都呈现了新的变化。但如本文介绍的,其基础的、传统的功能特性会长时间地存在,对其验证测试是很重要的工作。 北汇信息紧跟“网关”技术发展态势,专注于汽车电子测试,通过与各 OEM的合作,从源头掌握了各类型网关路由的策略和设计需求,积累了丰富的测试实践经验,覆盖了第一代和第二代及第三代架构下的网关。本文对传统网关中的诊断路由进行了简单的介绍,而后续文章我们将针对新一代“网关”,其新的功能特点、构成型态以及测试方案与大家继续探讨和分享。
  • 热度 3
    2022-10-8 11:05
    8064 次阅读|
    0 个评论
    一、LIN总线帧结构 一个完整的LIN总线报文帧“Message Frame”包含报头“Header”和响应“Response”,主任务发送报头,从任务用响应来补充报头形成完整的报文 。 截取自LIN Specification Package Revision 2.1 其中 帧头包括间隔 场 、同步段以及 标识符场 ,应答包括数据段和校验和 场。每个字节之间存在字节间隔(Inter-byte Space);在报头与响应之间存在响应间隔(Response Space);两帧LIN报文之间存在帧间间隔(Inter-frame Space)。下面将详细介绍每个段的具体内容格式。 1.间隔场 间隔场由间隔信号和间隔界定符组成。间隔场表示一帧报文的起始,由主节点发出。间隔信号至少由13个显性位组成,间隔界定符至少由1个隐形位组成。间隔场是唯一一个不符合字节场格式的场,从节点需要检测到至少连续11个显性位才认为是间隔信号。 截取自LIN Specification Package Revision 2.1 2.同步场 同步场顾名思义它的作用是确保所有从节点使用与主节点相同的波特率发送和接收数据,以下降沿为判断标志,同步段采用一个固定的字节结构0X55。 从节点通过接收主节点发出的同步段,计算出主节点位速率,根据计算结果对自身的位速率重新作调整。计算公式如下:1位时间 =(第7位的下降沿时刻 - 起始位的下降沿时刻)/ 8 截取自LIN Specification Package Revision 2.1 3.标识符场 标识符场由两部分组成,受保护 ID 段的前 6 位叫作帧 ID(Frame ID),加上两个奇偶校验位后称作受保护 ID段。 截取自LIN Specification Package Revision 2.1 帧ID的范围在0x00~0x3F之间,共64个。帧ID标识了帧的类别和目的地。从任务对于帧头作出的反应(接收/发送/忽略应答部分)都是依据帧ID判断的。如果帧ID传输错误,将会导致信号无法正确到达目的地,因此引入奇偶校验位。校验公式如下,其中“⊕”代表“异或”运算,“ ¬ ”代表“取非”运算。 P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4 P1 = ¬ (ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5) 4.数据场 数据场用于存储节点发送的数据,数据场长度1到8个字节,采用低字节先发,低位先发策略,如果某一信号长度超过1个字节,采用低位在前的方式发送。 截取自LIN Specification Package Revision 2.1 5.校验和场 检验和场用于校验接收到的数据是否正确。校验分为经典校验(Classic Checksum)和增强校验(Enhance Checksum)。经典校验仅校验数据场,适用于诊断帧和与 LIN1.x 从机节点通信;增强校验校验标识符场和数据场,适用于与 LIN2.x 从机节点通信(诊断帧除外)。 采用标准型校验和还是增强型校验和由主机节点管理,发布节点和各收听节点根据帧ID来判断采用哪种校验和。 截取自LIN Specification Package Revision 2.1 LIN总线帧结构干扰 LIN帧的不同场格式需要按照协议进行开发,为了测试样件是否不响应错误的帧结构,就需要对LIN帧中各个场分别进行干扰以达到所需要的测试目的。实现干扰的方式有很多,本文通过CAPL自带函数来进行相应的干扰,下面将对CAPL函数 linSendHeaderError() 、 linInvertRespBit() 、 linInvert Header Bit () 进行介绍。 1. linSendHeaderError () 该函数用于干扰报文头,包含三个参数,一个是syncByte,用于设置同步场位;一个是idWithParity,用于设置标识符场;最后一个是StopAfterError,该位置1表示如果报头中一旦有某个场出现错误,则终止之后报头场的发送。 具体参数如图所示 截取自Vector Browser Helper 下面通过一个干扰ID为0x33的报文PID场中奇偶校验位的实例,来帮助大家进一步深入理解该函数。 // Force an error in header of LIN frame with ID=0x33 by setting wrong protected ID on key 'h' { byte linID, protectedID, corParity, errParity, errPID; // calculate protected ID with wrong parity bits linID = 0x33; // use frame ID=0x33 protectedID = linGetProtectedID(linID); // get protected ID 6; // extract parity (0xC=0=11000000) errParity = (corParity ^ 0x2) & 0x3; // calculate wrong parity using XOR errPID = linID | (errParity << 6); // calculate PID with wrong parity linSendHeaderError(0x55, errPID, 0); } 6提取出奇偶校验位,与0x2异或干扰校验位,最后通过errPID = linID | (errParity << 6)得出一个干扰过奇偶校验位的PID值并赋值给自己先前声明的errPID即得到了一个带有错误奇偶校验位的PID值,通过函数linSendHeaderError(0x55,errPID,0)发送错误PID值的LIN报头,即实现了对PID场的干扰。 2.linInvertRespBit() 该函数用于干扰响应,主要关注的参数如下,byteIndex用来指定干扰数据场第几字节(如果该参数值设置为报文长度,则干扰的是校验位长度);bitIndex用来指定干扰相对应第几位;level值为0的话,则把相应位从隐形干扰成显性,如果为1则反之从显性干扰成隐性;numberOfExecutions这个参数用来定义干扰的个数。 具体参数如图所示 截取自Vector Browser Helper 下面通过下面的示例,来帮助大家进一步深入理解该函数。 on key 'i' { ... // Invert first bit of byte field 8 for LIN frame with ID=0x33 linInvertRespBit(0x33, 7, 0); ... // Invert bit 7 of checksum byte field for LIN frame with ID=0x33 linInvertRespBit(0x33, 8, 6); ... // Invert stop bit of byte field 8 for LIN frame with ID=0x33 linInvertRespBit(0x33, 7, 8); ... } 第一个函数是干扰第8个比特,由于bitIndex是0,所以干扰的是该比特的第一个位,其中第二个函数如果byteIndex的长度和DLC长度一样,则说明干扰的是该报文的checksum位。 3. linInvert Header Bit () 该函数用于干扰报头, 主要关注的参数如下,byteIndex用来指定干扰数据场类型,如果为-1,则是干扰间隔场,如果为0干扰同步场,如果为1干扰PID场;bitIndex用来指定干扰相对应第几位,如果为8则是干扰stopbit;level值为0的话,则把相应位从隐形干扰成显性,如果为1则反之从显性干扰成隐性;numberOfExecutions这个参数用来定义干扰的个数;disturbAfterHeaderID这个参数用来指定在该ID之后进行干扰,这个参数需要搭配waitForHeaders使用,如果设置waitForHeaders为0,disturbAfterHeaderID为5,则是等收到ID为5的报文后,在下一个报头直接进行干扰。 具体参数如图所示 截取自Vector Browser Helper 小结 通过上述的介绍,大家应该对基于CAPL对LIN报文各场干扰有了一定的了解了。通过发送干扰的报头或者对从节点的响应进行干扰,然后再发送正常帧,即可通过该正常帧的数据,对ResponseError位是否能正确置位进行测试了。 北汇信息作为Vector中国的合作伙伴,致力于为中国汽车客户提供优质的工具支持、解决方案以及测试服务。 图片来源:LIN Specification Package Revision 2.1 以及Vector