从上到下,深入理解LIN协议 及 进阶问题

目录

  • 一、当LIN总线静默4s-10s时,节点自动进入休眠状态。这个“自动进入休眠状态”是怎么实现的?
  • 二、帧的架构设计
    • 2.1 问题提出
    • 2.2 帧设计
  • 三、帧超时功能
  • 四、主节点如何接收从节点上报的数据?
  • 五、网络管理
    • 5.1 当功能开关关闭时,应该让LIN总线休眠,降低电量消耗
    • 5.2 实现
  • 六、常识
  • 七、事件触发帧的设计
  • 八、状态管理
    • 8.1 从机节点的状态上报
    • 8.2 自我保护/安全模式
  • 九、硬件架构

一、当LIN总线静默4s-10s时,节点自动进入休眠状态。这个“自动进入休眠状态”是怎么实现的?

LIN总线本身具有一种“线与”的特性,当总线处于空闲状态(即没有节点发送数据)时,总线会保持隐性电平。

而LIN节点内部通常会有一个定时器或时钟机制,用于检测总线上的活动时间。当节点检测到总线在4秒至10秒的连续时间内没有活动时(即没有数据帧传输),节点的定时器会触发一个事件,指示节点进入休眠状态。

在休眠状态下,节点会关闭或降低其部分功能,以减少功耗。同时,节点会保持对总线的监听,以便在需要时迅速唤醒。

二、帧的架构设计

2.1 问题提出

举例:主机节点想查询全车的氛围灯(比如有6个灯)的亮度,那这个场景怎么设计帧呢?

首先,我们需要理解车机业务,这个所谓的“查询全车的氛围灯”,并不是我发一个请求,对方给个回复就完了。
车是一个运行态的东西,持续运行的过程中,大部分时候希望可以随时查看各组件是否运行正常。这样的应用场景就决定了:查询状态这个业务并不是一次性的,而是周期性的,连续性的。任意一个时间点一个对手件发生故障或是运行不正常了,主机都需要及时的知道。这体现在很多功能,在SOC侧会有界面显示当前的运行状态是否正常,出问题的给出红色警示或是标记,尤其是一些涉及行车安全的功能,这是很重要的

理解了上述概念,问题就变为了,如何实时地连续地知道全车氛围灯的状态?
答:每个氛围灯都要周期性地不停地上报自己的工作状态。

2.2 帧设计

调度表不停地在轮询,我们需要为每一个氛围灯设计一个帧(对应一个PID),周期性地上报自己的工作状态。就是说,不需要设计“主节点询问的这个帧”,是各氛围灯从节点自己主动地、周期性地连续上报。

三、帧超时功能

帧超时功能在LIN通信中的作用是:当LIN从节点(slave node)发送数据时,主节点(master node)会期望在一定时间内接收到完整的帧。如果从节点发送的帧因为某种原因(如干扰、节点故障等)没有在预期的时间内完成,主节点就会触发一个帧超时事件。这通常会导致主节点停止当前的通信过程,并可能采取其他措施,如重新初始化通信或报告错误。

帧超时功能有助于防止通信中的死锁情况,确保通信能够及时响应并恢复。同时,它也有助于识别并隔离网络中的故障节点,提高整个系统的可靠性。

四、主节点如何接收从节点上报的数据?

驱动层代码属于厂商机密,不能公开,所以本文只会提及大概的流程与思路。
对于MCU来说,从节点上报的数据,来源于协议收发器。以恩智浦TJA1021为例,如下图:
在这里插入图片描述
TJA1021是个协议收发器,兼容了很多LIN通信协议版本(LIN 2.0, LIN 2.1, LIN 2.2, LIN 2.2A等),具体见厂商文档。
硬件一般会配一套对应的驱动程序。
驱动程序一般都会对外开放一些回调接口,以供应用层实现业务。
在主应用启动时,先要运行驱动,运行驱动前会配置一些参数,这其中就包括了数据传输的回调接口。

如:发送数据成功的回调、接收数据成功的回调、通信出现错误时的回调等。

以上面的硬件为例,LIN驱动的回调的函数指针是 Lpuart_Lin_Ip_CallbackType类型,以供参考。

五、网络管理

5.1 当功能开关关闭时,应该让LIN总线休眠,降低电量消耗

比如,主机侧已经关闭了氛围灯开关。那就没有必要,还开启LIN通道,启动调度表、轮询发送帧,这些动作都没有意义。
实战中,发现自己公司的代码就有这个问题。LIN线程一启动时,就开启LIN通信,无论总开关是否关闭,LIN通信就一直跑着,导致MCU、协议收发器、各从机节点,从不进入睡眠状态,浪费了车机的电量。

设计LIN子网时,要做好网络管理。对于通信的睡眠与唤醒做好逻辑控制。按需使用LIN协议,避免不必要的浪费。

5.2 实现

应用层一般无需自己实现 网络的休眠与唤醒,厂商提供的驱动中会有现成的API接口,直接调用就可以。
注意:在进入休眠后,不能让调度表接着跑,总线上有数据传输会打破休眠状态。

