当前位置: 首页 > news >正文

【MCAL实战】CanTrcv模块配置实践

目录

前言

正文

1.硬件分析

2.CanTrcv模块配置

2.1. CanTrcv的RX和Tx引脚配置

2.2. CanTrcvGeneral

2.3.CanTrcvChannel

2.4. CanTrcvDioChannelAccess

3.CanTrcv模块的使用

3.1. 关键API的功能及使用场景

3.2. 状态变量

4.上板测试

4.1. 总体功能测试

4.2. 观测软件状态

4.3. 关键API的使用场景

5.总结


前言

汽车电子嵌入式开始更新全新的AUTOSAR项目实战专栏内容,从0到1搭建一个AUTOSAR工程,内容会覆盖AUTOSAR通信协议栈、存储协议栈、诊断协议栈、MCAL、系统服务、标定、Bootloader、复杂驱动、功能安全等所有常见功能和模块,全网同步更新开发设计文档(后期也会更新视频内容)。本文为MCAL系列配置-CanTrcv模块配置实践。

CanTrcv正常工作是CAN通信正常工作的必要条件,在以下文章中我们详细介绍过各类收发器的细节内容,其中最主要的就CanTrcv用于休眠唤醒时的功能作用,CanTrcv相关的参考文章:

本文作为CanTrcv的基础入门介绍,仅介绍从0到1如何配置一个CanTrcv模块并测试其基本功能。

AUTOSAR BSW Tool:Vector

AUTOSAR MCAL Tool:EB

Hardware Platform: Infineon Tricore TC387

Build Tool: Tasking

Debug Tool: UDE

正文

1.硬件分析

如上图所示,TC387的开发板使用了英飞凌公司自己的收发器TLE9251VSJ(一般常用NXP公司的TJA1044, TJA1043, TJA1145这几个收发器),Pin脚和NXP的TJA1044收发器类似。

VIO和VCC是给芯片供电的,硬件设计上常供电,不需要用户额外控制供电(一般车载量产控制器收发器的供电是可以通过MCU控制的,应该是考虑的ECU的低功耗)。

STB引脚是高有效(原理图上的STB上如果有一个“—”就是低有效,没有“—”就是高有效),开发板直接STB接地(GND),也就是收发器永远是Normal模式(STB有效就是Standby模式),也就是收发器硬件设计上就永远处于正常工作状态

TXD和RXD和MCU的TXD(Pin20.8)RXD(Pin20.7)直连,CANH和CANL和CAN总线直连。

2.CanTrcv模块配置

2.1. CanTrcv的RX和Tx引脚配置

《【MCAL实战】Port及Dio模块配置实践》一文中我们详细介绍了CanTrcv的Rx和Tx引脚的Port和Dio模块配置。

2.2. CanTrcvGeneral

CanTrcvGeneral里面没有特殊需求的时候保持默认配置就行,这里着重介绍几个比较重要(实际项目中会用到)的配置项:

Dev Error Detect: 是否是能Det, 这个参数在项目开发阶段建议勾上,方便我们测试时发现一些低级问题(比如模块没有初始化.e.g.)。

User Config File: 可以配置一个xxx.h文件,工具生成代码的时候会将xxx.h文件中的内容copy到CanTrcv_Cfg.h的最后。通过这个参数可以重映射一些宏定义或者一定函数,在功能安全的函数跨OsApplication中会使用到。可以参考《【经验总结】硬件设计导致Cantrcv静态代码不匹配问题分析及解决方案》一文。

Wake Up Support: 配置CanTrcv模块是否支持唤醒源检测,这个需要根据实际需求配置。CAN的被动唤醒是一个涉及多模块的联动过程,需要一个专题将各个模块串起来讲解才能理解,这里仅将要介绍,深入的相关分析介绍可以参考以下几篇文章:《【CAN通信】AUTOSAR架构下CanTrcv休眠唤醒问题再探》

2.3.CanTrcvChannel

