AUTOSAR实战教程 -- 教你解决CANSM导致CanController无法启动看懂CANSM状态机

目录

稳态:

暂态

CANSM_BSM_S_PRE_NOCOM

CANSM_BSM_S_PRE_FULLCOM

CANSM_BSM_S_FULLCOM

Bug现象

​编辑

Debug流程

ComM请求有没有问题

CANSM内部有没有问题

错误原因

关键变量与函数

重点排查外围模块

参考文献


愚以为CanSM主要有两个大的作用

1.与CanIf的交互

CanSM 根据来自ComM 模块的模式请求改变CAN 网络的通信模式。

CAN 网络PDU 模式控制(PDU 发送与接收的控制)。

CanSM 使用CanIf 模块的API,设置CAN 控制器和CAN 收发器工作模式。CAN 控制器和CAN

收发器工作模式的变更由CanIf 通知CanSM,用于CanSM 状态切换。

CanSM 为每一个配置的CAN 网络实现一个状态机,并将网络状态的变更通知给ComM 和BswM。

2.CAN 总线BusOff 恢复处理。

网上对第二条作用:CAN 总线BusOff 恢复处理,,已经有非常丰富的讲解了。本文主要探讨第一条,CanSM对CanController的控制,以及遇到CanSM无法打开Controller时的排查、解决思路。

稳态:

模式为稳定的模式,可以接受正常的网络请求.

  • COMM_NO_COMMUNICATION

  • COMM_SILENT_COMMUNICATION

  • COMM_FULL_COMMUNICATION

(CANSM从初始化到FULL COMM的一般跳转路径)

暂态

  • CANSM_BSM_S_PRE_NOCOM ,

  • CANSM_BSM_WUVALIDATION ,

  • CANSM_BSM_S_PRE_FULLCOM ,

  • CANSM_BSM_S_CHANGE_BAUDRATE ,

  • CANSM_BSM_S_SILENTCOM_BOR ,

  • CANSM_BSM_S_NOT_INITIALIZED

我现在遇到的问题是,CAN controller无法打开,而且当前没有用trcv校验和Pn,也没有波特率改变,且不是busoff所以直接不考虑这几个状态:

  • CANSM_BSM_WUVALIDATION ,

  • CANSM_BSM_S_CHANGE_BAUDRATE ,

  • CANSM_BSM_S_SILENTCOM_BOR ,

查看CANSM的全局变量,发现一直待在CANSM_BSM_S_PRE_NOCOM,都没进Full Com ,排除之后重点考虑的是(按状态机先手顺序)这几个进入FULL COM之前的状态。

  • COMM_NO_COMMUNICATION

  • CANSM_BSM_S_PRE_NOCOM

  • CANSM_BSM_S_PRE_FULLCOM

虽然CANSM状态机非常复杂,但我们如果只看跟我们目标相关的状态,撇开无关的状态机,应该还是可以在短时间内Hold住的!我们重点捋一下这几个。

CANSM_BSM_S_PRE_NOCOM

ECU上电后,每一路CanSM状态机默认进入CANSM_BSM_S_NOT_INITIALIZED状态。EcuM 模 块 调 用 CanSM_Init 函 数 , CanSM 状 态 从 CANSM_BSM_S_NOT_INITIALIZED 切 换 到 CANSM_BSM_S_PRE_NOCOM状态。

CanSM 状 态 机 处 于 CANSM_BSM_S_FULLCOM 或 者

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值