【Lin通信】LIN Driver模块详细介绍

目录

1. LIN协议介绍

1.1 LIN协议概述

1.1.1  LIN协议版本和规范组成

1.1.2 LIN总线特点

1.1.3LIN网络拓扑

1.1.4调度表

1.2 LIN协议规范

1.2.1 帧结构

1.2.2 帧类型

1.2.3LIN网络管理

2. RH850芯片手册LIN Controller简介

2.1 RH850芯片LIN模块功能简介

2.2RH850芯片LIN模式

2.3LIN Reset Mode

2.4LIN Mode

2.5 LIN Master Mode

2.5.1 Header Transmission

2.5.2 Response Reception

2.6 LIN Slave Mode

2.7 Transmission/Reception Data Buffering

3. LIN Drive模块详细设计

3.1 LIN Drive状态机

3.2  LIN状态切换

3.3 LIN Driver实现的一些重要需求

3.4 Wakeup和WakeupInternal的区别

3.5 关键API解析

3.5.1 Lin_Init

3.5.2  Lin_CheckWakeup

3.5.3 L​​​​​​​in_SendFrame

3.5.4 Lin_GoToSleep

​​​​​​​3.5.5 Lin_GoToSleepInternal

​​​​​​​3.5.6 Lin_Wakeup

​​​​​​​3.5.7 Lin_WakeupInternal

​​​​​​​3.5.8 Lin_CheckStatus

4. Davinci配置LIN Driver

5. LIN Driver模块分析

​​​​​​​5.1 数据发送

​​​​​​​5.2 数据接收

​​​​​​​5.3 数据一致性


前言

  纵向来看,LIN Driver属于LIN通信协议栈的底层驱动模块,横向来看LIN Driver属于MCAL层(microcontroller abstraction layer)。Lin Driver驱动模块执行硬件访问操作,给上层模块提供独立于硬件的API访问接口。LIN Interface模块是唯一能够直接访问LIN Driver模块的上层模块。

为了较详细的接收LIN Driver,本文将从以下五个大的方面展开叙述:LIN协议介绍、RH850芯片手册LIN Controller简介、LIN Driver AUTOSAR详细设计文档详解、MCAL配置工具LIN Driver配置、LIN Driver模块代码分析。

完成以上分析后,能回答以下问题:

-- 数据怎么完成收发功能?

-- 怎么保证数据传输的一致性?

-- LINDriver怎么实现sleep和wake up的?硬件实现还是软件实现?

1. LIN协议介绍

1.1 LIN协议概述

(Local Interconnect Network)功能简单,实时性低,成本低,是传感器/执行器级的总线。LIN总线的主要目的在于提供一种低成本的车用总线,从而形成对CAN总线的补充。

1.1.1  LIN协议版本和规范组成

LIN协议版本包括1.xxx和2.xxx两个大版本,最新版本未2.1版本。规范版本内容包括:

1)物理层规范:物理层兼容性、波特率误差、事件要求、LIN Driver/Receiver

2)协议规范:信号管理、帧传输、调度表、任务行为管理、网络管理、状态管理

3)传输层规范:PDU规范、通信、错误处理、规定的请求、时间约束

4)节点配置和标识规范:LIN产品标识、从节点模型、PDU结构、节点配置服务、标识

5)诊断规范:诊断级别、基于信号的诊断、传输协议处理、从节点发送句柄、从节点诊断时间要求

6)应用程序接口规范:主要API、节点配置和标识、传输层

7)节点能力语言规范:文件定义、语法

8)配置语言规范:文件定义、语法

1.1.2 LIN总线特点

  1)串行通信,线间干扰小,节省线束,传输距离长

  2)单线传输,增强的ISO 9141,总线电压小于Vbat

  3)最高速率达20Kbit/s

  4)单主多从结构,无需总裁

  5)基于通用UART/SCI的低成本接口硬件,几乎所有MCU都具备总线的硬件基础

  6)从节点无须晶振或陶瓷振荡器就能实现同步

  7)可计算的信号传输延迟时间,网络通信可预期性

  8)可灵活的增加或减少从节点,无需改变其他节点的硬件电路

  9)一条总线最多可连接16个节点

  10)支持多包报文传输,基于ISO15765-2的传输层规范

  11)支持诊断功能,支持基于ISO14229-1的诊断服务

