【CAN通讯系列15】- CAN网络唤醒过程是怎样的?

为CAN网络管理这个主题,已经写了多篇文章进行铺垫,有必要梳理其中的逻辑,本文将使用下图所示的例子进行说明。

图片

对该图稍作说明:

  • 一个控制器可能存在多种唤醒源,包括本地唤醒和网络唤醒等方式,图中这两种方式都有使用;

  • 一个控制器参与CAN通讯,其他硬件组成有CAN收发器,CAN控制器和微控制器,可参考:【CAN通讯系列14】- CAN通讯由哪些硬件组成?

  • 不同CAN总线网络需要通过网关进行跨网络通讯。 

接下来就正式开始介绍:

1 控制器最初怎么被唤醒 

当整车进入休眠状态,即所有的控制器都睡觉中,那怎么让它们醒来?也就是说用何种唤醒方式?

【CAN通讯系列补充篇】- 唤醒源浅析提到了本地唤醒,包括KL15硬线唤醒和传感器唤醒等方式。上图中假设IEB的本地唤醒源之一是制动踏板行程传感器BPS,在整车某个唤醒场景下,BPS感知到了变化,从而唤醒的硬线信号有变化被IEB检测到了,那么处于休眠的IEB将被唤醒,对应着图中1区域。   

通常情况下,其他一些控制器也需要参与实现这个唤醒场景下的功能,这里假设EPS和VCU需要参与。此时IEB醒了,而EPS和VCU还在睡,这就意味着IEB需要去唤醒他俩,那通过怎样的方式?本文我们选用CAN网络唤醒。      

2 CAN网络唤醒实现过程是怎样的  

IEB可以通过网管报文去唤醒EPS和VCU,大致过程是:IEB被传感器BPS唤醒后,它的网络管理状态会产生变化,由睡觉模式转为网络模式;然后IEB会发出网管报文,EPS和VCU的CAN收发器会陆续收到该网管报文,识别到需要唤醒,最后它们也会发网管报文,告诉IEB醒来了,可以一起搞事情。对应到上图的234部分。   

图片

Source:从ECU和CPU视角理解AutoSar网络管理_汽车下电后会断kl30

在这个过程中,实现内容其实很复杂,有几方面的问题值得后续深入探讨,比如:

1)网络管理状态机,即这些控制器都分别如何管理网络状态,就如上图示意一种网络管理状态机。之前文章已经介绍了两种:OSEK NM和AutoSAR, 有兴趣的话可以先了解后者。

2)网管报文,其定义如下所示。针对本文的例子,IEB发送的网管报文是怎样的?而EPS和VCU的又是怎样的?

图片

这是从网管报文自身定义出发需要弄清楚的问题,另一个方面是从控制器角度,这几个控制器需要怎样发送网管报文,比如以怎样的发送周期,要发送多少帧,和什么时候开始或停止等内容。

3 小结   

以上内容通过一个简单的例子对CAN网络管理唤醒过程进行概述性的说明,同时对关键过程步骤提出了很多基础而重要的问题,我相信如果你已经了解过我所提到这几篇文章,应该很能理解本篇文章我要表达的想法,那么后续文章就对这些更具体的细节各个击破。

图片

在边学习边积累的过程中,把CAN通讯系列发展成两条路径,稍作说明:

CAN通讯系列是本系列主题的主干,写作安排尽可能有延续性和逻辑性;而CAN通讯系列补充篇是为主干铺垫的,相对分散一些,会通过转发或转载形式来补充。

-------------------------------------------------------------------------------------------------------------------------
创作不易,欢迎点赞收藏关注。更多文章可关注 “谦益行公众号”。
汽车研发交流群,有兴趣的朋友可添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车行业从业人员。
### 汽车 CAN 总线休眠唤醒机制解释 #### 1. CAN 总线的工作原理 Controller Area Network (CAN) 是一种用于汽车内部通信的串行总线系统,旨在支持分布式实时控制。该协议允许微控制器和其他设备在网络内交换数据而无需复杂的硬件连接。 #### 2. 进入休眠模式的原因 为了减少不必要的电力消耗,在不需要活跃的数据传输时,CAN 节点能够切换至低功耗状态——即所谓的“休眠”或 "Bus-Sleep"[^1]。这种特性对于提高电动车和混动车型的能量效率特别重要。 #### 3. 如何进入休眠模式 当网络上的所有节点都停止发送消息一段时间后,它们将自动协商并共同转入休眠模式。具体来说,一旦检测到连续多个比特时间无活动,则认为整个网络已处于静默期,并启动计时器;如果在此期间没有任何新的报文被发出,则会在超时后正式宣告进入睡眠阶段[^3]。 #### 4. 唤醒条件与过程 即使是在休眠状态下,CAN 接收端仍然保持对线路电压变化敏感的状态。只要监测到了有效的帧起始信号(Start Of Frame, SOF),就足以使接收方退出休眠并准备处理即将到来的信息包。此外,STM32F103 微控制器可以通过 CubeMX 和 FreeRTOS 实现更精细的管理逻辑:当中断服务程序接收到上述提到的 SOF 后,它会负责清除 SLEEPDEEP 寄存器中的相应标志位来完成最终的激活操作[^2]。 ```c // STM32F103 中断服务函数示例代码片段 void CAN_IRQHandler(void){ if(CAN_GetITStatus(CAN1, CAN_IT_WKU)){ // 清除SLEEP位以恢复正常工作模式 SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; // 处理其他必要的初始化任务... // 清除唤醒中断标记 CAN_ClearFlag(CAN1, CAN_FLAG_WKU); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值