AUTOSAR CanSM 相关 -- CAN Controller State Machine/ PDU channel mode 定义说明

目录

前言:

1. CAN Driver 中 CAN Controller State Machine 的定义

1.1 UNINIT 状态

1.2 STOPPED 状态

1.3 SLEEP 状态

1.4 STARTED 状态

2. CanIf 中 Pdu channel mode 的定义

2.1 CANIF_OFFLINE 状态

2.2 CANIF_ONLINE 状态

2.3 CANIF_TX_OFFLINE状态

2.4 CANIF_TX_OFFLINE_ACTIVE 状态


前言:

CanSM 在进行网络状态切换时,会调用CanIf 层接口切换CAN controller 的状态,另外,也会切换PDU channel 的模式;为了更好的理解 CanSM 对网络状态切换的管理,有必要对CAN controller 状态及PDU channel mode 进行说明

1. CAN Driver 中 CAN Controller State Machine 的定义

CAN controller 硬件层面的状态有很多种,但从软件层面,AUTOSAR CAN Driver 标准将 CAN controller 的状态简化抽象为了下面这四种:UNINIT,STOPPED, STARTED 和 SLEEP;

1.1 UNINIT 状态

CAN controller 未初始化之前的状态,controller 相关的寄存器保持POR 后的默认值,所有中断未使能,controller 不参与总线活动;

1.2 STOPPED 状态

CAN controller 已完成初始化,但不参与总线活动,不会发送错误帧和ACK;(比如 controller 处于控制器硬件层面的 initialization mode 时)

以Bosch_MCAN IP CAN controller 为例,其可通过置位控制寄存器 CCCR.INIT 位设置controller 进入initialization mode 实现切换至STOPPED 状态;

1.3 SLEEP 状态

CAN controller 硬件层面支持通过CAN Bus 唤醒时,controller 可处于SLLEEP 状态,SLEEP 状态的效果和STOPPED 状态类型,控制器不发送错误帧和ACK,但不同的是SLEEP 状态时,CAN controoler 保持在可以被唤醒的状态;

以Bosch_MCAN IP CAN controller 为例,其可通过置位控制寄存器 CCCR.CSR 位设置停止 CAN controller 的clock 实现切换至 SLEEP 状态;

1.4 STARTED 状态

CAN controller 的正常工作模式,正常收发数据,触发中断等;

以Bosch_MCAN IP CAN controller 为例,其可通过 RESET 控制寄存器 CCCR.INIT 位设置controller 进入normal mode 实现切换至 STARTED 状态;

CAN controller 状态切换的条件已在第一幅图中标出;

2. CanIf 中 Pdu channel mode 的定义

PduR 或者NM 模块可以改变PDU 的工作模式;

Pdu channel mode 分以下几种:

  • CANIF_OFFLINE
  • CANIF_ONLINE
  • CANIF_TX_OFFLINE
  • CANIF_TX_OFFLINE_ACTIVE

2.1 CANIF_OFFLINE 状态

处于CANIF_OFFLINE 的节点:

  • 调用CanIf_Transmit()时返回E_NOT_OK,并且不会将发送请求传递到底层;
  • 调用CanIf_Transmit()时,清除相关的CanIf 层的发送buffer;
  • 不会向上层传送 receive indication;
  • 不会向上层传送 transmit confirmation;

CanIf 初始化后,或通过CanIf_SetControllerMode 将CAN controller 切换到SLEEP状态时,
CanIf 会同时将 PDU channel mode 设置到CANIF_OFFLINE;处于SLEEP 状态的controller,硬件上不再参与总线活动,不支持报文收发;

2.2 CANIF_ONLINE 状态

处于CANIF_ONLINE 的节点:

  • 调用CanIf_Transmit() 时,将发送请求传递到底层;
  • 可以向上层传送 receive indication;
  • 可以向上层传送 transmit confirmation;

2.3 CANIF_TX_OFFLINE状态

处于CANIF_TX_OFFLINE 的节点 :

  • 调用CanIf_Transmit() 时返回E_NOT_OK,并且不会将发送请求传递到底层;
  • 清除相关的CanIf 的 发送buffer;
  • 可以向上层传送 receive indication;
  • 不允许向上层传送 transmit confirmation;

通过CanIf_SetControllerMode 到STOPPED 状态时,CanIf 会将 PDU channel mode 设置为CANIF_TX_OFFLINE; 

CAN controller 处于 STOPPED 状态,控制器已不能参与总线活动,此时虽然允许接收,但不会有数据被CAN controller 接收;

2.4 CANIF_TX_OFFLINE_ACTIVE 状态

处于CANIF_TX_OFFLINE_ACTIVE 的节点:

  • 调用CanIf_Transmit() 时,直接调用transmit confirmation 回调函数传至上层,不会将发送请求传递到底层;
  • 这个模式主要是为了诊断功能使用,像 diagnosis passive mode,目的是避免总线负载过高同时不影响 transmit comfrimation 的机制;

相当于对上层来讲调用CanIf_Transmit() 立刻执行的就是发送完成的回调,同时不会真正的触发数据发送;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值