关于CAN网络管理状态

    首先介绍一下,我是一名刚刚入职1个月的汽车网络测试工程师,目前主要是一边学习一边跟着公司前辈做一个项目,主要的内容就是进行通信、网络、诊断方面的测试。想以文字的形式记下自己学习的一些感想或者是经验之类的,达到巩固知识的目的,同时也希望能通过这种形式与各位同行多多交流学习。
   今天就先直接说说关于CAN网络管理状态转换的一些内容吧,下面是一个网络管理的逻辑图:


上面就是我画的一个比较简单的网络状态转换逻辑图,在说明这张图之前,我先介绍以下其中用到的定时参数:
T_WAKE_UP:唤醒时间,用来计算从睡眠模式进入到网络模式并且开始发送第一帧NM(网络管理)报文的时间。
T_START_NM TX:这个时间用来描述从预睡眠模式、正常操作状态或准备睡眠状态进入到网络模式并开始发送第一帧NM报文的时间。(4种情况)
T_START_AppFrame:在成功发送第一帧NM报文后发送应用报文的时间。
T_REPEAT_MESSAGE:这个时间是指处于重复信息状态的时间。
T_NM_TIMEOUT:只要节点进入网络模式就开始启用这个计时器,当计时器到时后就会进入预睡眠模式。(在网络模式下成功接收NM报文就会重新开始计时)
T_ImmediateCycleTime:快速发送NM报文的周期时间。(只有在满足一定条件下进入重复信息状态下才有)
T_NM_MessageCycle:NM报文发送的正常周期时间。
T_WAIT_BUS_SLEEP:在总线预睡眠模式下启动该定时器,当定时器到期后即进入总线睡眠模式。
介绍完时间参数,现在来理一理网络管理状态转换的过程:
一开始在接通电源后初始化网络管理,总线处于睡眠模式,在这个模式下不能收发NM报文和APP报文;当收到NM报文或网络请求(本地条件)后,就会进入网络模式(默认进入重复信息状态)并开始发送报文(T_WAKE_UP、T_REPEAT_MESSAGE、T_NM_TIMEOUT、T_START_AppFrame)。在这两种情况下的NM报文的发送周期也不相同,如果是由于网络请求(本地条件)进入重复信息状态,则先以快速发送周期发送一定次数后再进行正常周期发送;若由于接收NM报文进入重复信息状态,则以正常发送周期发送NM报文。
当T_REPEAT_MESSAGE到期时,如果总线依然有通信需求,则进入正常操作状态(重复信息状态和正常操作状态都可以收发NM报文和APP报文);如果总线没有通信需求,则进如准备睡眠状态(停止发送NM报文,可以接收NM报文,收发APP报文)。在正常操作状态下,停止发送NM报文后立即进入准备睡眠状态。
在重复信息状态和正常操作状态下有两种情况可以回到重复信息状态,一种情况是自身的重复信息请求,另一种情况是收到重复信息请求位为1的NM报文,这个重复信息位在下面会进行解释。
当处于准备睡眠状态下T_NM_TIMEOUT到期时,则进入总线预睡眠模式(启动T_WAIT_BUS_SLEEP定时器),在这个状态下,若T_WAIT_BUS_SLEEP到期,就进入总线睡眠模式;若接收到NM报文或网络请求(本地唤醒),则进入重复信息状态。此时NM报文的发送周期与从睡眠模式进入重复信息状态时一样。
注:本地条件还有自身的重复信息请求所需条件是由主机厂进行定义的,所以我目前进行的单节点测试并没有涉及;测试所用到的本地唤醒通过上K15电实现。
以上就是网络管理状态转换的基本逻辑,下面说说网络管理报文的格式:
在这里插入图片描述
可以看到,网络管理的报文格式为10个位,即3个位的网络管理基本地址+1个字节的ECU地址,0x4**为网络管理报文的基本地址,所以网络报文的ID范围为0x400-0x4FF。举个例子,若ECU地址为06,则NM报文ID为406,若ECU地址为13,则NM报文ID为413,以此类推。展示一下CAN报文ID范围图:在这里插入图片描述
然后是一个非常重要的数据部分,有8个字节:
在这里插入图片描述
Byte0就是刚刚说的ECU地址了;
Byte1为控制位矢量,这8个位里有两个非常重要:bit0和bit4。bit0就是之前说的重复信息请求位,主要由两点(1)该位默认值为0,当由于自身重复信息请求而从正常操作状态或准备睡眠状态进入重复信息状态时,此位置1,直到再次进入正常操作状态或准备睡眠状态。(2)若在正常操作状态或准备睡眠状态收到此位为1的NM报文,例如:byte1=01,则进入重复信息状态,该位置0。 bit4是主动唤醒位,如果由于网络请求(本地唤醒)从睡眠或预睡眠模式进入重复信息状态,此位置1,直到再次进入预睡眠模式;当由于接收到NM报文从睡眠或预睡眠模式进入重复信息状态,此位置0。
用户数据字节是自定义的,需要参考通信矩阵进行解读。

比如有个报文为: 406 06 10 00 00 00 00 00 00
406为ID,06是ECU地址,Byte1=10,即主动唤醒位=1,重复信息位=0,表示当前处于重复信息状态,并且是由于本地条件唤醒的。

    先写这么多吧,第一次写可能写的不是很好,有错误的请帮忙指正,有问题也可以提出来一起交流。发现网上关于使用CANoe进行测试的内容比较少,下次打算写写CANoe测试方法之类的,毕竟实践才是最重要的。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值