SWS_CANDriver 规范理解

2023-10-30 13:10
文章标签 理解 规范 sws candriver

本文主要是介绍SWS_CANDriver 规范理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里先对CAN通讯相关的AUTOSAR规范,具体指AUTOSAR_SWS_CANXXX.pdf的这类文档的结构做个说明,一般分为10个部分:

1.引言与功能概览,introduction and functional overview
2.
省略与简写,acronyms and abbreviations
3.
参考文档, related documentation
4.
限制和假设,constraints and assumptions
5.
与其他模块的关联性, dependencies to other modules
6.
需求追溯, requirement traceability
7.
功能规范, functional specification
8.
接口规范, API specification
9.
时序图, sequence diagrams
10.
配置规范, configuration specification

CAN驱动(driver)来说,这样一篇文档先介绍下CAN驱动是什么?与其他哪些模块有关联性?CAN驱动模块要满足哪些需求?有哪些功能,接口和配置规范,执行时序是怎样的?

CAN Driver 属于硬件抽象层,一共包含着5个功能,由底向上分别为: CAN L-PDU; HTH/HRH; Hardware Object; CAN Controller A,B,C...和CAN Hardware Unit。

CAN Hardware Unit:CAN Hardware可以由一个或多个相同类型的CAN Controller和一个或多个CAN RAM区域组成。

CAN Controller:一个CAN Controller只能去服务于一个物理通道。

Hardware Object:可以想成CAN Hardware Unit 在 CAN RAM区域内的一个PDU缓冲区。

HTH/HRH:全部由CAN driver提供;HRH,通常只表示一个硬件对象(用于软件过滤);HTH,通常表示一个或多个硬件对象。 

CAN L-PDU:CAN协议数据单元。 由ID、DLC、Data(SDU)组成。

结合以上理解,对规范中的下图就有有一个比较直观的理解了

--refer sws content: 7.2 Driver State Machine

CAN Driver状态机比较简单,只有两种状态: CAN_UNINIT、CAN_READY

--refer: Document ID 011: AUTOSAR_SWS_CANDriver -7.3 Driver State Machine

有四种状态(UNINIT;STOPPED;SLEEP;STARTED)。

UNINIT :CAN控制器未初始化。 所有属于CAN Module的寄存器处于Reset状态。 禁用Can Interrupt。 不加入Can总线。 

STOPPED:CAN控制器被初始化但没有加入总线。 

SLEEP:CAN BUS直接支持CAN Hardware,而SLEEP不同于STOPPED。

STARTED:也就是说它加入网络时,控制器处于正常模式,功能完整。

3.1.1 CAN Controller State Transitions

        CAN Controller 的状态转换 是由Can_SetControllerMode函数触发的, 并以所需求的转换模式为参数。 转换成功与否可由回调函数CanIf_ControllerModeIndication通知。CAN Controller 的状态转换是否到达所需求位置是由上层模块 CANIf 监控的,并不是由CAN Driver模块监控。

某些状态的转换是由BUS(hardware) 触发的,这些通知是由上层的 CAN If模块的函数触发(CanIf_ControllerBusOff, EcuM_CheckWakeup)

下图为CAN controller有效的状态转换图

State transition caused by function Can_Init

  • UNINIT à STOPPED (for all controllers in HW unit)
  • software triggered by the function call Can_Init
  • does configuration for all CAN controllers inside HW Unit

State transition caused by function Can_SetBaudrate

  • STOPPED -> STOPPED; SLEEP -> SLEEP; STARTED -> STARTED
  • software triggered by the function call Can_SetBaudrate
  • changes the CAN controller configuration

State transition caused by function Can_SetControllerMode

State transition caused by function Can_SetControllerMode (CAN_CS_STARTED)

  • STOPPED à STARTED
  • software triggered

State transition caused by function Can_SetControllerMode (CAN_CS_STOPPED)

  • STARTED à STOPPED
  •  SLEEP à STOPPED
  •  software triggered

State transition caused by function Can_SetControllerMode(CAN_CS_SLEEP)

  • STOPPED à SLEEP
  •  software triggered

State transition caused by Hardware Events

  •  SLEEP à STOPPED
  • triggered by incoming L-PDUs
  •  The ECU Statemanager module is notified with the function EcuM_CheckWakeup

State transition caused by function Can_DeInit

  • STOPPED -> UNINIT; SLEEP -> UNINIT (for all controllers in HW unit)
  • software triggered by the function call Can_DeInit
  • prepares all CAN controllers inside HW Unit to be re-configured

这篇关于SWS_CANDriver 规范理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/308130

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危