Bootstrap

AUTOSAR CAN协议栈-应用通讯-总体篇-基于Davinci Configurator和TC397硬件平台

目标:实现CAN应用报文收发,使用中断模式

准备:准备一个task能调度跑起来的demo工程,在此基础上进行通讯协议栈功能的扩展。这里说明下这么做的原因,不要一开始就在系统服务(OS,看门狗等)和模式管理花太多时间,系统服务和模式管理里的应用配置可以在实现功能时了解。另外一个原因是,一个项目一般由若干个人合作完成,对于我们一个菜鸟,架构方面的工作(需要资深人员负责)轮不到我们。但是对于一个基于base的项目,通讯和诊断协议栈一般都需要重新开发,所以我们先抓主要矛盾,搞明白通讯和诊断协议栈,可以先动手干活,逐步再了解其它相关组件的应用,然后能干更多活,若干时间后就可以干架构的工作啦。

接下来介绍下学习和实践方法

首先要了解通讯协议栈,具体到CAN应用报文通讯在AUTOSAR架构中是怎么实现的,只有了解了才能明白在configurator中需要配置哪些相关的组件。下面是一张AUTOSAR架构的图

这里面只体现了和总线通讯相关的模块。BSW必不可少的需要OS/BwsM/EcuM,另外上述和CAN应用报文通讯参考框1中(框2和诊断通讯数据流有关),CAN收据接收通过CAN driver向上传递给CAN Interface,然后走框1中的流,传递给PduR模块,因为是应用报文,所以PduR模块将应用报文(这里叫PDU更合适,因为已经不是CAN报文,而是把信息提取了出来,命名为Protocol Data Unit)路由到Com模块,所以为了实现CAN应用报文通讯,我们需要加入在demo工程(包括OS/EcuM/BswM/RTE/Ecuc)的基础上加入CAN,CANIf,PduR,Com组件,以及和CAN通讯相关的CANSM和ComM组件,CANSM是CAN通讯相关的状态机,ComM负责通讯管理,在这个阶段大概了解他们的功能即可。

蓝色框里的组件大多以XF结尾,这个是和序列化相关的,软件自动导入的,后面暂时没什么用,我也没删除。

绿色框是已经完成了部分Dcm诊断通讯的内容,这个后面再说。

以上信息是在开发AUTOSAR前需要了解的基本知识。

另外补充一点,MCAL层我基本都是通过英飞凌提供的MCAL包,通过EB配置的,这个后面有机会再把底层的驱动分享下。但是configurator中我加入了CAN模块,也就是CAN Controller相关的驱动(没有用复杂的收发器,所以没有收发器驱动)。这个CAN driver是达芬奇提供的,由于我使用的MCAL是4.2.2版本,BSW的版本是4.0.3,版本差异导致不兼容,软件集成编译的时候会报错,所以有关驱动我也用了达芬奇提供的4.0.3版本。

MCU是控制器驱动,这个模块必须导入,不导入configurator会报错,但是我没有配置和生成代码,而是集成时使用英飞凌提供MCAL生成的代码做集成。