1.1.3LIN网络拓扑

LIN网络上只存在一个主任务,但是可以有多个从任务。主节点(Master Node)同时包括主任务和从任务,从节点(Slave Node)只包含从任务。主任务负责决定总线上发送的报文,从任务负责发送数据。

 主任务发送报头,从任务用响应来补充报头形成完整的报文。LIN网络上可以自由地增减从节点,而不需要改变其他从节点的软件和硬件。报文的内容由ID来定义,所有节点都能够接收总线上的帧。

1.1.4调度表

  LIN网络调度表负责调度网络各报文发送的顺序,为每帧报文分配发送时隙(Slot)。

调度表在网络系统设计阶段确定,LIN调度表是的LIN通信具有可预测性。

 

1.2 LIN协议规范

1.2.1 帧结构

字节间隔位于每个字节之间,响应间隔位于报头和响应之间。响应间隔和字节间隔是

为了留给MCU足够的处理时间处理不同帧长度的数据报文。

  字节场数据是基于SCI(Serial Communication Interface)的通信格式,发送一个字节的

数据需要10个位时间(1起始位+8数据位+1停止位 = 10Tbit)。

间隔场表示一帧报文的起始,由主节点发出。间隔信号至少由13个显性信号组成,间隔界

定符至少由1个隐性位组成。间隔场是唯一一个不符合字节场格式的场。从节点需要检测到

至少连续11个显性位才认为是间隔信号。

同步场发送一个固定字节的数据(0x55),确保所有的从节点使用与主节点相同的波特率发

送和接收数据。

 标识符场存放的是报文的ID(0x00-0x3f)。

 数据场存放报文的数据,数据长度位1到8个字节,采用小端模式,低字节先发,低位先发。

校验和场用来校验接收的数据是否正确,包括经典校验(仅校验数据场,1.3 version)和增

强校验(校验标识符场和数据场,2.0 version)两种校验方式。

1.2.2 帧类型

1)无条件帧:标识符ID范围为0x00-0x3B,主任务发出包头,一个任务响应,一个或多个

任务接收。

  1. 事件触发帧:有一个独立的ID,该ID可以与多个无条件帧关联。在事件触发帧时隙内

发送帧头,只有当相关联的无条件帧内有信号被更新时才发送帧响应。帧响应的第一个数据字节等于标识符,也就是最多可以传输7个字节的数据。如果没有帧响应,帧头被忽略。帧响应可由多个节点发送,发生冲突时切换到“冲突解决调度表”,之后再切换回原来的调度表。

3)零星帧:表示共用一个时隙,在需要时才被发送的一组无条件帧。零星帧的响应仅由主节点发送,若由无条件帧需要发送,则根据帧的优先级裁定发送顺序。若没有无条件帧需要发送,则时隙保持空白。

4)诊断帧:用来传输诊断或配置信息,一般包含8个字节数据。诊断帧ID固定为,0x3C主请求帧,0x3D从响应帧。诊断响应基于ISO15765-2传输层协议和ISO14229应用层协议。

5)用户自定义帧:0x3E

6)保留帧:0x3F

1.2.3LIN网络管理

主节点发送一帧ID为0x3C且第一个字节为0x00的主请求帧来使处于工作状态的从节点进入睡眠。从节点在接收到睡眠指令之后,可以选择不进入睡眠状态而继续工作,这根据应用层协议而定。当总线空闲4-10秒的时候,所有从节点必须进入到睡眠状态。

 在一个处于睡眠状态的LIN网络中,任何一个节点都可以发送唤醒信号。唤醒信号是一个250us(在20Kbit/s波特率下的0xF0)到5ms(在1Kbit/s波特率下的0xF0)的显性电平。每一个从节点都需要检测唤醒信号(持续150us以上的显性位),当检测到唤醒信号之后,在100ms以内完成初始化工作。当从节点发出唤醒信号之后150ms,主节点仍未发送报头时,从节点可以再次发送唤醒信号。当连续发送了3次唤醒信号之后如果主节点仍未发送报头,从节点要等待1.5秒以后才可以再次发送唤醒信号。

2. RH850芯片手册LIN Controller简介

