AUTOSAR CAN 堆栈实现提示

Posted

技术标签:

【中文标题】AUTOSAR CAN 堆栈实现提示【英文标题】:AUTOSAR CAN Stack Implementation Hints 【发布时间】:2020-04-13 14:27:06 【问题描述】:

我的任务是使用最新版本的 AUTOSAR (R19-11) 为 CAN 模块创建软件堆栈。我不会使用任何配置工具。 根据我在 AUTOSAR website 上阅读的内容,这些是我必须实现的模块:CAN 驱动程序、接口、状态管理器、PDU 路由器和 AUTOSAR COM。因为我不会使用超过 8 字节数据的帧,所以我不需要 CAN 传输协议模块。

当向堆栈发送 PDU 时,一些模块会将元数据添加到这些接收到的 PDU(在本地称为 SDU),然后将它们发送到下一层。我读过我们必须为这些 PDU 分配唯一的 ID。此外,我们必须有一个路由表(在 PDU 路由器内部),用于根据每个 PDU 的 ID 确定其目的地。

我的问题是:

如何分配 ID? ID 是什么样的? 对于给定的 CAN 帧,我是否必须根据 PDU 在 堆? (COM、状态管理器、接口或驱动程序) 知道用户(应用层)可以定义任意数量的 CAN 帧,如何 PDU 路由器事先知道某个 PDU 的 ID 和目的地是什么? 从应用层开始,消息传输(或接收)是什么样的? 以 CAN Driver 模块结尾? 哪些元数据(或 PCI - 协议控制信息,在 AUTOSAR 中称为)将由 接收 PDU 的模块? 例如:应用程序发送数据 0xAA。 COM 接收到这个 PDU 并添加一个特定的 PCI,然后发送 它下降到PDU路由器等等。 SDU + PCI = PDU 在每个阶段会是什么样子?

【问题讨论】:

ID 是如何分配的? - 它们需要来自客户需要提供给您的 .dbc 文件。身份证会是什么样子? - 这是一个屏幕截图:imgur.com/zV0Dr2Y @NikiDimitrov,他说的是 AUTOSAR 堆栈中使用的 PDU-ID。 CanFrame ID 只是在 Can 驱动程序配置中处理,并通过更高层组件(CanIf、CanTp、CanNm、PduR、SecOC、IpduM、Com/LdCom)中使用的唯一 PduId 映射到其 PDU。 【参考方案1】:

实际上,AUTOSAR 中配置工具的优势在于,您不必一直在代码及其配置中手忙脚乱。

嗯,不实施 CanTp 也意味着您没有客户诊断 (UDS)?顺便说一句,CAN-FD 的帧最大为 64 字节。

PduIdType 的定义在 AUTOSAR_SWS_CommunicationStackTypes 章节中。 8.1.1。 SWS_COMTYPE_00005, SWS_COMTYPE_00006, SWS_COMTYPE_00007, SWS_COMTYPE_00014.

简而言之,它们是无符号整数,从零开始且连续,以便用作模块配置的配置索引。它们是为每个 BSW 模块创建的,所以你有一组 CanIf-PduIds、PduR-PduIds、IpduM-PduIds、Com-PduIds、SecOC-PduIds,它们也可以在 Rx 和 Tx 之间拆分(所以一组RxPduIds 从 0 开始,一组 TxPduIds 也从 0 开始)。因此,CanFrames PDU 可以在 CanIf、PduR、Com 等中具有不同的 PDU-ID,并且多路复用的帧被拆分为单独的 PDU,每个多路复用器具有不同的 PduId。

另一个需要阅读的章节是 AUTOSAR_TPS_EcuConfiguration 章节。 3.4 COM-Stack 配置。

它包含 Handle-ID 的概念、它们的定义、分配、甚至命名约定和一些用例。

【讨论】:

以上是关于AUTOSAR CAN 堆栈实现提示的主要内容,如果未能解决你的问题,请参考以下文章

AUTOSAR架构的CAN通讯

AUTOSAR架构的CAN通讯

can接收丢帧 autosar

基于CAN的autosar网络管理

AUTOSAR SWC详解

AUTOSAR SWC详解