网上对于AUTOSAR XCP的概念介绍文章已经很多,所以本文不再对XCP的概念做过多的介绍,直接介绍如何从0到1配置基于CAN通信的XCP开发配置。主要完成以下几个功能:
1.标定量和观测量能编译链接到指令的地址段。
2.完成最简的A2L文件且能导入上位机工具使用。
3.完成XCP模块的最简配置且集成XCP到代码工程中。
4.通过上位机工具能读取到观测量。
5.通过上位机能修改标定量。
XCP概念和原理参考的文章:
https://mp.weixin.qq.com/s/lWD6uggP7ICMbvp3nqxngg
通过《AUTOSAR_SWS_XCP》规范文档,知道XCP标定的通信时序图。XCP on CAN涉及到的主要模块为XCP、CanIf、CanTrcv、Can Controller完成标定过程中的数据发送和接收。
根据XCP on CAN 标定功能的开发流程,整理出几个所需方向,以下是一个量产项目中关于XCP需要完成的工作内容。
注意:上图中是一个量产项目中XCP要做的工作,本文仅完成XCP Bringup的介绍。更多关于XCP的协议及使用的内容将在后续的CP系列文章中介绍。
工程实践环境:
AUTOSAR BSW Tool:Vector
AUTOSAR MCAL Tool:EB
Hardware Platform: Infineon Tricore TC387
Build Tool: Tasking
Debug Tool: UDE
缩略词
简写 | 全称 |
XCP | Universal Calibration Protocol |
A2L | File Extension for an ASAM 2MC Language File |
ASAM | Association for Standardization of Automation and Measuring Systems |
CTO | Command Transfer Object |
DAQ | Data AcQuisition, Data AcQuisition Packet |
DTO | Data Transfer Object |
MCD | Measurement Calibration and Diagnostics |
ODT | Object Descriptor Table |
STIM | Data Stimulation packet |
TS | Time Stamp |
通过Vector的技术手册《TechnicalReference_DbcRules_Vector》可以知道如果一个Message的属性都配置未No但是其Message Name中包含XCP(不区分大小写)的字符串,那么Davinci工具在导入DBC的时候就会认为这是XCP报文,也就是说Davinci会完成XCP的基本配置。
通过Davinci的Input Files工具导入DBC.
这样Davinci工具会完成最基本的XCP相关配置,后文会一一介绍到。
Cantrcv的配置包括Cantrcv的STB, EN等Pin脚的配置,这个可以参考《AUTOSAR项目实战(6)-Port及Dio模块配置实践》一文。
Cantrcv模块的配置最重要的就是要映射CanTrcv中CantrcvDioChannelAccess到Dio Channel.
关于CanTrcv的其他功能(比如,唤醒功能)这里不在赘述,在《AUTOSAR项目实战》专栏中会有专门的文章介绍。
同样,对于Can Controller的配置不是本文的中断,这里仅列出比较重要的配置项,在《AUTOSAR项目实战》专栏中会有专门的文章介绍Can Controller(滤波怎么最优配置,邮箱怎么最优配置,HO和硬件Buffer的对应关系等...)。也可以先参考《》一文,有对TC3xx芯片CAN模块的详细介绍。
根据ECU硬件设计选着芯片中CAN硬件单元
配置CAN波特率。
配置CAN滤波器。
配置CAN邮箱。
我们的DBC携带了XCP的信息,所以导入DBC后,CanIf会自动将XCP报文上行到XCP模块。
通过DBC导入XCP报文后,Davinci会自动生成最简到XCP配置,足够完成我们XCP功能的bringup.至于复杂的DAQ等功能,后续文章再介绍。
有两个XCP相关的Mainfunction映射到5ms Task.
在BswM_Init中完成XCP相关的初始化。
Task编译器下链接文件定义标定段,可以参考《Tasking编译器下如何在链接文件中定义标定段》一文。
group CAL_DATA_ROM (ordered, load_addr=0x80004000)
{
select".rodata.CAL_ROM";
"_cal_rom_start" = "_lc_gb_CAL_DATA_ROM";
}
group CAL_DATA_RAM (copy, ordered, run_addr=0x70000000)
{
select ".rodata.CAL_ROM";
"_cal_ram_start" = "_lc_gb_CAL_DATA_RAM";
}
编译后,我们的标定量确实已经编译到对应RAM区域,其初始值存放在对应的ROM区。
有了标定量的地址后,我们就可以手写一个简单的A2L文件。
关于A2L文件可以参考:
https://www.zhihu.com/question/19928878/answer/3327571586
参考:
https://www.bilibili.com/video/BV1M64y1x77C/?spm_id_from=333.337.search-card.all.click&vd_source=d0ae3080c1674b44125de3a5bb8be58a
注意:Tmaster完整的标定功能需要购买lisence,没有lisence只能观测6个观测量且无法修改标定量。我们需要通过手动发报文来改写标定量的值。
由于TMaster没有lisence就不支持标定量的改写,所以只能手动发送XCP命令来测试改写标定量的值。
本文详细介绍了AUTOSAR架构下XCP从0到1的开发和配置过程。实现了:
1.标定量和观测量能编译链接到指令的地址段。
2.完成最简的A2L文件且能导入上位机工具使用。
3.完成XCP模块的最简配置且集成XCP到代码工程中。
4.通过上位机工具能读取到观测量。
5.通过上位机能修改标定量。
对于量产项目还需要继续以下的工作:
1.设计项目的Memory layout,在LD文件中分配规范的标定段。
2. 使能overlay的功能,上位机可以直接发送Flash地址进行标定。
3. A2L文件的批量生成(目前就是一个最简的手写A2L文件,实际工程中应该是每个模块都是一个A2L文件,需要Merge到一个总的A2L文件当中)。
4. 配置XCP DAQ.
5. 将标定量写入hex文件中。
End
「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。 目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」
点击文章最后左下角的阅读原文可以获取更多信息
或者复制如下链接到浏览器获取更多信息
https://blog.csdn.net/qq_36056498/article/details/132125693
文末福利
2.为便于技术交流,创建了汽车电子嵌入式技术交流群,可尽情探讨AP,CP,DDS,SOME/IP等前沿热点话题,后台回复“加群”即可加入;
注:本文引用了一些第三方工具和文档,若有侵权,请联系作者删除!
推荐阅读
汽车电子嵌入式精彩文章汇总第一期:20210530-20230703
汽车电子嵌入式精彩文章汇总第2期
汽车电子嵌入式精彩文章汇总第3期
【OS】AUTOSAR OS Event实现原理
【OS】AUTOSAR OS Spinlock实现原理(下篇)
【OS】AUTOSAR OS Spinlock实现原理(上篇)
CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗
TC3xx芯片CAN模块详解
AUTOSAR OS Alarm实现原理
AUTOSAR OsTask切换原理
TC3xx 芯片SPI模块详解
AUTSOAR ComStack如何实现PDU只收不发的
AUTOSAR OsStack监控原理
AUTOSAR架构下ICU唤醒详解
CanNm报文的触发发送详解
Can报文能发不能收问题分析
TC3xx芯片PFlash的ECC校验问题补充
AUTOSAR架构下唤醒源检测函数EcuM_CheckWakeup详解
什么是Copy Table及如何使用Copy Table
AUTOSAR架构下EcuM_StartupTwo函数功能详解
符合AUTOSAR标准的RTAOS-Schedule Tables详解(上篇)
AUTOSAR OS Schedule Table实现原理
符合AUTOSAR标准的RTAOS-Schedule Tables详解(下篇)
TJA1145收发器重要功能介绍
AUTOSAR架构下基于TJA1145收发器通信丢失问题分析
AUTOSAR架构下LIN报文发送失败问题分析
AUTOSAR项目实战(1)-数据地址访问对齐问题分析
AUTOSAR项目实战(2)-内存访问异常问题分析
AUTOSAR项目实战(4)-系统总线及外设错误问题分析
AUTOSAR项目实战(3)-OsCounter访问权限问题分析
AUTOSAR项目实战(4)-MCU模块配置实践
AUTOSAR架构下的Interrupt详解(上篇)
AUTOSAR架构下的Interrupt详解(下篇)
AUTOSAR项目实战(6)-Port及Dio模块配置实践
TJA1145异常设置唤醒源导致ECU休眠失败问题分析
Tasking编译器下如何在链接文件中定义标定段
什么Tasking编译器中的farrom及nearrom?
AUTOSAR架构下NvMBlock无效问题分析
AUTOSAR架构下基于SPI通信的驱动模块详解-以TJA1145为例
End
欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!
汽车电子嵌入式
微信扫描二维码,关注我的公众号