2.1 RH850芯片LIN模块功能简介

  RH850芯片RLIN3模块可根据需求配置为LIN协议接口或者UART接口(本文只分析LIN配置),最多支持同时配置24路LIN。

根据设计需求,可以给LIN模块选择系统高速时钟(CLK_HSB)或者模块时钟(CLK_RLIN,一般选择这个)。

 每一路LIN产生4种中断,RLINxx中断,传输中断,接收完成中断,状态(Error等)中断。

 每一类中断触发源如下表所示。

RH850RLIN3模块硬件上支持LIN 1.xx和2.xx协议,可通过配置寄存器直接配置硬件支持的协议版本,每个协议场(同步场,字节场,检验和场等)。

 

 

2.2RH850芯片LIN模式

  根据需求,RH850 RLIN3可以配置为LIN reset mode, LIN mode, UART mode, LIN self-test mode四种模式,其中LIN mode又有LIN master mode, LIN slave mode(auto baud rate), LIN slave mode(fixed baud rate)三种子模式。

 配置相关的寄存器(RLN3nLMD寄存器的LMD域,RLN3nLMST寄存器的OMM0域)可以完成硬件模式之间的切换。

 各个模式下支持的功能不尽一样。

2.3LIN Reset Mode

配置RLN3nLCUC寄存器的OM0 bit为0,切换到LIN reset模式。可以通过读取RLN3nLMST寄存器的OMM0 bit来确定是否进入LIN reset模式。

LIN Reset Mode下以下寄存器恢复到初始值,LIN通信停止。

RLN3nLTRC, RLN3nLST,RLN3nEST,RLN3nLUOER恢复初始值。

LIN Reset Mode下以下寄存器保持当前值。

RLN3nLWBR,RLN3nLBRP0 ,RLN3nLBRP1 ,RLN3nLMD ,RLN3nLBFC ,RLN3nLSC ,RLN3nLWUP ,RLN3nLIE ,RLN3nLEDE ,RLN3nLDFC ,RLN3nLIDB ,RLN3nLCBR ,RLN3nLUDB0 ,RLN3nLDBRb(b = 1 to 8),RLN3nLUOR1 ,RLN3nLUTDR ,RLN3nLURDR ,RLN3nLUWTDR .

2.4LIN Mode

  LIN Mode包括LIN master mode, LIN slave mode[auto baud rate], LIN slave mode[fixed baud rate]三种子模式。

  LIN master模式下可执行的操作:帧头发送,响应发送,响应接收,唤醒帧发送,唤醒帧接收,错误检测。

  LIN slave模式下可执行的操作:帧头接收,响应发送,响应接收,唤醒帧发送,唤醒帧接收,错误检测。

LIN slave[Auto baud rate]模式下可以根据接收到的帧头的间隔场和同步场数据自适应适配波特率。波特率设定范围为1 kbps--20 kbps。

  LIN slave[Fixed baud rate]模式下,波特率固定,以固定的波特率检测帧头的间隔场,同步场和标识符场数据。

  每种子模式下又包含两种操作模式,LIN operation mode和LIN wake-up mode。也就是说在某种子模式(mater or slave)下可以进程常规通信操作和唤醒操作。

配置相关寄存器进行操作模式的切换。

2.5 LIN Master Mode

2.5.1 Header Transmission

软硬件交互过程:配置相关寄存器(波特率,主模式等)-->设置RLN3mLTRC寄存器的FTS bit为1开始数据发送并等待发送完成中断-->LIN硬件检测FTS bit置位后开始帧头的发送-->发送完成后设置枕头发送成功标志产生发送完成中断-->软件陷入中断,中断函数中完成状体的更新。

 

 2.5.2 Response Transmission

 

2.5.2 Response Reception

 

2.6 LIN Slave Mode

  和Master模式处理类似,这里不再具体分析。

2.7 Transmission/Reception Data Buffering

数据收发都是使用RLN3nLDBR1-8寄存器。

 

3. LIN Drive模块详细设计

3.1 LIN Drive状态机

LIN Drive包括LIN_UNINIT和LIN_INIT两个模块状态。LIN_INIT模块状体下每个LIN通道包含LIN_CH_SLEEP_PENDING, LIN_CH_OPERATIONAL, LIN_CH_SLEEP三个子状态。