六、常识

总线电平12V,最高传输位速率 20kbps,一个LIN网络最多16个节点。
时基(Time Base)是LIN网络中,最小的计时单位,一般是5ms或 10ms。

七、事件触发帧的设计

以查询4个车门的开关状态为例

事件触发帧 ID=0x10,设计到主调度表中。

事件触发帧相关联的无条件帧,有如下4个:
ID=0x11
ID=0x12
ID=0x13
ID=0x14
设计到 冲突解决进度表中。当0x10帧 同时有多个车门进行应答时,激活当前调度表,单独查询每一个车门,轮询过一遍后,返回到主调度表中。

事件触发帧%99的运行状态是,主节点发送0x10帧,4个车门只有一个会回应。冲突解决进度表被触发是极低的概率。

八、状态管理

状态管理是为了检测运行中的错误。错误一旦被发现,根据设计需要采取不同的措施进行排除,一种方法是简单替换掉错误节点,另一种方法是让发生问题的节点进入到自我保护/安全模式(Limp Home Mode)。

8.1 从机节点的状态上报

协议强制规定,每个从机节点都要在它发布的某个无条件帧中包含一个长度为一位的标量信号
response_error,向主机节点报告自身状态。主机节点接收这个信号并且执行分析。

8.2 自我保护/安全模式

从机节点的自我保护/安全模式(Limp Home Mode)是一种容错机制,用于在从机节点发生故障或错误时保持网络的运行能力。当从机节点检测到错误或无法正常工作时,它可以切换到自我保护模式,以确保整个LIN网络不会因单个节点的故障而完全瘫痪。

在自我保护模式下,从机节点可能会采取一系列措施来限制其影响并维持网络的基本功能。这些措施可能包括:

  • 降低功能级别:从机节点可能不再执行其全部功能,而只保留对网络运行至关重要的基本功能。
  • 限制通信:节点可能会减少其通信频率或限制发送的消息类型,以减少对网络的负担和潜在的干扰。
  • 错误报告:尽管在自我保护模式下,节点可能无法执行其正常功能,但它仍然可以向主机节点报告其错误状态,以便主机节点可以采取适当的措施。

通过切换到自我保护模式,从机节点可以在不影响整个网络运行的情况下进行自我修复或等待维修。这种机制在关键应用中尤为重要,如汽车和工业控制系统,其中网络的稳定性和可靠性是至关重要的。

九、硬件架构

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
本文完。

觉得有用的话,动动你发财的小手手,点个赞,^(∩_∩)^ 谢谢~

缩写全称解释
ISRInterrupt Service Routine中断服务程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/479233.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

乐得瑞科技PD协议芯片:OTG与充电并行,引领数据交互

在科技日新月异的今天,数据交互的方式对于我们的日常生活和工作都起到了至关重要的作用。但在OTG技术诞生之前,这一过程却显得相当繁琐和耗时。想象一下,你需要将数码相机的照片导入到笔记本电脑中,却不得不频繁地拔出内存卡&…

✅技术社区—使用Redis BitMap实现签到与查询历史签到以及签到统计功能

一、前言 签到是一个很常见的功能,如果使用数据库实现,那么用户一次签到,就是一条记录,假如有100万用户,平均每个用户每年签到次数为30次,则这张表一年的数据量为 3000 万条,一般签到记录字段不…

揭秘项目管理多重益处:加速产品上市、优化资源利用,提升质量与满意度等秘诀

一、引言 在飞速发展的商业环境中,项目管理已经成为企业成功的关键要素之一。正如项目管理大师哈罗德科兹纳所言:“项目管理不仅仅是关于完成任务的工具,更是一种战略武器,能够帮助企业获得竞争优势。”项目管理的好处多种多样&am…

Apache FtpServer在Windows上下载安装与使用

Apache FtpServer在Windows上下载安装与使用 1、Apache Ftp Server下载 进入apache官网 https://mina.apache.org/ftpserver-project/old-downloads.html 下载自己使用的版本。 Apache FtpServer 1.1.1及以下的版本需要JDK1.7的支持 Apache FtpServer 1.1.1以上的版本需要JDK…

Linux--任务管理与守护进程

目录 任务管理 进程组概念 作业概念 会话概念 补充 守护进程 基本概念 守护进程的查看 守护进程的创建 自己手写守护进程 使用系统调用函数创建守护进程 任务管理 进程组概念 每一个进程除了有一个进程ID之外,还有一个进程组ID,进程组是一个或…

新零售SaaS架构:线上商城系统架构设计

零售商家为什么要建设线上商城? 传统的实体门店服务范围有限,只能吸引周边500米以内的消费者。因此,如何拓展服务范围,吸引更多的消费者到店,成为了店家迫切需要解决的问题。 缺乏忠实顾客,客户基础不稳&a…

clickhouse突然启动不起来问题排查

