[AutoSar]BSW_Com08 CAN driver 模块介绍及参数配置说明 (一)

2024-03-04 01:20

本文主要是介绍[AutoSar]BSW_Com08 CAN driver 模块介绍及参数配置说明 (一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 关键词
  • 平台说明
  • 一、缩写和定义
  • 二、CAN driver 所在位置
  • 三、CAN 模块的主要功能
  • 四、功能规格
    • 4.1 Driver State Machine
    • 4.2 CAN控制器状态机
    • 4.3 CAN控制器状态机转换
      • 4.3.1 调用function Can_Init 导致的状态转换
      • 4.3.2 调用Can_ChangeBaudrate导致的状态转换
      • 4.3.3 调用Can_SetControllerMode导致的状态转换
      • 4.3.4 硬件触发导致的状态转换
  • 五、唤醒
  • 六、vector cfg 说明

  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector ,
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1

在这里插入图片描述
>>>>>回到总目录<<<<<<

一、缩写和定义

abbreviations定义
Hardware Object Handle (HOH)HRH 和HTH 的统称
Hardware Receive Handle (HRH)由CAN驱动程序定义和提供。每个HRH通常只代表一个Hardware Object。HRH可用于优化软件过滤。
Hardware Transmit Handle (HTH)由CAN驱动程序定义和提供。每个HTH通常只表示一个或多个Hardware Object,这些对象被配置为硬件传输缓冲
Hardware ObjectCAN硬件对象定义为CAN硬件单元/ CAN控制器的CAN RAM内的PDU缓冲区。可以直接理解为一个Hardware Object 就是一个L-PDU
Data Length Code(DLC)L-PDU中SDU 的长度
Physical Channel物理通道表示从CAN控制器到CAN网络的接口。CAN硬件单元的不同物理通道可以访问不同的网络。可以理解为一个网关
CAN controller一个can TX OR RX 连接的节点
CAN Hardware unit一个或者多个CAN controller + 一个或者多个CAN RAM area

二、CAN driver 所在位置

  CAN driver 位于 Microcontroller Abstraction Layer。
在这里插入图片描述

三、CAN 模块的主要功能

  1.作为上层(CAN_IF)和下层(CAN 硬线)的交互媒介,访问硬件和为上层(CAN_IF)提供接口。
在这里插入图片描述

四、功能规格

4.1 Driver State Machine

  只有两个driver 状态,CAN_UNINIT 和 CAN_READY 用 Can_Init 和Can_deInit 切换两种状态。
在这里插入图片描述

4.2 CAN控制器状态机

  包含了四种状态:UNINIT,STOPPED,STARTED,SLEEP。
  UNINIT:未初始化或者刚复位,所有CAN ISR被禁用。
  STOPPED:CAN控制器被初始化,但不参与总线。此外,不能发送错误帧和确认。(例如:对于许多控制器,进入“initialization”模式会导致控制器停止运行。)
  STARTED:控制器处于正常运行状态,功能完整,即参与网络。对于许多控制器来说,离开“初始化”模式会导致控制器启动。
  SLEEP:对于支持CAN 休眠的硬件,如果can 总线切换为sleep,那边 can 控制器也必须切到sleep状态。对于不支持CAN休眠的硬件,CAN控制器也必须模拟SLEEP 状态知道 被出发过渡到STOPPED 状态。

4.3 CAN控制器状态机转换

  四种状态通过Can_SetControllerMode 函数来转换,通过CanIf_ControllerModeIndication函数回调通知转换是否成功。
在这里插入图片描述

4.3.1 调用function Can_Init 导致的状态转换

  1.成功执行Can_Init会让状态UNINIT --> STOPPED.
  2.当执行Can_Init 的时候,CAN Driver State 如果不在CAN_UNINIT 或者 can 控制器不在UNINIT 状态则会报CAN_E_TRANSITION 错误。

4.3.2 调用Can_ChangeBaudrate导致的状态转换

  1.成功执行Can_ChangeBaudrate会让状态STOPPED --> STOPPED.
  2.当执行Can_Init 的时候, can 控制器不在STOPPED状态则会报CAN_E_TRANSITION错误。

4.3.3 调用Can_SetControllerMode导致的状态转换

  1.软件可以通过Can_SetControllerMode函数触发can控制器状态转换。根据CAN硬件,寄存器设置的变化转换到新的CAN控制器状态可能只有在延迟之后才会接管。Can模块在状态转换成功后通知上层(CanIf_ControllerModeIndication)新状态。监视所请求的状态是否实现是上层模块的一部分,而不是Can模块的一部分。
  2.Can_Mainfunction_Mode函数将轮询CAN状态寄存器的一个标志,直到该标志发出改变生效的信号,并通过CanIf_ControllerModeIndication函数通知上层状态转换成功。
  3.Can_SetControllerMode函数应使用系统服务GetCounterValue进行超时监控,避免阻塞函数。

4.3.4 硬件触发导致的状态转换

  1.硬件唤醒会导致SLEEP–> STOPPED.
  2.BUSS OFF 会导致start–> STOPPED

五、唤醒

  Can模块处理可以由Can控制器本身检测到的唤醒,而不是通过Can收发器。有两种可能的场景:通过中断唤醒和通过轮询唤醒。对于通过中断唤醒,当硬件检测到唤醒时,会调用Can模块的ISR。如果调用唤醒事件ISR,则依次调用EcuM_CheckWakeup。传递给EcuM_CheckWakeup的参数应该是CanWakeupSourceRef配置参数引用的唤醒源ID。ECUM会设置唤醒源并通过 CAN接口调用CAN模块从而调用Can_checkWakeup。
[AutoSar]状态管理(二)单核 ECUM wakeup 流程——Can唤醒流程(TJA1043)

六、vector cfg 说明

  后续更新

>>>>>回到总目录<<<<<<

这篇关于[AutoSar]BSW_Com08 CAN driver 模块介绍及参数配置说明 (一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja