资讯动态

DaVinci Configurator新建AUTOSAR工程并导入DBC/CDD实操指南

发布时间:2026/10/5 3:09:03 来源:尧图企业网站定制
做AUTOSAR这几年我见过太多新同事第一次打开DaVinci Configurator时的表情界面里密密麻麻全是模块树右键菜单几层深根本不知道从哪下手。尤其当手里同时拿到一个DBC报文矩阵和一份CDD诊断文件想着“做个工程把这两样都导进去”的时候结果往往是一路报错。这篇文章不扯概念就讲清楚一件事怎么在DaVinci Configurator里新建一个完整的AUTOSAR基础软件配置工程并把DBC和CDD正确导入、关联起来。内容适合正在学AUTOSAR、用Vector工具链做ECU配置或者刚接手一个带CAN通信和UDS诊断项目的朋友我会把操作顺序、背后原因和踩过的坑一起写出来。很多所谓的“新建工程失败”其实80%是准备阶段出了问题。新建AUTOSAR配置工程不像Keil里建个模板那么简单它要求你手上先有完整可用的输入文件否则后面导入DBC/CDD就是连环报错。在做任何点击操作之前我建议先把下面几样东西备齐。1. 新建工程前的准备与整体思路1.1 先搞懂DaVinci Configurator在AUTOSAR工具链里的位置AUTOSAR方法论把开发分成三大块。上层是软件组件设计SWC用DaVinci Developer这类工具画组件、配端口、做RTE映射中间层是基础软件配置BSW负责CAN/LIN/FlexRay、诊断、存储、OS、MCAL这些模块这正是DaVinci Configurator的主场再往下是芯片厂商的MCAL代码和启动代码通常由EB tresos或者其他MCAL配置生成工具搞定。DaVinci Configurator产出的是一堆ARXML描述文件和C代码骨架这些最终要和SWC生成的RTE、以及MCAL代码一起编译进ECU工程。所以你新建工程时选的Autosar版本、目标芯片型号、编译器都会影响后面代码能不能顺利集成。很多人把DaVinci Developer和DaVinci Configurator混在一起说其实是两回事Developer负责应用层SWC/RTEConfigurator负责BSW通常由两个岗位分别维护。如果你一个人全干也建议先在脑子里把这条分工线划清楚否则后面导入DBC生成的PDU路由、诊断DID到底映射到哪个SWC端口你都不知道该在哪个工具里查。1.2 梳理输入文件DBC和CDD分别解决什么问题DBCCAN Database是CAN报文矩阵文件用文本格式定义了波特率、报文ID、报文周期、DLC、信号名、字节序Intel/Motorola、信号类型无符号/有符号/浮点等。导入DBC的目的是自动生成通信栈配置CanIf的PDU列表、Com的信号路由、PduR和CanTp的I-PDU条目。但要注意DBC描述的是“这条总线上有哪些报文”不是“当前ECU要发哪些报文”。所以导入时基本都需要筛选哪些PDU属于当前ECU哪些只需要接收监听哪些干脆不关心。CDD在Vector工具链里通常指CANdela Diagnostic Description也就是诊断描述文件。它描述诊断规范支持的UDS服务0x10、0x22、0x2E、0x31、0x14、0x19、0x85等、DID读写、DTC故障码定义、时间参数P2、P2*、S3、功能寻址、物理寻址等。CDD是给ECU做诊断测试用的导入之后DaVinci Configurator会自动生成Dcm诊断通信管理和Dem诊断事件管理模块的配置。如果没有CDD你也可以在Dcm模块里手动一条条建服务但那个工作量会让你怀疑人生。1.3 工具版本与许可证检查DaVinci Configurator的版本决定它能正确解析哪个版本的ARXML。比如工程是Autosar 4.2.2你用只支持4.0的旧版打开大概率是空目录或者乱码反过来新版工具打开旧版ARXML通常能自动升级但升级之后文件可能回不去。这里建议如果没有特殊要求尽量统一一套版本DaVinci Configurator版本、Autosar版本、MCAL生成工具版本、编译器版本全部对齐。很多项目里导入DBC后生成的代码编译不过查到最后就是版本错位。还要注意许可证。DaVinci Configurator需要Vector的license常见有浮动license和单机license。新建工程时报“No license”或者生成代码时提示功能不可用先别怀疑自己操作去查license状态。另外不同模块的license是独立的比如Dcm、CanTp这类诊断和传输层模块的license通常比基础Can模块更贵如果许可证里没买对应模块导入CDD时会直接报模块不受支持。提示新建工程前先把DBC和CDD文件用文本工具打开看一遍。DBC可以直接用记事本看CDD通常是XML格式用支持格式化的编辑器打开更方便。花20分钟确认文件不是空的、不是加密的、版本是预期的能省下后面至少一天的排查时间。2. DaVinci Configurator新建工程全流程实操下面按从零开始的标准流程写以配置一个带CAN通信和UDS诊断的ECU为例。2.1 创建工作区与工程归档文件.dpa运行DaVinci Configurator后第一次启动会要求指定工作空间目录Workspace。工作空间用于存放工程归档文件、临时文件和生成输出建议单独建目录不要在系统盘或包含中文的路径下建工程。中文路径在代码生成阶段经常引发奇怪问题这是很多老工程师都吃过亏的地方。在File菜单里选择New创建一个新的DaVinci Project Archive也就是.dpa文件。命名建议用ECU代号加项目阶段例如“PCM_CANFD_SW01.dpa”不要用test、new这类名字否则后期多个工程归档时根本分不清。创建工程时会让选择基础信息Autosar版本比如4.4.0、默认模块列表、编译器。编译器要与后续集成时的IDE保持一致常见有GreenHooks、Tasking、GCC等。暂时不确定就选一个后面能改的只要知道生成代码时编译宏和头文件目录会不同就行。2.2 认识模块树与ECU配置视图建立后的工程以模块树形式展示左侧是ECU Configuration树形结构包含Can、CanIf、CanNm、CanTp、PduR、Com、Dcm、Dem、NvM、EcuM、BswM、Os、Rte等模块。不同版本和license下看到的模块数量不同有些模块没license是灰色的无法展开。这时候不要试图手动配置所有模块AUTOSAR模块之间强关联新手最容易犯的错就是想填满每个参数最后配出一堆自相矛盾的东西。正确路径是从通信栈和诊断栈的需求出发让工具通过导入DBC和CDD自动生成大部分配置再手动补缺口。2.3 导入前先做基础模块的“地基”配置虽然导入DBC和CDD能生成大量配置但有些参数必须在基础模块里手工指定否则导入时报找不到控制器、找不到端口之类错误。第一个是Can模块的控制器配置。你需要知道当前ECU用哪个CAN外设几个通道每个通道对应的MCAL收发器类型和波特率。在Can模块里创建好控制器填上波特率和采样点。做CAN FD还要配置FD格式、数据位波特率等。这个配置要与芯片手册里真实的CAN外设一致特别是采样点。不同OEM对采样点有明确要求比如500k波特率下采样点75%搞错了通信可能不稳定。第二个是CanIf模块的HOHHardware Object Handle配置。CanIf是CAN驱动和上层协议模块之间的接口负责管理硬件报文对象。导入DBC后每个PDU都会有对应的HOH引用关系但如果没有事先定义好硬件对象和报文缓冲区生成时会报映射失败。实操中可以先创建一个默认的HOH池后续再根据硬件收发邮箱数量调整。第三个是EcuM与BswM的基本状态机。很多模块运行时依赖ECU状态和BSW管理模式这两个模块至少要能生成空配置否则CanNM、CanSM、ComM这些状态管理模块可能起不来。所以一般新建工程后先Generate一次生成初始骨架再开始导文件顺序上更稳妥。2.4 生成初始代码并确认目录结构生成按钮的位置因版本略有差异一般都在主界面工具栏。点击Generate后会让你指定输出目录例如创建一个Generated或Output文件夹。第一次生成很关键它会把模块树里已配置的信息生成ARXML和C文件骨架。生成结束后检查输出目录确认是否包含每个模块的配置文件如Can_Cfg.h、CanIf_Cfg.h、Dcm_Cfg.h和对应主C文件。如果这些文件缺失说明某个模块配置不完整趁早回头补不要等工程全配完再排查。这一步另一个作用是验证工具链和license是否正常。一个只装了模块树但实际没有生成权限的工程会在生成时报错。先把“空工程能不能生成”这个问题解决再谈导入DBC和CDD。实操心得新建工程第一次Generate时我习惯把输出目录放到工程目录外一个固定位置比如workspace/out/不用默认的工程子目录。这样反复生成时不会在版本管理里造成大量无效diff。3. DBC导入与CAN通信栈配置DBC导入是通信栈配置的核心也是大多数人最先接触的一步。很多人以为“导入DBC”就是把文件选进去然后点确定其实导入前的确认和导入后的检查才是真正见功夫的地方。3.1 从DBC文件里先读出这些关键信息DBC不是随便一个文件就能导入成功。导入前先在DBC文件里确认几个信息波特率DBC本身不一定写波特率很多DBC文件没有Baudrate属性工具导入时会让手填。如果填的和CAN收发器硬件配置不一致生成的通信会出问题。报文ID类型标准帧还是扩展帧DBC里有标准或扩展标识。导入后要注意PDU和CAN硬件对象的类型匹配。DLC每个报文的DLC必须和实际数据场长度一致。不一致会导致接收缓冲校验失败严重时影响错误帧处理。信号定义StartBit、Length、ByteOrder0Intel小端1Motorola大端、ValueType无符号/有符号/浮点。特殊信号如Mux多路复用信号、发送类型Cycle、Event、OnChange、初始值和最大最小值等DBC都支持描述但DaVinci Configurator导入多路复用信号时容易出问题要重点检查。3.2 导入DBC的标准操作步骤在DaVinci Configurator中通常通过File菜单下的Import选择DBC。具体菜单名称随版本略有差异但流程大体一致选择DBC文件后工具会弹出映射页面让你选择把网络导入到哪个CAN控制器下同时设置默认的PDU参数。这里有两个关键点。第一确认过滤条件。DBC可能包含整个整车网络的上百条报文而你的ECU只发送或接收其中一部分。工具一般允许取消勾选不需要的报文或者在导入后删除多余PDU。如果导入时不筛选生成的Com模块会包含大量无用信号白白浪费RAM和CPU。第二确认波特率与FD选项。如果DBC里部分报文是CAN FD工具通常能自动识别FrameType但如果控制器只配置了经典CANFD类型PDU导入后会报错。反过来控制器配了CAN FD但报文都是经典CAN一般没问题但要注意混合模式下仲裁波特率和采样点的统一设置。3.3 导入后如何检查自动生成的通信栈配置导入成功的标准不是界面不报错而是你能在下面这些模块里看到条目CanIf每个PDU都变成Tx/Rx PDU带对应的HOH句柄和PDU ID。PduR生成路由规则把CanIf层的I-PDU路由到Com或CanTp。特别注意诊断报文的RoutingPath比如0x7DF、0x7E0、0x7E8这类ID必须路由到CanTp而不是直接进Com。Com每个报文里的信号都变成ComSignal报文周期、初始值、信号长度都能看到。这里也是后续检查信号映射是否正确的主要位置。CanNm如果项目有网络管理DBC里的NM报文ID可能被识别。NM报文配置比较特殊建议单独确认别让它占用普通应用PDU的资源。CanTp诊断用PDU会被自动填成CanTp对应的Channel和N-SDU参数。如果导入之后这些模块还是空的说明导入时没有勾选生成模块配置或者当前模块没有license需要回头查。3.4 把DBC信号与SWC端口关联起来DBC导入完成后通信栈只建了一半。真正的数据流是总线报文经CAN驱动接收通过CanIf、PduR进ComCom再通过RTE把信号值送给应用层SWC端口。在DaVinci Configurator里ComSignal和SWC端口之间的映射通常发生在RTE配置层。具体操作是在DaVinci Developer里创建好SWC端口然后在配置工具里把ComSignal映射到对应PortPrototype上。这样生成的RTE代码里才会出现类似Rte_Read_端口名_信号名的接口函数。这一步很多人容易漏掉常见场景是DBC导入了通信栈配置看着没问题应用层软件工程师打开RTE头文件发现根本没有对应读写接口然后开始怀疑工具生成的是假代码。其实只是没做信号到端口的数据映射。如果暂时没接触SWC设计可以先在工程里生成空RTE等SWC设计好后再回来映射。4. CDD导入与UDS诊断栈配置有了通信基础诊断栈就是另一个重头戏。CDD导入的核心目标是让诊断仪OEM测试工具能通过CAN总线对ECU执行读写和故障诊断操作也就是UDS诊断协议。4.1 CDD文件里主要包括什么CDD文件从诊断规范而来一个规范的CDD包含四大块诊断服务配置支持哪些UDS服务是否需要子功能服务安全等级是否需要会话切换。例如0x22按DID读数据、0x2E按DID写数据、0x31例程控制、0x19读DTC信息、0x14清DTC等。DID数据定义每个DID对应一个数据标识符长度、访问类型读/写、数据格式、默认值。比如DID 0xF190可能是当前软件版本号0xF191是硬件版本号。DTC定义故障码、严重等级、故障检测条件、DTC状态掩码、快照数据DID等。DTC格式一般是三字节加状态字节例如U0100在诊断设备上显示为0x000100。定时与寻址参数P2和P2是诊断响应等待时间S3是会话超时时间。不同OEM标准不一样有些要求P250msP25000msS33000ms。这些参数直接决定诊断仪的等待逻辑配错后上位机经常报超时。4.2 在DaVinci Configurator中导入CDD导入CDD的入口与DBC类似一般在Import菜单里选择CDD或Diagnostic。工具会识别CDD中的诊断服务和DID自动在Dcm模块中生成服务表、DID信息、DTC信息、协议参数等配置。导入后有几个关键点要人工确认。一是确认Dcm与PduR的连接。诊断请求通常包含功能寻址0x7DF和物理寻址0x7E0/0x7E8两类PDU导入CDD后工具会在PduR中建立到CanTp的路由。要检查诊断PDU真的走了CanTp而不是CanIf直通Com。二是确认DID与SWC的关系。DID要从应用层读取数据配置工具里通常有目标端口设置需要把DID映射到对应SWC端口上这样诊断请求进来时RTE才能从应用层拿数返回。三是确认DTC与Dem事件的关联。DTC配置在Dcm/Dem里故障状态最终由应用层上报。Dem事件ID要在SWC端口上对应上否则应用层做不了故障上报。4.3 没有CDD时的替代操作CDD文件不是每个项目都有。有时OEM只给一页诊断规范文本这时需要在Dcm模块里从零建服务表。我的建议是不要一个参数一个参数硬填先用CDD模板生成一个标准UDS服务配置再在此基础上改DID和DTC。Vector工具本身可能自带示例工程找一个最常见的0x10、0x22、0x2E、0x19、0x14组合把这些服务的参数照抄到工程里再按需求调整DID和DTC表。手动建DID时最容易翻车的是字节序。诊断规范里DID的长度和字节序一定要与协议栈默认一致。例如一个16位的DID数据规范约定高字节在前但Dcm配置选成了LittleEndian那诊断仪读出来的数据就是反的。诊断协议本身一般规定多字节数据高位在前但具体按OEM规范来别想当然。4.4 CDD导入后别忘了诊断功能的生成与集成导入CDD并完成映射后同样要Generate一次。检查输出目录里的Dcm_Cfg.h、Dem_Cfg.h、CanTp_Cfg.h等文件是否生成。如果生成失败最常见原因是DID映射到了不存在的SWC端口。如果工程里还没有DaVinci Developer的SWC设计就先临时把DID目标指向默认源端口或者先不映射等SWC建好再回来补。诊断栈集成还有一个容易忽略的地方Dcm与BswM/EcuM的状态机关系。诊断会话切换默认会话、编程会话会触发ECU状态变化DTC清除和存储需要NvM服务支持。如果BswM里没配置诊断相关规则你会发现诊断仪发0x10 02进入编程会话后ECU没反应或者0x14清DTC时总是失败。这不是Dcm配得不对是BswM没有对这个事件做响应。5. 常见问题与排查技巧实录这部分直接列我实际工作中碰到过的问题按出现频率排序。5.1 DBC导入阶段的高频问题报错/现象主要原因解决办法DBC导入后CanIf里PDU为空DBC筛选时把当前ECU的报文过滤掉了检查DBC中报文归属确认发送节点和接收节点的选择生成代码后CAN一直收不到数据控制器配置与HOH配置不匹配或没有分配CAN接收缓冲区检查Can模块的RxMailbox分配确认HOH绑定到对应邮箱PduR路由失败CanTp的通道ID或N-SDU长度与Dcm不一致先看诊断报文是否被识别为CanTp类型再统一N-SDU最大长度报文带Mux多路复用信号导入后信号错乱工具对Mux信号支持有限建议手动处理在Com模块里创建多路复用信号组或把Mux信号拆成多条PDU路径DBC里报文是CAN FD但控制器是经典CANFrameType不匹配保证控制器和CanIf的HOH都开启CAN FD支持或把PDU降级为经典CAN5.2 CDD导入阶段的高频问题报错/现象主要原因解决办法导入CDD报模块未授权许可证没有购买Dcm或CANdela相关模块联系工具管理员购买模块licenseDcm表生成但诊断仪超时无响应物理寻址或功能寻址PDU路由错误检查PduR路由确认0x7E0/0x7E8路由到CanTp且DcmChannel使能DID读出来数据反了Dcm里DID字节序与规范不一致按OEM规范修改字节序诊断仪发0x14清不掉DTCDem模块的DTC Store里没配置对应DTC或NvM未初始化检查DemDtc列表、DemEvent映射、NvM的Block配置0x10 02进入编程会话后ECU复位BswM状态机里编程会话触发了Reset事件但没做正常处理检查BswM规则避免在编程会话入口直接触发Reset5.3 几个容易踩的隐藏坑再分享几个不太容易从文档里看出来的坑。第一个是生成代码的路径问题。DaVinci Configurator生成代码时用相对路径或绝对路径如果工程放在共享盘或者多人同时操作很容易出现生成一半失败的情况。我的习惯是生成前先关掉所有打开的文件生成后立刻检查文件时间戳确认是否一次完整产出。第二个是DBC和CDD的导入顺序。两者没有严格要求但推荐先导DBC再导CDD因为CDD生成时要引用DBC已经建立好的PDU路由。反过来先导CDD也能做但操作中会多出不少手动连线容易漏。第三个是通信矩阵变更后的重新导入。整车开发阶段DBC和CDD版本更新很频繁。每次导入新文件前先备份当前工程。工具支持增量导入但增量导入有时会保留旧PDU产生重复配置。安全做法是先导出当前配置的ARXML再导入新文件核对差异工具里的变更别直接覆盖。第四个是目标芯片MCAL的匹配。DaVinci Configurator生成的BSW代码要和芯片厂商的MCAL代码对接通常通过MCAL配置工具如EB tresos把MCAL也生成一遍。两边生成版本如果对不上集成编译时会报一堆undefined reference。集成编译前先确认MCAL里的Can、Adc等底层模块版本和DaVinci Configurator里BSW配置引用的版本一致。最后一点关于新人自学。如果没接触过AUTOSAR建议先玩一个尽量小的工程只做一路CAN控制器DBC里只放两三条报文CDD只做一个DID把整条链路从生成到集成全部跑通。跑通之后再往里加诊断服务、网络管理、复杂驱动这样每一步出错都能知道该找谁。一上来就导一个整车级大DBC加几十个DID排查问题的复杂度会大到你根本分不清是工具问题、配置问题还是代码集成问题。从我个人的使用体验来说DaVinci Configurator其实不难它难在不允许你靠感觉猜。所有模块的关联都是显式的漏配一个PduR路由代码生成不报错但运行时就是不通DID字节序错了生成编译全通过但诊断仪读数据就是不对。所以我强烈建议每次执行导入和生成操作时养成“导完就去对应模块里确认条目生成完就看Cfg文件是否存在”的习惯这套工程化流程比疯狂搜索报错怎么办要有效得多。后续要做CAN FD、网络管理、Bootloader刷写或者DoIP诊断这个DBC加CDD的基础配置工程就是所有扩展的底座把底座打好后面再加复杂功能会顺很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