文章目录
一、简介
基于Autosar的网络管理有三种模式:睡眠模式,网络模式和预睡眠模式。
(1) 睡眠模式
- 当节点没有主动网络唤醒及被动唤醒请求时,ECU通信控制器切换至睡眠模式,ECU功耗降低至适当水平。
- OEM一般通过测量静态电流的方法来检测各个ECU是否满足设计要求。
- 在睡眠模式下,节点的网络管理报文和应用报文禁止发送,同时节点在该模式下,如果检测到有效的唤醒源,节点必须唤醒。
(2) 预睡眠模式
- 该模式是为进入与睡眠模式之前的状态,各个ECU要实现总线活动静止下来。
- 进入该模式后,已经下发送队列的报文允许发送到网络上,不再往发送队列中放置报文,禁止发送网络管理报文和应用报文,但应该对总线上的报文进行ACK应答(CAN收发器自动完成)。
- 在预睡眠模式下会设定一个可配置的定时器,参数为CANNM_WAIT_BUS_SLEEP_TIME, 一旦超时,网络管理状态应该离开预睡眠模式,进入睡眠模式。
(3) 网络模式
分为三种状态,重复报文状态、常规操作状态、准备睡眠状态。
① 重复报文状态
该状态分为快速发送状态和正常发送状态。都是发送固定个数网络管理报文,发的次数和时间间隔都是可配置的。
② 常规操作状态
当节点为主动唤醒网络需要与其他节点继续进行通信时,必须保持在常规操作状态,该状态下网络管理报文和应用报文正常发送。
③ 准备睡眠状态
进入该模式节点停止发送网络管理报文,当NM Timeout Timer超时后停止发送应用报文。
二、实现方法
采用线程和软件定时器的方式,实现本功能。
(1)can_nm 网络管理硬件层
网络管理参数
一般由车厂提供参数。例如:AUTOSAR网络管理技术要求
#define CAN_NM_TIMER_MS (5) // 软定时器基准时间ms
// 预睡眠阶段(PBM)持续时间
#define NM_KEEP_PREPARE_T (2000 / CAN_NM_TIMER_MS)
// T_NM_TIMEOUT 准备睡眠阶段(RSS)持续时间
#define NM_KEEP_READY_SLEEP_T (2000 / CAN_NM_TIMER_MS)
// 正常报文阶段(NOS)持续时间
#define NM_KEEP_NORMAL_TI (60 / CAN_NM_TIMER_MS)
// 重复报文阶段(RMS)持续时间
#define NM_KEEP_REPEAT_T (2100 / CAN_NM_TIMER_MS)
// T_NM_MessageCycle 网络报文发送周期
#define NM_MSG_CYCLE_T (1000 / CAN_NM_TIMER_MS)
// T_NM_ImmediateCycle Time 时间偏移量CanNmMsgCycleOffset
#define NM_MSG_REPEAT_IMMEDIATE_T (20 / CAN_NM_TIMER_MS)
// N_ImmediateNM_TIME S 重复报文次数
#define NM_MSG_REPEAT_IMMEDIATE_CNT (5)
#define NM_APP_MSG_DELAY_T (8 / CAN_NM_TIMER_MS)
#define NM_DIAG_MSG_DELAY_T (16 / CAN_NM_TIMER_MS)
#define USE_NM_MSG_TRANSMIT_CONTROL /*使能网络管理报文传输控制*/
#define USE_DLL_WAKEUP_WHEN_SLEEP /*休眠时使用链路层唤醒(任意网络报文唤醒)*/
// #define USE_NM_STANDERD_BUSOFF_RECOVERY /*使能网络管理标准BUSOFF恢复策略*/
// #define USE_NM_MSG_REPEAT_MODE /*使能网络管理报文传输控制*/
#define NM_BASE_ADDRESS ID_NM /*网络管理报文基地址 */
#define NM_ADDRESS_MASK 0x0FF /*节点地址掩码*/
#define NM_STATION_ADDRESS 0x26 /*本节点地址 */
#define NM_CAN_ID (NM_BASE_ADDRESS + NM_STATION_ADDRESS) /*本节点网络CAN报文 ID*/
#define NM_MSG_DATA_LEN 8 /*网络管理CAN报文数据长度*/
- 睡眠模式:节点上电或复位后应默认进入睡眠模式
- 报文重复阶段:当节点从其他模式进入Network Mode时,默认进入[报文重复阶段],该阶段是网络正式开始工作前的准备阶段,用来等待网络中所有相关节点进行网络准备,开启通信
- 准备睡眠阶段:节点工作完成后,由[正常运行状态]状态进入[准备睡眠阶段],准备进入睡眠状态。该阶段用来等待网络中所有节点工作完成,之后统一进入睡眠状态。
- 正常运行状态:节点由[报文重复阶段]进入正常运行状态,该状态为节点通信正常工作状态。
- 预睡眠模式:节点从[准备睡眠阶段]进入[预睡眠模式]
(2)app_nm 网络网络业务层
主要处理唤醒源,比如:CAN网络唤醒,BLE控车,SE唤醒,无感唤醒,keyfob唤醒。