场景: 在实现postgreql数据迁移到clickhouse中,想使用MaterializedPostgreSQL的功能实现,但是中途clickhouse突然挂了,就再启动不了了。 现象: systemctl start clcikhouse-server启动报错 [rootlocalhost clickhous…

python矢量算法-三角形变化寻找对应点

1.算法需求描述 现有随机生成的两个三角形A与B,在三角形A中存在Pa,使用算法计算出三角形B中对应的点Pb 2.python代码 import numpy as np # 计算三角形A的面积 def area_triangle(vertices): return 0.5 * np.abs(np.dot(vertices[0] - vertices[…

用python爬取CSDN博客的总字数

一、下载pycahrm 此处推荐博客:PyCharm安装教程,图文教程(超详细)-CSDN博客 二、安装相应的库 pycharm安装库的步骤: 1、打开pycharm; 2、在菜单栏中,选择 "file">"setti…

d3dcompiler43.dll缺失怎么修复,教你五个方法快速搞定

在数字世界的深渊中,有一个名为d3dcompiler_43.dll的神秘文件,它就像一把打开现代科技之门的钥匙。这个文件是DirectX 12的一部分,由微软公司开发,用于编译和处理图形数据。 d3dcompiler_43.dll是一个动态链接库(DLL&…

代码随想录算法训练营第三十一天 | 455. 分发饼干、376. 摆动序列、53. 最大子数组和

代码随想录算法训练营第三十一天 | 455. 分发饼干、376. 摆动序列、53. 最大子数组和 455. 分发饼干题目解法 376. 摆动序列题目解法 53. 最大子数组和题目解法 感悟 455. 分发饼干 题目 解法 class Solution { public:int findContentChildren(vector<int>& g, vec…

AcWing 1250. 格子游戏 (并查集,坐标变换)

记录此题的目的&#xff1a; 明确二维的坐标可以映射到一维&#xff1a;在x和y都是从0开始的前提下&#xff0c;假如图形列数为n&#xff0c;(x,y)映射到一维可以写成x * n y。并查集并不好存储二维数据&#xff0c;如果遇到二维数据可以将其映射到一维。 Alice和Bob玩了一个…

Amazon Bedrock 实践 | 动手玩转 Claude 3

生成式 AI 和大模型在 2024 年已经进入落地实践阶段。因此&#xff0c;围绕开发者在生成式应用程序开发中的主要痛点和需求&#xff0c;我们组织了这个 “Amazon Bedrock 实践” 的系列&#xff0c;希望可以帮助开发者高效地上手生成式 AI 和大模型的应用开发&#xff0c;本篇为…

Spring:面试八股

文章目录 参考Spring模块CoreContainerAOP 参考 JavaGuide Spring模块 CoreContainer Spring框架的核心模块&#xff0c;主要提供IoC依赖注入功能的支持。内含四个子模块&#xff1a; Core&#xff1a;基本的核心工具类。Beans&#xff1a;提供对bean的创建、配置、管理功能…

第十三届蓝桥杯省赛真题 Java B 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 星期计算试题 B: 山试题 C: 字符统计试题 D: 最少刷题数试题 E \mathrm{E} E : 求阶乘试题 F : \mathrm{F}: F: 最大子矩阵试题 G: 数组切分试题 H: 回忆迷宫试题 I: 红绿灯试题 J 拉箱子 发现宝藏 前些天发现了一个巨牛的人工智能学习…

C++ 侯捷 程序设计(Ⅱ)兼谈对象模型 笔记

Conversion function 转换函数 侯捷老师使用分数 Fraction举例&#xff0c;分数理应可以被看作是小数 提供了Fraction类对象一个转换为double的方法&#xff0c;当碰到需要转换为double的情况下&#xff0c;会调用该方法。 黄色的就是转换函数&#xff0c;没有return type&am…

【免费】基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序对应文章《Power System Dynamic State Estimation Using Extended and Unscented Kalman Filters》&#xff0c;电力系统状态的准确估计对于提高电力系统的可靠性、弹性、安全性和稳定性具有重要意义&a…

RIPGeo代码理解(五)utils.py( 辅助函数)第一部分

​ 代码链接:RIPGeo代码实现 ├── lib # 包含模型(model)实现文件 │ |── layers.py # 注意力机制的代码。 │ |── model.py # TrustGeo的核心源代码。 │ |── sublayers.py # layer.py的支持文件。 │ |── utils.p…

详解Python的函数嵌套

Python语言允许在定义函数的时候&#xff0c;其函数体内又包含另外一个函数的完整定义&#xff0c;这就是我们通常所说的嵌套定义。 实例1&#xff1a; def OutFun(): #定义函数OutFun()&#xff0c;m3 #定义变量m3;def InFun(): #在OutFun内定义函…

python学生作业管理系统flask-django-nodejs-php

课题主要分为三大模块&#xff1a;即管理员模块和学生、教师模块&#xff0c;主要功能包括&#xff1a;学生、教师、作业信息、学习模块、教学评价、学习情况等&#xff1b; 关键词&#xff1a;学生作业管理系统&#xff1b;作业信息 目录 摘 要 I Abstrac II 目录 III 1绪论 1…