CanTrcvChannel里面没有特殊需求的时候保持默认配置就行,这里着重介绍几个比较重要的配置项:

Icu Channel Ref: CanTrcv模块中的这个参考一般不会用到。但是关于Icu的Ref参数很多模块都会有(CanTrcv, Lin, Can .e.g.)详细的ICU唤醒可以参考《【MCAL】AUTOSAR架构下ICU唤醒详解》一文。

Por Wakeup Source RefSyserr Wakeup Source Ref这两个参数在使用IO控制的CanTrcv模块不会用到(引脚也没有这两个唤醒源,TJA1043.e.g.),但是SPI控制的CanTrcv硬件(TJA1145.e.g.)有这两个硬件唤醒事件,需要根据实际需求配置。关于TJA1145的相关功能可以参考《【经验总结】TJA1145异常设置唤醒源导致ECU休眠失败问题分析》

Wakeup By Bus Used: 配置CAN总线唤醒是否使能。一个CAN阶段的ECU一般都会有一路CAN支持CAN唤醒,根据实际需求配置。

Wakeup Source Ref: 如果这路CAN支持CAN唤醒,这个参数引用一个EcuM模块的唤醒源。CanTrcv检测到唤醒事件收会调用EcuM_SetWakeupEvent通知到EcuM模块,EcuM模块开始唤醒源校验。详细内容可由参考《【Mode Management】AUTOSAR 架构下EcuM唤醒源事件详解》一文。

2.4. CanTrcvDioChannelAccess

引用我们在DIO模块里面配置的CanTrcv的STB和Rx的Dio Channel就行。CanTrcv模块会使用Dio_ReadChannel和Dio_WriteChannel来读写Cantrcv的Rx/STB硬件。

注意:由1章节可知我们的硬件的STB引脚是引脚直接接地的,实际是无法通过软件控制的。但是为了适配Vector的CanTrcv配置,这里引用的CAN00_STB实际不是CanTrcv的STB引脚引脚

3.CanTrcv模块的使用

实际项目中User不会直接调用CanTrcv模块的API函数来控制CanTrcv, 都是Can Stack的上层模块调用使用。站在CanTrcv单个模块来看,我们只要知道:

1.CanTrcv模块的关键API的主要功能以及谁在什么场景下会调用即可

2.CanTrcv在系统启动,运行中,下电过程中应该处于什么逻辑状态即可(关键状态变量)

3.1. 关键API的功能及使用场景

CanTrcv_Init: 需要用户mapping到EcuM的start sequence中去,在ECU的启动阶段由EcuM调用。

CanTrcv_MainFunction: 需要用户mapping到Os的10ms/其他Task中,Os的10ms任务运行起来后周期调用。

CanTrcv_SetOpMode: ComM的状态切换会trigger CanSM的状态切换,CanSM状态切换后会调用CanIf_SetCanTrcvMode->CanTrcv_SetOpMode来控制CanTrcv切换到Standby, Normal模式。

CanTrcv_CheckWakeup: CanTrcv切换到Standby或者Sleep模式后会调用EcuM_CheckWakeup --> CanIf_CheckWakeup --> CanTrcv_CheckWakeup来检测CAN Bus唤醒事件。具体可以参考《【CAN通信】CanTrcv和EcuM的关系及不同类型的Can收发器主要使用场景》一文。

3.2. 状态变量

Vector的TJA1040 SIP包代码提供了CanTrcv_30_Tja1040_Prob全局变量来观测CanTrcv的内部状态。

/* ! The following type includes CAN transceiver channel specific settings. */
typedef struct
{/* ---- Common attributes ---- *//* ! Last detected wakeup reason */CanTrcv_30_Tja1040_TrcvWakeupReasonType wakeUpReason;/* ! Specifies whether or not to report wakeups */CanTrcv_30_Tja1040_TrcvWakeupModeType wakeUpReport;/* ! HW specific attributes */} CanTrcv_30_Tja1040_Prob_Type;

