【AUTOSAR-DCM】-3.3-不依赖CDD手动在CFG中创建配置读一个带一个Data的DID(dataIdentifier)数据标识符(UDS $22服务诊断)

本文详细介绍了在没有CDD的情况下,如何在DaVinci Configurator (CFG) 中手动创建和配置一个数据标识符(DID),包括创建DataInfo、Data、DidInfo和Did,并解决配置完成后出现的错误。接着说明如何在DaVinci Developer (DEV) 中将DID添加到软件组件(SWC)以及在CFG中连接DCM和SWC的通信端口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例背景:(共10页精讲

在《【AUTOSAR-DCM】-3.1-将CDD导入CFG并查看$22服务配置变化(UDS诊断DID带一个Data)》中,自动创建/配置DID。接下来讲讲在没有诊断描述文件CDD/ODX/PDX的情况下,有时需要临时手动创建/配置DID。如图0-1,仿照该图在CFG中手动创建和配置DID:0xFE01,DID一个DataRecord:voltage_gain_value

下面我们讲讲,如何在CFG中手动创建/配置一个DID

图0-1

目录

1 在CFG中手动创建并配置DID

1.1 创建一个DataInfo

1.2 创建一个Data

1.3 创建一个DidInfo

1.4 创建一个Did

2 DID创建/配置完成后,消除CFG中的错误

3 在Develop中将该DID对应的C/S Port添加到SWC中

4 在CFG中DCM与SWC对应的C/S Port进行连接

<think>好的,用户问的是在AUTOSAR中,DCM模块的多个DID是否可以共用同一个NVM模块。我需要先理解DCM和NVM模块的基本概念。DCM负责诊断通信管理,处理诊断请求,而DID数据标识符,用于访问特定的数据。NVM模块则负责非易失性存储,保存数据到EEPROM或Flash中。 接下来,用户想知道多个DID能否共享同一个NVM模块。根据AUTOSAR的设计,NVM是统一管理存储的,所以多个DID数据应该可以存储在同一NVM中。需要确认的是DID数据结构和NVM的块划分。每个DID数据可能需要配置同的NVM块,或者多个DID数据合并到一个块中,这取决于具体实现。 然后,需要考虑并发访问的问题。如果多个DID同时请求NVM操作,NVM模块需要有机制处理并发,比如队列或者优先级。数据隔离也很重要,确保DID数据会互相覆盖。此外,存储效率方面,合理规划块大小可以减少碎片,提高效率。 还要提醒用户注意AUTOSAR配置工具,比如Vector的DaVinci或ETAS的ISOLAR,这些工具可以帮助配置NVM块与DID的映射。同时,错误处理机制,比如写入失败时的重试或回滚,也是需要考虑的。最后,确认DID数据是否需要同的存储周期或安全权限,确保符合功能安全标准,如ISO 26262。 总结来说,共用NVM模块是可行的,但需要注意块划分、并发访问、数据隔离和存储效率等问题,合理配置和设计是关键。</think>在AUTOSAR架构中,**DCM模块的多个DID共用同一个NVM模块是完全可行的**,但需要遵循特定的设计原则和配置规则。以下是关键点说明: --- ### 1. **基本概念** - **DCM模块**:诊断通信管理模块,负责处理诊断请求(如UDS协议中的$2E/2F/22服务)。 - **DIDData Identifier)**:16位数据标识符,用于标识需要写的数据(如标定参数、故障码等)。 - **NvM模块**:非易失性存储管理器,负责将数据持久化存储到EEPROM/Flash中。 --- ### 2. **共用NvM的可行性** - **统一存储管理**:AUTOSAR的NvM模块本身设计为**集中式存储管理**,所有需要持久化的数据(包括DID)均可通过NvM统一操作。 - **块(Block)划分**:每个DID对应的数据需映射到NvM的**独立Block**或**共享Block**: - **独立Block**:每个DID分配一个独立的NvM Block(推荐用于频繁更新或安全关键数据)。 - **共享Block**:多个DID数据合并存储在一个NvM Block中(需自行管理数据解析,适用于小数据量场景)。 --- ### 3. **实现注意事项** #### (1) **NvM Block配置** -AUTOSAR配置工具(如DaVinci Configurator)中,需显式定义: ```plaintext DID_0x0101 → 映射到 NvM_Block_0 DID_0x0102 → 映射到 NvM_Block_1 ...... DID_0x0101 + DID_0x0102 → 共同映射到 NvM_Block_0(自定义数据包结构) ``` #### (2) **并发访问控制** - 若多个DID同时触发NvM写(如并行执行$2E写请求),需通过以下机制避免冲突: - **NvM队列机制**:NvM内部通过队列管理写请求,确保原子性操作。 - **SWC层互斥锁**:在应用层(如Dcm模块)控制对共享NvM Block的访问顺序。 #### (3) **数据隔离性** - DID数据需在NvM Block中**明确定义偏移量和长度**,避免数据覆盖: ```c /* 示例:共享Block内的数据布局 */ typedef struct { uint8_t DID_0x0101_Data[10]; // 偏移量0 uint8_t DID_0x0102_Data[20]; // 偏移量10 } NvM_Block_SharedData; ``` #### (4) **存储效率优化** - **块大小对齐**:根据Flash/EEPROM的擦写粒度(如4KB)优化Block大小,减少存储碎片。 - **分组存储**:将生命周期相近的DID数据分组到同一Block,减少擦写次数。 --- ### 4. **典型应用场景** - **场景1**:车辆VIN码(DID 0xF190)和里程数据DID 0xF120)共享一个NvM Block。 - **场景2**:多个标定参数DID(如0xD000-0xD0FF)合并存储,通过索引区分。 --- ### 5. **验证与调试** - **NvM回调函数**:通过`NvM_JobEndNotification()`监控Block写状态。 - **一致性检查**:在DID取时(如$22服务),增加CRC校验或版本号验证数据完整性。 --- ### ✅ **结论** 多个DID共用NvM模块是**AUTOSAR的标准实践**,关键在于: 1. 合理规划NvM Block与DID的映射关系。 2. 确保并发访问安全和数据隔离。 3. 优化存储布局以提高效率和可靠性。 建议结合具体工具链(如Vector/ETAS)的NvM配置向导,可显著降低实现复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值