下面正式进入配置相关工作

  • 制作一个Can dbc文件,这个文件描述了CAN通讯的通讯矩阵,如果作过产品项目可以直接拿过来一个裁剪下。我用之前项目的dbc文件,但是把诊断和网络管理相关的报文删除,只保留应用报文。
  • 导入和分析DBC文件,在configurator菜单栏点击Project
  • 然后选Input Files,导入制作的dbc文件

    点击fileset,然后选择dbc文件,点击update the configuration,如果一开始没有dbc文件,这个地方好像不是3所述update配置,记不太清了,总之是分析或者更新这个dbc文件

    EcuC组件是BSW必带的组件,分析完dbc文件后,dbc文件中的每一帧报文会有一个对应的PDU元素在Ecuc组件的Pdu下,严格说是两个,如BDCS_Fr02_1F0_oCAN3_3b845ff6_RxBDCS_Fr02_1F0_oCAN3_fac5de43_Rx它们的区别是后缀不一样,后缀3b845ff6和fac5de43是随机生成的不同字符,目的是为了区分。后缀最后都已_Rx结尾,表明该Pdu是接收类型。如果是dbc文件中的发送报文,那么后缀以_Tx结尾。

    生成两个Pdu是为了后面做向上和向下映射,这个待会儿再说。

  • 接下来需要配置相关BSW组件,首先是CAN模块,因为CAN这个组件属于MCAL层,所以后面专门针对MCAL内容再介绍,达芬奇提供的MCAL和英飞凌基于EB配置其实差不多。CAN General配置中重点配置 Interrupt Category为二类中断,有关一类和二类中断可以查一下相关知识,一类和二类中断的区别主要是中断是否受OS管理,一类中断对应的中断时间触发后,直接跳入中断向量表,找到响应入口,跳入中断,执行中断,此时中断是无条件跳转的,无论OS在干什么。二类中断在跳转中断前,会保存task的现场,然后跳入中断,此时中断有点类似优先级更高的task,打断了原来的task。
  • 另外大家需要充分利用每一个配置项右下角的property框里的description,对于理解配置项非常有帮助

  • 在CanConfigSet->CanController配置项中需添加一个CAN控制器,这个地方描述使用哪一个CAN硬件Node,这里我配置了一个CAN Controller,我用的这款TC397好像有3个Controller,每个Controller有4个Node。

  • 在这里使用了M_CAN0,它是CAN0模块的第一个Node,Control Base Address自动生成了和M_CAN0对应的基地址,

    Busoff中断选择中断处理模式。这里补充下,项目CAN模块要求实时性较高,所以一般CAN模块收发都通过Interrupt模式,而不是polling轮询,包括busoff,我一般都配置为中断模式

    Baudrate 选择CanController下面创建的子项,CPUClock应用MCU模块中的配置,这里说明下,由于configurator工程需要,所以MCU模块需要配置一些项,就像CAN Controller中的输入时钟,这里配置波特率的时候,要以实际使用的模块配置。比如实际MCU的配置我使用英飞凌提供的MCAL包,配置CAN时钟为40MHz,所以在configurator的CAN模块配置波特率时,我是以CAN时钟=40M为前提。

  • 波特率配置配置为500KHz

  • Can filter滤波配置,我这里没有约束。这里主要涉及两个配置项Code和Mask,通过这两个值可以配置CAN控制器的接收的报文ID范围。

  • CAN Hardware Object,配置收发实体,这里至少配置一个收和一个发,分别用来存储接收和发送报文,当然对于收发可以分别配置多个object。可以简单理解为缓存区。每一帧报文都可以配置一个缓存区,这样报文不会被覆盖,但是占用更多内存。所以一般比较重要的报文可以让它单独关联一个Object,其它报文共用一块缓存区域。

    Controller Ref:配置Object属于那个Controller的资源

    Handle Type: 配置为Full-CAN或Basic CAN,一般Dbc变化频繁时,配置为basic CAN,这样不用经常调整CAN 驱动配置。Basic和Full CAN的区别这里不再陈述。

    Object Type:配置该Object是收或者发

    Filter Mask Ref:引用之前CAN Controller中配置的过滤配置

  • 在此和之前步骤,所有配置基本都是自动生成的,如下面这些灰色的配置。接下来进入到正式配置各个CAN应用报文通讯相关的BSW组件阶段。

总结:

首先需要了解实现CAN应用报文通讯,和哪些BSW组件相关。这些基本知识需要了解相关组件基本功能

需要了解DBC文件制作,当然如果你有现成的,也建议改改,前期不要加入诊断和网络管理相关的通讯,最好做功能增量,一开始不要导入太多模块,否则configurator会报错。

有条件的话建议MCAL都用Vector提供,或者由芯片公司提供的包。AUTOSAR规范有些模块在升版时没有变化,有的有变化。我这边主要是因为版本不兼容,所以就用了混合的方式。另外MCAL相关的应用和芯片有较大关联,要合理利用芯片手册和MCAL手册,对嵌入式MCU有基本了解。我刚开始是从最底层MCAL开始了解配置,因为MCAL的组件相对耦合度没有那么高。

好了,关于CAN应用报文收发功能的其它BSW组件,下次再一一介绍,内容还是挺多的。遇到问题可能是好事情,因为很多配置项的意义,都需要再解决功能调试时,结合BSW源码和AUTOSAR规范加深理解。否则仅仅配置一遍,实现了功能,但是还是无法和其它伙伴交流,或者直白点,面试的时候讲不出来,那么意义就大打折扣了。

;