CAN网络管理Autosar(入门)

一,个人小心得

作为刚入门两个月汽车电子行业的软件工程师,现阶段在学习汽车组合开关的测试(主要用CANoe软件),在学习过程中总结了一些自己理解的知识点,当然也希望得到大佬们的指点。当然如果要做一个优秀的汽车电子软件工程师必不可少以下技能:
语言
c语言,CAPL语言

软件:
1,CANoe软件(很强大的软件,德国Vector公司的产品,主要用来测试)

2,DaVinci软件(用于编写Autosar架构的软件)有两款,如下图在这里插入图片描述
DaVinci Developer: 主要用来设计AppL的程序架构
DaVinci Configurator pro: 主要用来配置BSW和自动生成RTE的

3,Matlab: 主要是用Simulink做代码生成的,就是我们的应用层软件就需要Matlab来开发,当然手写也是可以的,不过弊端就很多了

4,IAR(用来Debug以及烧录程序),eclipse(编译环境)

5,keil5

硬件
1,示波器的使用(可以用来测量CAN总线电压,CAN物理层参数,CAN数据链路层参数等。必备)
2,PWM(主要用来编写控制电机的转速及唤醒),I2C,ADC(数模转换),SBC电源芯片,看门狗(程序必备),

知识点
1,NM : 网络管理(Network Management)

2,UDS: 统一诊断服务 (Unified diagnostic services )

3,CAN: CAN(Controller Area Network,控制器局域网络) 汽车上必用的通信总线,用于传输各个ECU(电子控制单元)的数据收发

4,LIN总线

5,Autosar:就是AUTomotive Open System ARchitecture的简称,中文翻译就是汽车开放系统架构,将汽车电子控制单元(ECU)的软件底层做了一个标准的封装。使得大家都能共用一套底层软件,只需要修改其中的一些参数,就可以匹配不同硬件,也可以匹配不同的应用层软件。如此之后,用户只需要专心负责应用层功能开发即可,底层都交给AutoSAR工程师就行了。

二,什么是网络管理NM

车载网络总线管理的目的是使网络中的ECU节点有序地睡眠和唤醒,在没有通信需求的时候睡眠,
可以节约电池的能量。

CAN总线上的网络管理,是一种无中心式的网络管理,网络中的每个节点都依赖于自己和别人的网络管理报文(NM PDU)来实现通信的睡眠和唤醒,这个NM PDU是周期性发送的,对于每个ECU来说,收到别的ECU发送的NM PDU则意味着当前的网络有通信需求,自己发出NM PDU则是告知别的ECU自己有通信需求。

整个网络管理模式如下图。
在这里插入图片描述
由上图可知:

网络管理有三个模式
1,Bus-Sleep Mode(总线睡眠模式)
2,Net Work Mode(网络模式)
3,Prepare Bus-Sleep Mode(预总线睡眠模式)

Net Work Mode(网络模式)又有三种状态
1,Repeat Message State(重复报文状态)
2,Normal Operation State(常规操作状态)
3,Ready Sleep State(准备睡眠状态)

接下来一一拆解上图过程

NM_01
节点供电状态(KL30电源线)从电池off切换到电池on 后(此时汽车并没有点火。ignition off),,节点进行网络管理模块初始化,初始化完成后节点进入睡眠模式,并且需要立即具备被主动唤醒请求或者被动唤醒请求唤醒的能力;在这里插入图片描述
在CANoe软件上可以看出,不收发任何报文,总线处于睡眠模式。可以接受被动唤醒NM_02 (随便发送个网络报文),或者主动唤醒NM_03(KL15点火线on,:即汽车上点火按钮按下;或一些厂家定义的按键唤醒,如:近光灯按下)

NM_02
当节点处于睡眠模式时,如果收到被动唤醒,那么节点将离开睡眠模式并进入重复报文状态中的NM正常发送状态。进入NM正常发送状态后,在计时器Repeat Message Timer(3200ms为例)超时以前,节点必须以正常周期CanNmMsgCycleTime(500ms为例)发送网络管理报文。在节点收到网络管理报文时,它向总线发出的第一帧报文可以是网络管理报文也可以是应用报文。

NM_03
如果节点在总线睡眠模式下检测到主动唤醒请求,(此时如下图1,总线被唤醒,正常接收报文)首先进入NM PDU快速发送状态。当节点因主动唤醒请求需要唤醒网络时,必须快速发送连续NM PDU报文。(以厂家为定,以20ms的周期连续发送5帧报文为例。如下图2)

图1
在这里插入图片描述

图2
在这里插入图片描述