奇怪的是CanTrcv_30_Tja1040_Prob_Type中并没有变量可以观测CanTrcv的逻辑状态。有问题的时候需要我们Debug代码去分析当前CanTrcv软件处于什么逻辑状态。

4.上板测试

4.1. 总体功能测试

CAN报文发送

如果Can报文能正常的发送出来,说明我们的CanTrcv(Can Stack)配置的基本没有什么问题。

CAN报文接收

我们发送了一阵XCP报文,XCP模块能正常接收,说明CanTrcv的Rx功能正常。

注意:实际项目中Can的收发中断最接近硬件状态,如果通过上册模块测试不符合预期,可以通过测试CAN的收发中断来验证CanTrcv功能

4.2. 观测软件状态

4.3. 关键API的使用场景

CanTrcv_CheckWakeupAPI在我们的项目中暂时没有场景触发,CanTrcv_Init和CanTrcv_MainFunction场景比较容易理解,这里不在展示。仅给出CanTrcv_SetOpMode的使用场景。

5.总结

本文是AUTOSAR架构下CanTrcv模块的入门级介绍,较为详细的介绍了如何根据硬件原理图来配置CanTrcv模块以及CanTrcv模块的主要功能和测试方法。虽然CanTrcv模块相对比较容易简单,但是在实际工程项目中你可能还得深入了解以下内容:

1.CanTrcv_TJA1040/CanTrcv_TJA1043/CanTrcv_TJA1145的软硬件是如何配合起来检测唤醒源的?

2.CanTrcv_TJA1040/CanTrcv_TJA1043/CanTrcv_TJA1145三类典型收发器在项目中切换使用(硬件上换芯片)时需要注意什么事项?

3.ECU的CAN Bus唤醒不了或者唤醒时间太慢该怎么分析?

......等很多细节的问题分析起来也不容易,这就需要量产项目的捶打才能明明。或者关注作者会深入分析这一系列的工程实际问题。

最后,本文第三章节提到的CanTrcv模块的使用方法可以触类旁通到其他模块的学习,需要读者自己去体会。

http://www.dtcms.com/a/531783.html

相关文章:

  • coco 可视化 txt版
  • idea字体的问题(idea应用本身的字体问题)
  • 计算机操作系统 — 链接
  • 网站图片加altwordpress前端库加速
  • 在linux上使用docker搭建ELK日志框架
  • Docker 应该如何学习 分四个阶段
  • 面试过程中的扣分项,你踩过几个?
  • 中牟高端网站建设专做户外装备测评视频网站
  • CSS属性(二)
  • 2011年下半年试题四:论软件需求获取技术及应用
  • Mujoco 仿真 PPO 强化学习机械臂末端路径规划到达指定位置(代码讲解)
  • 【C#】EventHandler的使用
  • C++ 实际应用系列(第六部分):并发系统的性能优化与工程实践(完)
  • 上市公司网站建设分析wordpress 转 app
  • Prometheus+Grafana 智能监控告警系统(服务器指标采集、mysql指标采集)
  • html5电影网站如何做企业网站流量怎么做
  • <数据集>yolo煤矿安全帽识别数据集<目标检测>
  • excel中加载数据分析工具的步骤
  • 一文厘清:文库 vs 知识库、核心功能清单、开源方案对比
  • 图片转excel vlm 提取手写清单信息 Qwen/Qwen3-VL-235B-A22B-Instruct
  • webrtc代码走读(七)-QOS-FEC-ulpfec rfc5109
  • 第十五章认识Ajax(六)
  • 逻辑回归解释
  • B038基于博途西门子1200PLC物料分拣控制系统仿真
  • 第十二章认识Ajax(三)
  • Spring Boot3零基础教程,安装 docker,笔记67
  • FLOW翻译
  • 第十六章jQuery中的Ajax
  • 实现 AI 流式响应:从等待到实时交互的技术解析
  • 东莞站福公司工资室内设计手绘图 基础入门