LIN_UNINIT: LIN模块没有又被初始化,整个LIN模块不能被使用。

LIN_INIT: LIN模块已经被初始化,每个LIN通道提供的服务已经准备好。

LIN_CH_OPERATIONAL: 当前LIN通道以及被初始化,可以进行LIN网络通信。

LIN_CH_SLEEP: LIN唤醒模式被激活。如果LIN硬件支持,LIN模块进入低功耗模式。

3.2  LIN状态切换

Reset-->LIN_UNINIT:

系统重启后,LIN模块进入LIN_UNINIT状态。

LIN_UNINIT-->LIN_INIT:

LIN_Init函数被调用后,LIN Model进入LIN_INIT状态,设置每个通道状态到LIN_CH_SLEEP状态,使能唤醒检测(可通过LIinChannelWakeupSupport配置项配置),如果硬件支持,设置硬件进入到低功耗模式。

LIN_CH_SLEEP_PENDING-->LIN_CH_SLEEP: Lin_GetStatus函数被调用后,LIN Driver模块直接进入到LIN_CH_SLEEP状态。

LIN_CH_OPERATION --> LIN_CH_SLEEP: Lin_GoToSleepInternal函数被调用后,LIN Driver进入到LIN_CH_SLEEP状态。

LIN_CH_SLEEP-->LIN_CH_OPERATION: Lin_Wakeup/Lin_WakeupInternal函数被调用

3.3 LIN Driver实现的一些重要需求

a. 任何帧的响应必须在下一帧发送之前可用

b. 如果Master节点发出帧头后又要发出响应,帧响应应该由其他的函数调用触发

c. LIN Driver需要以非阻塞的方式将接收的数据拷贝到LinIf层。

d. LIN Driver必须保证收发数据的一致性。在发送完或者接收完一帧报文之前,数据缓冲区需要被保护。

3.4 Wakeup和WakeupInternal的区别

a. Wakeup: LIN Driver接收到LinIf层的唤醒命令,被请求唤醒的通道发送唤醒脉冲到Lin总线上(唤醒其他节点)。

b. WakeupInternal:  LIN Driver接收到LinIf层的唤醒命令,被请求唤醒的通道不会发送唤醒脉冲到Lin总线上。

3.5 关键API解析

3.5.1 Lin_Init

根据用户配置初始化LIN Driver模块(只是模块和通道状态机到初始状态,更具用户配设置寄存器)。

3.5.2 ​​​​​​​ Lin_CheckWakeup

 检测某个通道是否被唤醒。两种唤醒检测方式,一种来自LIN Controller硬件本身,一种来自LIN Transceiver。

  LIN Transceiver触发唤醒事件后,LinIf层通过Lin_CheckWakeup函数确定Lin Driver模块那个通道被唤醒了,这种方式下,仅仅通过Lin Driver来检测某个LIN通道有没有发送唤醒,本身并没有触发唤醒事件。

 LIN Driver模块探测到Rx引脚发送唤醒事件后,Lin_CheckWakeup通过调用EcuM_SetWakeupEvet函数通知到ECUM模块,调用LinIf_WakeupConfirmation函数通知LinIf模块。

3.5.3 L​​​​​​​in_SendFrame

发送一帧数据的帧头,如果当前帧响应由Master发出,同时发出帧响应。在使用Lin_SendFrame函数后,LIN接口必须通过轮询Lin_GetStatus()函数来等待LIN帧的相应响应部分。

3.5.4 Lin_GoToSleep

设置当前LIN通道进入LIN_CH_SLEEP_PENGDING模式。

​​​​​​​3.5.5 Lin_GoToSleepInternal

设置当前LIN通道进入LIN_CH_SLEEP模式。

​​​​​​​3.5.6 Lin_Wakeup

LIN Driver接收到LinIf层的唤醒命令,被请求唤醒的通道发送唤醒脉冲到Lin总线上(唤醒其他节点)。

​​​​​​​3.5.7 Lin_WakeupInternal

LIN Driver接收到LinIf层的唤醒命令,被请求唤醒的通道不会发送唤醒脉冲到Lin总线上。

​​​​​​​3.5.8 Lin_CheckStatus