NM_04
如果是走03(主动唤醒)进来的,先在NM Immediate Transmit State中以很快的周期发送5帧报文,发完再进入到NM Normal Transmit State中以正常的周期CanNmMsgCycleTime(500ms)发送报文如下图。如果是直接走02进来的,那么直接以正常周期发送NM报文。一直发到Repeat Message Timer(3200ms为例)结束。根据节点本身是否需要网络通信(网络请求),节点将移动到NM_6正常操作状态或NM_12准备睡眠状态

NM_06
处于重复报文状态下的主动请求网络节点(KL15点火线on: 汽车点火按钮按下), 如果Repeat Message Timer 发生超时,但节点的主动网络请求仍持续存在,节点必须进入常规操作状态。节点继续保持以正常周期500ms发送网络管理报文和应用报文。如下图
在这里插入图片描述

NM_09
处于常规操作状态的节点,如果释放所有的网络请求,不再需要主动请求网络(KL15 off 以及不做任何按键唤醒),那么它必须立即将网络管理状态切换到准备睡眠状态,同时该节点必须立即停止发送网络管理报文。

NM_10
处于准备睡眠状态的节点,如果检测到主动网络请求,节点必须立刻进入常规操作状态同时必须开始以正常周期发送网络管理报文和应用报文PDU。

NM_07,11
收到NM报文的byte1字节的重复请求位如果置1,强制进入Repeat Message State。
在这里插入图片描述

NM_08,05,14
T_NM_timerout定时器超时,不改变当前状态。定时器需要重置。

NM_13
在Ready Sleep State状态,NM报文不可以发送。等待T_NM_TIMEOUT定时器超时后进入Prepare Bus-Sleep Mode。

NM_15,16
Prepare Bus-Sleep Mode状态只可以接收NM报文,其他报文不发不收。收到被动唤醒,走15;收到主动唤醒,走16。

NM_17
如果Prepare Bus-Sleep Mode状态收不到任何唤醒源,在T_WAIT_BUS_SLEEP定时器超时后进入Bus-Sleep Mode。

### 关于UDS协议唤醒报文的相关说明 #### 1. 唤醒报文的作用 在汽车网络中,为了节省电能并减少不必要的通信流量,许多电子控制单元(ECU)会在不活动时进入低功耗状态或睡眠模式。此时,如果需要重新激活这些设备,则可以通过特定的唤醒机制来完成。对于支持ISO 15765标准的CAN总线系统而言,其物理层允许通过特殊的帧结构——即所谓的“唤醒帧”或者“唤醒脉冲序列”,触发处于休眠状态下的节点恢复正常工作模式[^2]。 #### 2. 唤醒报文的具体格式 依据ISO 15765的规定,在CAN FD以及传统CAN总线上实施的唤醒操作主要依赖于一种特别构造的数据帧形式。这种数据帧并不携带任何实际有效负载信息;相反地,它的存在仅仅是为了向目标接收方表明发起者希望对方结束当前静默期转入活跃阶段而已。具体来说: - **ID字段**:通常设定为广播地址(例如0x7FF),这样可以确保所有潜在的目标都能够接收到此信号。 - **DLC长度**:一般设为零,意味着没有任何附加参数跟随在其后边。 - **数据字节部分**:同样为空白填充即可满足基本需求。 因此,一个典型的用于启动过程中的简单版本可能看起来像下面这样: ```can ID: 0x7FF, DLC: 0, Data: [] ``` #### 3. 实际应用场景中的实现方式 当涉及到具体的硬件平台比如TBox之类的远程信息服务终端装置时,开发者往往还需要考虑更多细节方面的要求。例如某些情况下可能会要求加入额外的安全验证步骤以确认请求合法性之前再执行后续动作等等。这里给出一段伪代码用来展示如何模拟发送这样一个基础类型的唤醒消息实例: ```python def send_wakeup_message(can_bus): message_id = 0x7FF dlc_length = 0 data_payload = [] can_frame = { 'id': message_id, 'dlc': dlc_length, 'data': data_payload } try: can_bus.send(can_frame) print("Wakeup message sent successfully.") except Exception as e: print(f"Failed to send wakeup message: {e}") ``` 以上函数接受一个已初始化好的CAN总线对象作为输入参数,并按照前述定义构建好相应的数据包之后尝试将其推送出去。需要注意的是实际情况当中还可能存在诸如超时处理之类的问题也需要妥善解决才行。 #### 4. 数据解析注意事项 尽管上述提到的标准框架已经相当清晰明了,但在真实世界里不同制造商之间仍然有可能存在着细微差异之处。所以在开发过程中务必仔细查阅对应车型的技术文档资料以便准确把握各自独特的特性表现特征。另外一方面也要记得充分利用现代编程环境中丰富的调试手段辅助分析复杂交互流程从而提高效率降低错误率。 ---
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

&春风有信

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

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

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

打赏作者

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

抵扣说明:

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

余额充值