【嵌入式】【科普】虚拟总线VFB
VFB 设计理念:功能优先,硬件在后
传统的设计方式是先定好要用的ECU硬件,然后在上面开发软件。
基于VFB的设计则完全相反,属于自上而下的设计:
- 首先,只关注车辆需要实现的功能(如自动巡航、车道保持)。
- 然后,将这些功能分解成一个个独立的、可重用的软件组件(SW-Cs)。
- 接着,定义这些组件之间如何通过VFB进行交互。
- 最后,才决定将这些软件组件分配到哪个具体的物理ECU上去运行。
这个过程实现了软件与硬件的彻底解耦。
VFB 设计流程(步骤详解)
第 1 步:功能分析与软件组件(SW-C)设计
- 目标:将整车级功能分解为软件组件。
具体活动:
- 识别功能:定义系统需要实现的高级功能(User Case)。
- 功能分解:将高级功能分解为更小的、可管理的子功能。
- 定义软件组件(SW-C):为每个子功能创建一个或多个软件组件。SW-C是功能实现的原子单元。
第 2 步:定义接口与 VFB 通信
每个SW-C通过端口(Port)与其他SW-C或基础软件(BSW)进行通信。
- 目标:为每个SW-C定义精确的接口,确保它们能通过VFB无缝交互。
具体活动:
-
定义端口类型:
- Sender-Receiver (S/R) Interface:用于传输数据(如信号、状态)。
- Client-Server (C/S) Interface:用于请求操作或计算(远程过程调用RPC)。
-
定义数据类型(Data Types):为所有传输的数据和参数定义精确的数据类型(如
uint16
,float32
,boolean
,或者复杂的结构体Structure
)。 -
描述行为(可选):使用Runnables来描述SW-C内部的执行逻辑。Runnable可以理解为SW-C内部的函数或任务,它们由RTE事件(如定时事件、数据到达事件)触发。
第 3 步:系统配置与映射(System Mapping)
- 目标:将虚拟的软件世界(VFB)与物理的硬件世界连接起来。
具体活动:
-
定义ECU拓扑结构:在工具中创建系统的物理架构,包括有哪些ECU(如ADAS域控制器、刹车控制器),以及它们之间通过哪些总线(CAN, LIN, Ethernet)连接。
-
分配软件组件:将设计好的SW-C映射(Map)到具体的ECU上。这是决定性能、成本和通信负载的关键一步。
-
定义系统信号:对于需要跨ECU通信的接口,工具会自动生成系统信号(System Signal)和PDU(Protocol Data Unit),并将它们分配到具体的总线和帧上。这一步将虚拟的VFB通信转换成了真实的网络报文。
第 4 步:RTE 与 BSW 配置生成
- 目标:为每个ECU生成实现VFB通信所需的具体代码和配置。
具体活动: - 生成RTE配置:设计工具会为每个ECU生成一个描述文件(ARXML)。该文件描述了该ECU上所有SW-C的接口、它们之间的连接以及与BSW的交互。
- RTE生成器:每个ECU的开发团队使用这个ARXML文件,通过RTE Generator生成针对该ECU的RTE代码。RTE将实现:
- intra-ECU通信:同一ECU内SW-C间的通信,可能优化为简单的函数调用或内存共享。
- inter-ECU通信:跨ECU的通信,RTE会调用BSW(如COM、PduR)来将信号打包成网络报文。
- 生成BSW配置:同时,也会生成基础软件(BSW)模块(如COM、OS、CAN驱动)的配置代码,确保它们能正确支持RTE所需的通信服务。
VFB设计原则与最佳实践
- 高内聚,低耦合:每个SW-C应专注于一个明确的任务,并通过定义良好的接口与其他组件交互,尽量减少依赖。
- 可重用性:设计SW-C时应考虑其在不同项目、不同ECU上的复用潜力。
- 接口契约先行:先严格定义接口(端口、数据类型),然后再实现组件内部逻辑。这允许不同团队并行开发。
- 考虑非功能性需求:在映射阶段,必须考虑时序、延迟、带宽等实时性要求。对性能要求高的组件应放在同一ECU或高速总线上。
VFB设计总结
VFB设计是AUTOSAR的灵魂,它代表了一种以功能为中心、软硬件分离的现代化汽车电子系统开发方法。其流程可以概括为:
- 功能需求
- 分解为SW-C
- 定义VFB接口
- 映射到物理ECU
- 生成RTE/BSW配置