获取当前LIN Driver模块的传输,接收或者保证状态。如果当前是接收状态且接收成功,Lin_CheckStatus返回接收到的数据到上层模块。

4. Davinci配置LIN Driver

RH850的MCAL配置项基本就是配置LIN协议的内容,具体可以参考前面的协议部分,具体值可根据实际需求来配置。

5. LIN Driver模块分析

​​​​​​​5.1 数据发送

LinIf层的配置项包含LinDriver的Lin_SendFrame函数指针,LinIf层调用Lin_SendFrame函数。

Lin_SendFrame函数当中将上层数据拷贝到数据发送RAM缓冲区。调用Lin_HwSendHeaderInternal函数进行硬件寄存器设置开始发送。

RAM数据填充到数据寄存器当中,同时使能发送中断。

发送中断处理函数中清除中断,同时将发送状态置为LIN_TX_OK。

​​​​​​​5.2 数据接收

接收中断处理函数中清除中断标志,将数据从硬件数据寄存器当中拷贝到RAM缓存区。

LinIF模块调用Lin_GetStatus函数将接收数据拷贝到LinIf层。

​​​​​​​5.3 数据一致性

  数据发送的一致性由上层LinIf模型保证,数据接收在数据Rx中断当中,在进行数据拷贝的过程中不会被字节中断,所以能够保证数据的一致性。

  • 4
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: LabVIEW是一种非常流行的图形化编程工具,可以用它进行各种类型的数据采集、处理和控制任务,包括与LIN总线进行通信LIN总线是一种用于汽车电子中小型设备通信的串行通信协议,不同于CAN总线等其他类型的总线。 使用LabVIEW进行LIN通信需要使用相应的LabVIEW模块或工具包,例如NI-XNET或NI-CAN。此外,还需要相应的硬件支持,例如支持LIN总线通信的NI-XNET硬件。 在LabVIEW中,可以使用GUI编程进行LIN通信,例如创建用户界面并定义通信数据传输格式。可以使用NI-XNET或NI-CAN模块来实现LIN数据的发送和接收,并进行数据解析和分析。 总的来说,使用LabVIEW进行LIN通信是一种非常方便和高效的方法,可以有效地处理和控制汽车电子设备中的数据。 ### 回答2: LabVIEW是一种编程软件,可以帮助工程师和科学家快速开发测试、测量和控制应用程序。而LIN是一种局域网协议,通常用于汽车电子中的通信控制。因此,LabVIEW LIN通信主要是指使用LabVIEW来进行LIN通信控制。 在LabVIEW中进行LIN通信控制通常需要使用NI-CAN工具包,该工具包可以轻松地帮助用户配置和编程LIN通信设备。使用NI-CAN工具包,用户可以直接在LabVIEW中创建和发送LIN消息。同时,用户还可以通过该工具包来读取和解析接收到的LIN消息。 在实际应用中,LabVIEW LIN通信可以帮助用户实现以下功能: 1.发送和接收LIN消息,使不同的汽车电子设备之间可以进行通信。 2.读取和解析接收到的LIN消息,以便进行进一步的处理和控制。 3.设置不同的LIN消息、数据帧和信号,以满足不同的应用需求。 总之,LabVIEW LIN通信可以使得汽车电子工程师和科学家更加轻松地进行LIN通信控制和实现相关应用。它不仅可以减少开发时间和成本,还可以提高系统的可靠性和精度。 ### 回答3: LabVIEW LIN通信是指在LabVIEW开发平台中利用LIN总线进行通信的方法。LIN是一种低速的串行通信总线,可以有效地实现基于网络的控制和监视系统。在LabVIEW中,LIN通信可以通过NI-CAN或NI-XNET模块来实现。 通过NI-CAN模块和LabVIEW,用户可以轻松地创建和通信LIN网络。NI-XNET模块可以使用LIN协议来进行通信,在LabVIEW中通过一个专为LIN设计的XNET库即可实现相应功能。 使用LabVIEW LIN通信可以实现许多应用,例如汽车电子控制系统,航空电子控制系统,工业自动化等。在这些应用中,LIN通信用于传递数据和命令,实现不同设备之间的通信和控制。 总之,LabVIEW LIN通信是一种方便、高效、可靠的通信方式,可以满足不同领域和应用的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汽车电子嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值