目录
- 一、当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网络不会因单个节点的故障而完全瘫痪。
在自我保护模式下,从机节点可能会采取一系列措施来限制其影响并维持网络的基本功能。这些措施可能包括:
- 降低功能级别:从机节点可能不再执行其全部功能,而只保留对网络运行至关重要的基本功能。
- 限制通信:节点可能会减少其通信频率或限制发送的消息类型,以减少对网络的负担和潜在的干扰。
- 错误报告:尽管在自我保护模式下,节点可能无法执行其正常功能,但它仍然可以向主机节点报告其错误状态,以便主机节点可以采取适当的措施。
通过切换到自我保护模式,从机节点可以在不影响整个网络运行的情况下进行自我修复或等待维修。这种机制在关键应用中尤为重要,如汽车和工业控制系统,其中网络的稳定性和可靠性是至关重要的。
九、硬件架构
本文完。
觉得有用的话,动动你发财的小手手,点个赞,^(∩_∩)^ 谢谢~
缩写 | 全称 | 解释 |
---|---|---|
ISR | Interrupt Service Routine | 中断服务程序 |