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。