Autosar架构下的Can Busoff流程理解


背景

在学习Busoff的问题排查时,犯了个错误,就是在Busoff的中断处理中,在CanIf_ControllerBusoff()函数打断点,导致没有打出快慢恢复机制,通过重新学习Busoff流程后,自己再梳理下这个流程。


一、Busoff的运行流程

1 硬件检测

硬件端会不断检测发送报文的错误数,一旦TEC > 127就会进入 error passive状态,发送被动错误,当TEC > 255时总线进入Busoff状态

2 软件检测

  1. OS轮询检测
    OS中不断调用Busoff的监测函数,检测函数里面也采用轮询的方式去查询Busoff的状态。一旦协议状态寄存器(Protocol Status Register)满足以下条件就进入busoff中断处理:
    (1)BO位 == 1
    (2)INIT位 == 1
    (3)本路CAN Controller运行在CANIF_CS_STARTED状态
  2. Busoff中断处理
    发送Busoff后,会进入中断处理函数中,处理步骤如下:
    (1)取消所有正在pennding状态的请求
    (2)将Controller的状态设置为CANIF_CS_STOPPED
    (3)获取当前Controller的逻辑ID
    (4)调用CanIf_ControllerBusoff()函数,用于通知CanSM有Busoff事件发生。
    (5)CanSM检测到busoff事件后会进行快慢恢复机制来尝试恢复通信。
    如下是CanSM的交互图
    请添加图片描述
由于CAN网络管理涉及到CAN总线上节点的配置、通信协议的制定、节点的状态监测和故障诊断等多方面内容,因此在实现CAN网络管理代码时,需要按照autosar架构的要求进行模块划分和设计。 1. CAN网络管理模块的划分 根据autosar架构的要求,CAN网络管理模块可以划分为以下几个子模块: (1) 通信协议制定模块 该模块负责定义CAN网络通信的具体协议,包括数据帧格式、数据传输方式、错误检测和纠错等内容。 (2) 节点配置与控制模块 该模块负责对CAN网络节点进行初始化配置和控制,包括节点地址、波特率、过滤器设置、发送和接收缓冲区等的管理。 (3) 节点状态监测模块 该模块负责对CAN网络节点的状态进行监测,包括总线状态、节点状态、错误状态等。 (4) 故障诊断模块 该模块负责对CAN网络节点进行故障诊断和故障处理,包括错误码的生成和发送、故障存储和清除等。 2. CAN网络管理模块的设计 在设计CAN网络管理模块时,需要考虑以下几个方面: (1) 模块之间的接口定义和数据交互方式 在autosar架构中,模块之间的接口通常采用标准化的接口描述语言定义,以保证模块之间的兼容性和可重用性。同时,需要考虑到数据交互的效率和安全性,采用适当的数据传输方式和数据保护机制。 (2) 模块的功能实现和算法选择 在实现CAN网络管理模块的功能时,需要选择合适的算法和数据结构,以满足功能需求和性能要求。同时,需要考虑到系统的可扩展性和可配置性,以方便用户进行功能定制和配置。 (3) 模块的测试和验证 在实现CAN网络管理模块后,需要进行模块的测试和验证,以保证模块的正确性和稳定性。同时,需要考虑到模块的集成和系统级测试,以保证整个系统的功能和性能。 总之,基于autosar架构的CAN网络管理代码实现需要从模块划分、接口定义、功能实现和测试验证等方面进行全面考虑和设计,以实现高效、可靠和可扩展的CAN网络管理功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值