CP AUTOSAR之CANXLDriver详细说明(正在更新中)

本文遵循autosar标准:R22-11

1 简介及功能概述

  本规范描述了AUTOSAR 基础软件模块CAN XL 驱动程序的功能、API和配置。
  本文档的基础是[1,CiA610-1]和[2,CiA611-1]。假设读者熟悉这些规范。本文档不会再次描述CAN XL 功能。
  CAN XL 驱动程序是最低层的一部分,执行硬件访问并向上层提供独立于硬件的API。可以访问CAN XL 驱动程序的两个上层是CanIf 和EthIf 模块。
  CAN XL 驱动程序是CAN 驱动程序模块的扩展,因此本文档仅提供扩展现有CAN 堆栈的信息和规范。
  为了更好地理解,提供了一些一般信息。
  CAN XL 驱动程序提供启动传输的服务,并调用CanIf 和EthIf 模块的回调函数来通知事件,独立于硬件。
  此外,它还提供控制CAN XL 控制器特定硬件的服务,包括通用CAN XL 帧的传输和接收。

2 首字母缩写词和缩写词

  下面的术语表包含与CAN XL 驱动程序模块相关的首字母缩略词和缩写词,这些缩写词和缩写词未包含在[3,AUTOSAR词汇表]中。
在这里插入图片描述

3 相关文档

3.1 输入文件及相关标准规范

  [1]CiA 610-1 version 1.0.0 (DSP)-CAN XL规范和测试计划-第1部分:Data link layer and physical coding sub-layer requirements http://www.can-cia.org
  [2]CiA 611-1 version 1.0.0 (DSP)-CAN XL更高层功能-第1部分:Definition of service data unit types http://www.can-cia.org
  [3]词汇表:AUTOSAR_TR_Glossary
  [4]基础软件模块通用规范:AUTOSAR_SWS_BSWGeneral
  [5]CAN驱动规范:AUTOSAR_SWS_CANDriver
  [6]CANXL收发器驱动程序功能规范,以提供额外所需的接口:AUTOSAR_SWS_CANXLTransceiverDriver
  [7]CAN接口规范:AUTOSAR_SWS_CANInterface
  [8]以太网接口规范:AUTOSAR_SWS_EthernetInterface
  [9]基础软件模块通用要求:AUTOSAR_SRS_BSWGeneral
  [10]对CAN的要求:AUTOSAR_SRS_CAN
  [11]ISO 11898-1:2015 –Road vehicles –Controller area network (CAN)
  [12]以太网驱动规范:AUTOSAR_SWS_EthernetDriver

3.2 相关规范

  AUTOSAR 提供了基本软件模块的通用规范,该规范对于CAN XL 驱动程序也有效。因此,SWS BSW General 规范应被视为CAN XL 驱动程序的附加且必需的规范。

4 约束和假设

  CAN XL 驱动程序的约束和假设与CAN 驱动程序模块相同。
  假设所有CAN XL 硬件都支持开箱即用的入口和出口时间戳。如果此功能不可用,则需要在软件中进行模拟。

4.1 限制

  [2,CiA 611-1]中指定了几种AUTOSAR CAN XL 堆栈不直接支持的SDU 类型。AUTOSAR 通信堆栈中唯一直接支持的SDU 类型如下:

  • 1.01h(基于内容的CAN XL 帧)
  • 2.03h(隧道 CAN 2.0/FD 帧)
  • 3.05h(映射隧道 802.3 以太网帧)

  任何其他类型,如02h(节点寻址)和04h(未映射隧道802.3 以太网帧)均不直接支持。它们仍然可以与CDD 一起使用,有关详细信息,请参阅CanXL_Write()和CanIf_XLRxInduction()API。
  此外,使用CAN XL 帧头的SEC 位的未来扩展(例如安全和Multi-PDU)目前正在开发中,因此尚不支持。

5 对其他模块的依赖

  CAN XL 驱动程序模块扩展了CAN 驱动程序[5],并具有连接[6,CAN XL 收发器驱动程序]、[5,CAN 驱动程序]、[7,CAN 接口]和[8,以太网接口]的接口。

5.1 文件结构

  本节介绍CAN XL 驱动程序模块的文件结构。

5.1.1 代码文件结构

  详细信息请参考中5.1.6节“代码文件结构”。

6 需求追踪

  略

7 功能说明

7.1 初始化

  Can_Init()应扩展正确初始化CAN XL 驱动程序所需的所有功能。

7.2 状态处理

7.2.1 通信请求

  状态处理是按每个总线单独执行的,对于本机CAN 由CanSM 执行,对于通过CAN XL 的隧道以太网由EthSM 执行。EthIf 作为下层直接与CAN XL 驱动程序和CAN XL 收发器进行通信。
  实际的物理总线状态仅由CAN 堆栈控制。CAN XL 收发器通过LinkState 轮询向以太网堆栈指示物理总线状态,与以太网控制器模式无关。以太网控制器模式由CAN XL 驱动程序存储,并根据请求返回。
  以太网控制器模式最初应设置为ETH_MODE_DOWN。以太网堆栈通过CanXL_SetControllerMode()请求的控制器模式不会影响CAN XL 控制器硬件,新模式应单独存储。CanXL_GetControllerMode()将返回存储的模式。当以太网控制器模式更改时,CAN XL 驱动程序应通过EthIf_CtrlModeInduction()报告此更改。

7.2.2 总线关闭处理

  始终需要配置CAN堆栈,即使在没有使用本地CAN通信并且按照CAN驱动器中的定义执行BusOff情况下也是如此。
  总线错误状态的变化应通过调用CanXLTrcv_ReportErrorState()通知给CAN XL 收发器。如果发生BusOff,受影响的CAN XL 控制器的所有缓冲区都将在CAN XL 驱动程序内刷新。
  如果配置了以太网堆栈,则包含以太网帧的缓冲区也应被刷新,并且在总线关闭时应调用EthIf_TxConfirmation(),结果为E_NOT_OK。
  如果当前模式和链路状态与请求的模式和链路状态匹配,则EthIf 正在轮询其硬件。CAN XL 收发器通过在CanTrcv_GetLinkState()上下文中报告链路关闭,将BusOff 事件返回到EthIf。此外,还显示当前的链路状态在EthIf 中,不区分主动错误和被动错误状态,它们都报告为链路接通。有关详细信息,请参阅[6,CAN XL Transceiver Driver]。

7.2.3 无错误信号的 BusOff 处理

  如果使用收发器模式切换,则必须关闭当前现有收发器的错误信令。如果没有错误信令,控制器硬件本身也不会进行任何总线关闭处理。因此,在这种情况下,应该有一个简单的实现在CAN XL 驱动程序中仍然执行babbling保护。
  如果错误信号被禁用,则应在软件中模拟使用TEC(传输错误计数器)和REC(接收错误计数器)进行基本CAN 总线关闭处理。
  以下示例显示了此处理通常的样子:TEC 通常是一个初始化为0 的计数器,在0 到256 的范围内饱和,而REC 是一个初始化为0 的计数器,在0 到128 的范围内饱和。重传计数器关闭完全或至少配置为非常低的值。
  将有一个遵循以下基本规则集的状态机:

  • 当传输帧但总线上没有设置ACK 时隙时,TEC应增加8。自上次启动或总线关闭恢复以来,在总线上至少接收到一帧之前,TEC 不应增加超过128 .该帧是否成功接收并不重要。
  • 当传输一帧且总线上设置了ACK 槽时,TEC 应减1。
  • 当接收到一帧但不一致时,REC应加1。
  • 当一帧接收到一致时,REC 应减1。

  这些事件的检测将与各自上下文(MainFunction 或ISR)中的传输和接收处理一起执行,此外,根据硬件功能,还将在错误事件的总线关闭上下文中执行。
  状态转换预计与[11,ISO 11898 1:2015]章节12.1.4.4“总线关闭管理”中定义的状态转换相对应。在总线关闭状态下,TEC 和REC 会立即重置。基本上,当错误信号被禁用时,CAN XL 驱动程序状态转换与当错误信号可用时的处理应该没有区别。

7.2.4 唤醒

  基本唤醒处理不会改变。
  对于触发唤醒的接收帧的SDU 类型,不应有任何区别;CAN XL 驱动程序接收到的任何帧均应通知CAN 唤醒。
  EcuM_SetWakeupEvent()仅针对CAN 调用。以太网永远不会通知它,CAN XL 收发器通过LinkState 轮询以太网堆栈来指示物理总线状态。

7.3 接收处理

  所有使用的CAN XL 帧接收队列应单独映射到CAN XL HRH。
  接收队列还将用于映射到CAN HRH 的CAN 2.0 和CAN FD 帧。
  SDU类型的接收机制应扩展为XLFF,例如应扩展轮询模式Can_MainFunction_Read()。详细信息请参见CAN驱动程序的“L-PDU接收”章节。
  在接收XLFF 的L-PDU 时,首先应执行任何配置的过滤,然后再执行其他功能。
  在XLFF 的L-PDU 接收上,如果SDU 类型等于05h(映射隧道802.3 以太网帧),CAN XL 驱动程序应从接收到的帧中提取有效负载和寻址信息,并将其传递给EthIf_RxInduction();否则,它应传递接收到的帧帧直接发送到CanIf_XL RxInduction(1)根据硬件支持上的可用过滤,可能有多个接收队列可用于将接收到的帧过滤到其中。
  由于这是高度硬件供应商特定的,因此除了以下内容之外,此处不应给出任何详细信息:CAN XL 帧标头中可用的任何字段都可以用于过滤,不仅限于接受字段。
  目的可能是例如基于优先级ID、VCID和/或SDU类型来分离流量类别。
  当谈到以太网帧的隧道时,一个常见的用例是过滤任何接收到的SDU 类型05h(映射隧道802.3 以太网帧)L-PDU 以匹配配置的以太网MAC 地址(参见EthCtrlPhyAddress)。
  它可以帮助先处理高优先级流量,然后再处理低优先级流量。此外,还可以将不需要的流量放入单独的队列中,以便进行进一步检查,而不是将其过滤掉。
  在XLFF 的L-PDU 接收时,应检查帧是否与CiA 611-1 第5 章SDU 类型规范的一致性。
  如果一致性检查失败,则应丢弃接收到的帧,并报告运行时错误CanXL.CANXL_E_INV_DATA 。

7.4 传输处理由于CAN XL 的设计目标是从小型系统扩展到大型系统,因此有效载荷范围

  最多2048 字节,具体硬件实现可能有所不同。
  CAN XL HTH 的使用与CAN HTH 类似,具体参见CAN Driver 的“L-PDU 传输”章节。
  CAN HTH 用于映射到逻辑传输对象。根据可用的硬件功能,这些对象可能会映射到单独的消息对象或硬件支持的队列。
  所有使用的CAN XL 帧传输队列应单独映射到CAN XL HTH。
  CAN XL 传输队列的大小也可以为1,因此对应于传统的CAN 硬件对象。CAN 2.0 和CAN FD 帧的传输队列将类似于CAN HTH 进行映射。
  由于硬件支持的队列的可用性和行为是高度特定于硬件供应商的,因此此处不给出详细信息。
  CAN XL 驱动程序供应商有责任记录不同CAN XL HTH 的行为方式。对于相同的硬件,可能会根据系统的特定需求实现多种映射。
  函数CanXL_Transmit()(针对SDU 类型05h)和CanXL_Write()(针对其他SDU 类型)应将XLFF 控制信息和数据传输给硬件,并请求开始传输。
  上成功传输XLFF 后,如果原始传输的SDU 类型等于05h(映射隧道802.3 以太网帧),则CAN XL 驱动程序应调用EthIf_TxConfirmation()并返回结果E_OK,否则应调用CanIf_TxConfirmation()。
  如果传输无法成功执行,如果原始传输的SDU 类型等于05h(映射隧道802.3 以太网帧),CAN XL 驱动程序应调用EthIf_TxConfirmation(),结果为E_NOT_OK。
  如果CAN XL 控制器处于CAN_CS_STARTED 之外的其他状态,则受影响的CAN XL 控制器的所有缓冲区都应被刷新。

7.5 错误分类

  《基本软件模块通用规范》[19]文档中的7.2节“错误处理”详细描述了基本软件的错误处理。首先,它构成了一个由BSW模块中可能出现的五种错误类型组成的分类方案。在此基础上,以下部分具体说明了以下各小节中排列的特定错误。

7.5.1 开发错误

7.5.2 运行时错误

7.5.3 瞬态故障

  没有其他瞬态故障。

7.5.4 生产错误

  没有额外的生产错误。

7.5.5 扩展生产错误

  没有额外的扩展生产错误。

8 API规范

  请注意,CAN XL 驱动程序使用MSN Can 来实现与[5,CAN 驱动程序]共享的部分,并使用MSN CanXL 来实现本文档中定义的扩展。与SRS_BSW_00101 和SRS_BSW_00407 不同,CAN XL 驱动程序不提供使用MSN CanXL 将Init 和GetVersionInfo API 分开。在SWS_MemMap_00022 之后,与本文档中定义的API 关联的内存部分将使用MSN CanXL,并且引用本文档中定义的容器的符号名称值将使用MSN CanXL 来遵循TPS_ECUC_02108。

8.1 导入类型

  本章列出了以下文件中包含的所有类型。

8.2 类型定义

8.2.1 CanXL_参数

8.2.2 CanXL_PduType 名称

8.2.3 CanXL_HwType 名称

8.3 函数定义

8.3.1

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8,Ethernet Interface]和[12,Ethernet Driver]。它被AUTOSAR以太网接口调用以实现兼容CAN XL 不可知行为。
  服务CanXL_EnableEgressTimeStamp ()没有任何功能并且将返回而不执行任何操作。

8.3.2 CanXL_GetControllerMode

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8、Ethernet Interface]和[12、Ethernet Driver]。
  该函数应读取索引控制器的当前通信状态。
  当前通信状态的设置如和中所述。
  如果启用了开发错误检测:CanXL _Get ControllerMode()应检查参数CtrlIdx 是否有效。如果检查失败,该函数应引发开发错误CanXL.CANXL_E_PARAM_CON TROLLER。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL _Get ControllerMode()将引发错误CanXL.CANXL_E_UNINIT。

8.3.3 CanXL_GetCounterValues

  注意:此API源自以太网驱动程序()。为了更好地理解API的初衷,您可以查看[8,以太网接口]和[12,以太网驱动程序]。它由AUTOSAR以太网接口调用,以实现兼容的CAN XL不可知行为。
  服务CanXL_GetCounterValues ()没有任何功能,并且应始终返回E_NOT_OK,而不执行任何操作。

8.3.4 CanXL_获取当前时间

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8、Ethernet Interface]和[12、Ethernet Driver]。
  如果启用开发错误检测:该函数将检查参数CtrlIdx 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用开发错误检测:该函数将检查参数timeQualPtr 和timeStampPtr 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_POINTER。
  该函数应在编译前通过配置参数CanXLEthGlobalTimeSupport 配置为打开/关闭。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL_GetCurrentTime()将引发错误CanXL.CANXL_E_UNINIT。
  如果Com-Stack 分布在多个分区中,则Can/Ethernet 堆栈可能驻留在与调用CanXL_GetCurrentTime()(通过EthIf_GetCurrentTime())API 的StbM 模块不同的分区中,这意味着CanXL_GetCurrentTime()的调用可能发生在另一个分区中。
  从其主函数以外的其他分区调用CanXL_GetCurrentTime (),例如,通过提供CAN XL 卫星。

8.3.5 CanXL_GetEgressTimeStamp

  注意:此API源自以太网驱动程序()。为了更好地理解API的初衷,您可以查看[8,以太网接口]和[12,以太网驱动程序]。
  如果启用了开发错误检测:该函数应检查参数CtrlIdx 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用了开发错误检测:该函数应检查参数timeQualPtr 和timeStampPtr 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_POINTER。
  该函数应在编译前通过配置参数CanXLEthGlobalTimeSupport 配置为打开/关闭。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL _GetEgressTimeStamp()将引发错误CanXL.CANXL_E_UNINIT。

8.3.6 CanXL_GetIngressTimeStamp

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8、Ethernet Interface]和[12、Ethernet Driver]。
  如果启用开发错误检测:该函数将检查参数CtrlIdx 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用开发错误检测:该函数应检查参数DataPtr、timeQualPtr和timeStampPtr 是否有效。
  如果检查失败,该函数将引发开发错误CANXL_E_PARAM_POINTER。
  该函数应在编译前通过配置参数CanXLEthGlobalTimeSupport 配置为打开/关闭。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL _Get IngressTimeStamp()将引发错误CanXL.CANXL_E_UNINIT。

8.3.7 CanXL_获取物理地址

  注意:此API源自以太网驱动程序()。为了更好地理解API的初衷,您可以查看[8,以太网接口]和[12,以太网驱动程序]。
  该函数应读取索引控制器使用的源地址(参见CanXLEthPhysAddress)。
  如果启用了开发错误检测:该函数应检查参数CtrlIdx 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用了开发错误检测:该函数将检查参数PhysAddrPtr 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_POINTER。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL _Get PhysAddr()将引发错误CanXL.CANXL_E_UNINIT。

8.3.8 CanXL_GetRxStats

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8,Ethernet Interface]和[12,Ethernet Driver]。它被AUTOSAR以太网接口调用以实现兼容CAN XL 不可知行为。
  服务CanXL_GetRxStats ()没有任何功能并且应始终返回E_NOT_OK而不执行任何操作。

8.3.9 CanXL_GetTxErrorCounterValues

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8,Ethernet Interface]和[12,Ethernet Driver]。它被AUTOSAR以太网接口调用以实现兼容CAN XL 不可知行为。
  服务CanXL_GetTxErrorCounterValues ()没有任何功能,并且应始终返回E_NOT_OK,而不执行任何操作。

8.3.10 CanXL_GetTxStats

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8,Ethernet Interface]和[12,Ethernet Driver]。它被AUTOSAR以太网接口调用以实现兼容CAN XL 不可知行为。
  服务CanXL_GetTxStats ()没有任何功能并且应始终返回E_NOT_OK而不执行任何操作。

8.3.11 CanXL_ProvideTxBuffer

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8、Ethernet Interface]和[12、Ethernet Driver]。
  该函数应提供传输缓冲区资源。CAN XL 驱动程序应锁定缓冲区,直到它收到对CanXL_Transmit()服务的后续调用,并在BufIdxPtr 参数中返回缓冲区索引。
  如果控制器的CanXLEthEgressFifoIdx 中存在参数Priority 的匹配配置,则应使用包含的参数CanXLEthEgressFifoCanXLPriority 和CanXLEthEgressFifoCanXLQueue。
  否则,默认值CanXLCtrlEthDefaultPriority 和CanXLEthDefaultQueue 确实适用。
  ()请求的缓冲区大于可用缓冲区长度,则缓冲区不应被锁定,但返回可用长度和BUFREQ_E_OVFL。
  如果所有可用缓冲区都在使用中,则组件应返回BUFREQ_E_BUSY。
  如果启用了开发错误检测:该函数应检查参数CtrlIdx 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用了开发错误检测:该函数应检查参数BufIdxPtr 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_POINTER。
  如果启用了开发错误检测:该函数应检查参数BufPtr 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_POINTER。
  如果启用开发错误检测:该函数将检查参数LenBytePtr 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_POINTER。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL_ProvideTxBuffer ()将引发错误CanXL.CANXL_E_UNINIT。

8.3.12 CanXL_接收

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8、Ethernet Interface]和[12、Ethernet Driver]。
  如果启用开发错误检测:该函数将检查参数CtrlIdx 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_CONTROLLER。
  该函数应从参数FifoIdx 引用的相应队列的接收缓冲区中读取下一帧。
  该函数使用回调函数EthIf_RxInduction ()将接收到的帧传递到以太网接口,并指示接收缓冲区中是否还有更多帧。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL _Re ceive()将引发错误CanXL.CANXL_E_UNINIT。

8.3.13 CanXL_SetControllerMode

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8、Ethernet Interface]和[12、Ethernet Driver]。
  该功能应存储索引控制器的当前通信状态,而不会影响CAN XL 控制器硬件。
  另请参阅第7.2.1 小节。
  如果启用了开发错误检测:该函数应检查参数CtrlIdx 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL _Set ControllerMode()将引发错误CanXL.CANXL_E_UNINIT。

8.3.14 CanXL_设置PhysAddr

  注意:此API源自以太网驱动程序()。为了更好地理解API的初衷,您可以查看[8,以太网接口]和[12,以太网驱动程序]。
  该函数应更新索引控制器使用的源地址(参见CanXLEthPhysAddress)。
  如果启用了开发错误检测:该函数应检查参数CtrlIdx 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用了开发错误检测:该函数将检查参数PhysAddrPtr 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_POINTER。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL _Set PhysAddr()将引发错误CanXL.CANXL_E_UNINIT。

8.3.15 CanXL_传输

  注意:此API源自以太网驱动程序()。为了更好地理解API的初衷,您可以查看[8,以太网接口]和[12,以太网驱动程序]。
  地址)构建以太网头,并触发先前填充的传输缓冲区的传输。
  传输结束后,驱动程序需要释放分配的缓冲区。
  实际缓冲区释放何时发生取决于实现,例如在CanXL_TxConfirmation、Can_MainFunction 上下文中,或在下一个CanXL_ProvideTxBuffer 期间。
  注意:每次成功传输都会在CAN XL 物理总线上产生一个SDU 类型05h(映射隧道802.3 以太网帧)XLFF。
  如果启用开发错误检测:该函数将检查参数CtrlIdx 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用开发错误检测:该函数将检查参数BufIdx 是否有效。如果检查失败,该函数将引发开发错误CanXL.CANXL_E_INV_PARAM。
  如果启用开发错误检测:该函数将检查参数PhysAddrPtr 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_POINTER。
  如果启用了开发错误检测:该功能应检查控制器模式是否处于活动状态。如果检查失败,该功能应引发开发错误CanXL.CANXL_E_INV_MODE。
  如果在未调用CanXL_ProvideTxBuffer()的情况下调用CanXL_Transmit(),则它将返回E_NOT_OK。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL_Transmit()将引发错误CanXL.CANXL_E_UNINIT。

8.3.16 CanXL_Tx确认

  注意:此API源自以太网驱动程序()。为了更好地理解API的初衷,您可以查看[8,以太网接口]和[12,以太网驱动程序]。
  该函数应检查所有已填充的传输缓冲区是否已成功传输。如果先前调用CanXL_Transmit()服务时提出请求,该函数将使用回调函数EthIf_TxConfirmation()为每个传输的帧发出传输确认。
  ()的调用已启用传输确认,则该函数应释放缓冲区资源。
  如果启用了开发错误检测:该函数应检查参数CtrlIdx 是否有效。如果检查失败,该函数应引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用开发错误检测:该函数应检查控制器模式是否处于活动状态。如果检查失败,该函数应引发开发错误CanXL.CANXL_E_INV_MODE。
  如果启用了开发错误检测:如果驱动程序尚未初始化,CanXL _Tx Confirmation()将引发错误CanXL.CANXL_E_UNINIT。

8.3.17 CanXL_UpdatePhysAddrFilter

  注:该API源自Ethernet Driver()。为了更好地理解该API的初衷,您可以查看[8、Ethernet Interface]和[12、Ethernet Driver]。
  该功能应更新索引控制器的物理地址接收过滤器(如果可用)。
  注:参见第7.3 节“接收处理”。
  如果启用开发错误检测:该函数将检查参数CtrlIdx 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_CONTROLLER。
  如果启用了开发错误检测,该函数将检查参数PhysAddrPtr 是否有效。如果检查失败,该函数将引发开发错误CANXL_E_PARAM_POINTER。
  如果启用开发错误检测:如果驱动程序尚未初始化,CanXL _Up datePhysAddrFilter()将引发错误CanXL.CANXL_E_UNINIT。

8.3.18 CanXL_Write

  ()的对应函数,并且需要PduInfo 中的XLParams 给出的附加XLFF 特定参数。
  Can_Write ()用于请求传输CAN 2.0/FD 帧,该函数用于请求传输具有以下SDU 类型的CAN XL 帧:
  •01h(基于内容的CAN XL帧)
  •03h(隧道CAN 2.0/FD帧)

2,CiA 611-1]中定义的其他 SDU 类型

  此函数不支持SDU 类型05h(映射隧道802.3 以太网帧),并且仅由CanXL_Transmit()使用。
  对于CAN 2.0 和CAN FD 帧,CanHardwareObject 配置为CAN HTH,而对于CAN XL 帧,CanXLHardwareObject 配置为CAN XL HTH。
  CanHardwareObject 和CanXLHardwareObject 可以共享相同的硬件队列。
  当调用CanXL_Write()来传输隧道CAN 2.0/FD 帧(SDU 类型03h)时,它负责准备LLC 数据。
  结构请参阅[2,CiA 611-1]。LLC 数据字节1 应由以下内容组装而成:
  •ESI 始终处于错误活动状态
  •BRS 始终禁用
  •隧道CAN 2.0/FD 帧的DLC对于其他SDU 类型,SDU 数据直接传输到硬件。
  CanXL_Write ()应接受空指针作为SDU (Can_PduType.Can_SduPtrType =NULL)。
  如果为硬件对象启用了触发传输API ,CanXL _Write()应将空指针解释为SDU (Can_PduType.Can_SduPtrType =NULL)作为使用触发传输接口的请求。
  如果是这样并且硬件对象是空闲的,则CanXL_Write ()将使用所分配的消息缓冲区的总大小来调用CanIf_TriggerTransmit来获取PDU的数据。
  该函数首先检查HTH 标识的硬件传输对象是否空闲,以及同一HTH 是否正在进行另一个传输请求。
  如果硬件传输对象正忙于处理L-PDU 的另一个传输请求,则该函数不应执行任何操作,并且应返回CAN_BUSY。
  Write()的抢占式调用,且无法重入处理(即使用相同HTH 的调用),则该函数将返回CAN_BUSY。
  如果启用了开发错误检测:如果驱动程序尚未初始化,则CanXL_Write ()将引发错误CanXL.CANXL_E_UNINIT。
  如果启用了开发错误检测:如果参数Hth 不是配置的CAN XL 硬件传输句柄,则该函数将引发错误CANXL_E_PARAM_HANDLE。
  如果启用了开发错误检测:如果给定的SduType 的值为05h,则该函数将引发错误CanXL.CANXL_E_INV_PARAM。
  如果启用了开发错误检测:如果SDU 类型的值不是03h,则该函数将在长度为0 或超过2048 时引发错误CANXL_E_PARAM_DATA_LENGTH。如果启用了开发错误检测:如果PduInfo 与CiA 611-1 SDU 类型第5 章不一致,则该函数将引发错误CanXL.CANXL_E_INV_PARAM。
  如果启用了开发错误检测:如果PduInfo->XLParams->Vcid 大于255,则该函数将引发错误CanXL.CANXL_E_INV_PARAM。
  如果启用了开发错误检测:如果参数PduInfo 是空指针,则该函数将引发CANXL_E_PARAM_POINTER。
  如果启用了开发错误检测:如果XLParams 指针为空指针,则该函数将引发CANXL_E_PARAM_POINTER。

8.4 回调通知

  注意:CAN XL 驱动程序没有额外的回调通知。

8.5 预定功能

  注意:CAN XL 驱动程序没有额外的预定功能。

8.6 预期接口

  本章列出了其他模块所需的所有接口。

8.6.1 强制接口

  注意:本节定义了实现模块核心功能所需的所有接口。

8.6.2 可选接口

  注意:本节定义了实现模块可选功能所需的所有接口。

8.6.3 可配置接口

  注意:CAN XL 驱动程序不使用可配置接口。

9 时序图

  不需要序列图。序列与CAN/以太网没有区别。

10 配置规范

  总的来说,本章定义了配置参数及其聚类到容器中。为了支持规范,第10.1 章描述了基础知识。
  它还指定了您用于参数规范的模板(表格)。我们打算保留规范中的第10.1 章以保证理解。
  第10.2 章指定了CAN XL Driver 模块的结构(容器)和参数。
  10.4章详细介绍了模块CAN XL Driver的发布信息。

10.1 如何阅读本章

  详细信息请参阅SWS_BSWGeneral中10.1章“配置规范介绍”。

10.2 容器和配置参数

  以下章节总结了所有的配置参数。参数的详细含义在第7章和第8章中描述。

10.2.1 CanXL 通用功能

10.2.2 CanXL控制器

  该模块应在每个分区中作为独立实例运行,这意味着被调用的API 将仅针对其被调用的分区。
  如果CanEcucPartitionRef 引用一个或多个ECUC分区,则CanXLEthControllerEcucPartitionRef应具有1 的多重性,并且也引用一个ECUC 分区。
  注意:CanXLEthControllerEcucPartitionRef引用的分区可能与CanEcucPartitionRef 中的任何引用不同。

10.2.3 CanXLEthEgressFifo

10.2.4 CanXLEthIngressFifo

10.2.5 CanXLBaudrate配置

10.2.6 CanXL硬件对象

10.2.7 CanXLHw过滤器

10.3 配置提示

  CAN XL总线预计只能通过CAN堆栈进行控制,而以太网堆栈像虚拟总线一样切换CAN XL总线,真实的总线状态仅在以太网侧以链路状态可见。
  ComM 支持不同ComM 通道之间的这种连接,该模式主要用于不需要单独网络管理的VLAN。这种支持以管理通道的形式出现(这里是链接到CanController 的ComM 通道)一个或多个受管通道(这里是所有以太网通道,包括所有VLAN)。受管通道是指通过ComMManageReference 进行管理的通道。

10.4 公开信息

  详细信息请参阅SWS_BSWGeneral 中的第10.3 章“公开信息”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/599010.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【七十六】【算法分析与设计】2435. 矩阵中和能被 K 整除的路径,87. 扰乱字符串,三维动态规划

2435. 矩阵中和能被 K 整除的路径 给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发,每一步只能往 下 或者往 右 ,你想要到达终点 (m - 1, n - 1) 。 请你返回路径和能被 k 整除的路径数目,由于答案可能很大…

【Python爬虫实战入门】:全球天气信息爬取

文章目录 一、爬取需求二、所需第三方库2.1 简介 三、实战案例四、完整代码 一、爬取需求 目标网站:http://www.weather.com.cn/textFC/hb.shtml 需求:爬取全国的天气(获取城市以及最低气温) 目标url:http://www.weath…

数字孪生技术在垃圾焚烧处理中的可视化应用

在迈向智慧城市的进程中,数字孪生技术在垃圾处理领域展现出了巨大潜力。特别是在垃圾焚烧过程的管理和优化上,数字孪生垃圾焚烧可视化技术已成为一项革命性的进步。 通过 HT 构建虚拟的垃圾焚烧模型,实时映射和模拟实际焚烧过程中的各项关键…

QT+网络调试助手+TCP服务器

一、UI界面设计 二、单线程 代码设计 1、 查找合法的本地地址&#xff0c;用于当作服务器的IP地址 #include <QThread> #include <QTcpSocket> #include <QNetworkInterface> #include <QMessageBox>QList<QHostAddress> ipAddressesList QNe…

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码api代开发

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码官方平台api授权代开发 一、短视频矩阵系统源码开发步骤 短视频矩阵系统的源头开发步骤通常包括以下几个关键阶段&#xff1a; 1.需求分析&#xff1a;明确系统的目标用户、功能需求、性能要求等。 2.系统设计&…

bite阶段性测试_数据结构

解决问题之前我们要了解什么是度&#xff0c;特别是二叉树中的度&#xff0c;和图论中的度的定义是不同的 什么是度&#xff1a; 在图论中&#xff0c;一个节点&#xff08;或称为顶点&#xff09;的“度”是指与该节点直接相连的边的数量。度是用来衡量一个节点与其他节点连接…

Python:实现b站登录并保存登录信息(baidu Comate插件帮助我逐行分析代码)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

O2OA(翱途)支持高斯_openGauss,瀚高_HighGo,磐维_panweidb等各种国产postgres分支数据库接入

O2OA&#xff08;翱途&#xff09;作为一款企业级应用平台&#xff0c;其支持多种数据库系统是其灵活性和可扩展性的重要体现。从MySQL、Oracle到国产的达梦、神州等数据库&#xff0c;再到对PostgreSQL的原生支持&#xff0c;O2OA展现了其对不同数据库环境的良好适应性。特别地…

LeetCode 难题解析 —— 正则表达式匹配 (动态规划)

10. 正则表达式匹配 思路解析 这道题虽然看起来不难理解&#xff0c;但却存在多种可能&#xff0c;当然这种可能的数量是有限的&#xff0c;且其规律对于每一次判别都使用&#xff0c;所以自然而然就想到用 动态规划 的方法啦 接下来逐步分析可能的情况&#xff1a; &#x…

stm32f103zet6_DAC_2_输出电压

实现效果 DAC输出的电压 同过电压表测量电压 1.DAC配置的步骤 初始化DAC时钟。配置DAC的GPIO端口。设置DAC的工作模式&#xff08;例如&#xff0c;是否使用触发功能&#xff0c;是否启用DAC中断等&#xff09;。启动DAC。 2常用的函数 函数 HAL_DAC_Start() - 开启指定…

企业终端安全管理软件有哪些?终端安全管理软件哪个好?

终端安全的重要性大家众所周知&#xff0c;关系到生死存亡的东西。 各类终端安全管理软件应运而生&#xff0c;为企业提供全方位、多层次的终端防护。 有哪些企业终端安全管理软件&#xff1f; 一、主流企业终端安全管理软件 1. 域智盾 域智盾是一款专为企业打造的全面终端…

淘宝商品搜索API:关键字搜索返回值详解与利用

在当今电子商务蓬勃发展的时代&#xff0c;淘宝作为中国最大的在线购物平台之一&#xff0c;拥有海量的商品信息和用户数据。为了更好地满足商家和开发者的需求&#xff0c;淘宝提供了商品搜索API&#xff0c;允许通过关键字搜索来获取商品信息。本文将详细解析淘宝商品搜索API…

LeetCode 每日一题 Day 144-157

2385. 感染二叉树需要的总时间 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟&#xff0c;感染 将会从值为 start 的节点开始爆发。 每分钟&#xff0c;如果节点满足以下全部条件&#xff0c;就会被感染&#xf…

抖音小店怎么快速出体验分?分享三种不花一分钱,就能出分的技巧

哈喽~我是电商月月 才做抖音小店&#xff0c;新开的店铺是没有体验分的 没有体验分就没法用猜你喜欢和搜索流量&#xff0c;也没法持续做精选联盟&#xff0c;没体验分店铺就不好出单 于是很多朋友就去网上选择找S分机构&#xff0c;想快速出体验分&#xff0c;但这种方式我…

学习软考----数据库系统工程师24

关系数据库设计基础知识 函数依赖 码 多值依赖 性质

Semi-decentralized Federated Ego Graph Learning for Recommendation

论文概况 本文是2023年WWW的一篇联邦推荐论文&#xff0c;提出了一个半去中心化的联合自我图学习框架。 Introduction 作者提出问题 现有的推荐方法收集所有用户的自我图来组成一个全局图&#xff0c;导致隐私风险。联合推荐系统已被提出来缓解隐私问题&#xff0c;但在客户…

TXT文本高效批量编辑,支持批量将每个单号间的空白行进行删除掉,文本内容管理更方便

TXT文本是一种常用的存储快递单号的数据格式。然而&#xff0c;当TXT文本中存在大量的空白行时&#xff0c;不仅浪费了存储空间&#xff0c;还可能导致批量编辑和查询变得低效。为了解决这一问题&#xff0c;我们推出了高效的TXT文本批量编辑功能&#xff0c;支持批量删除单号间…

EOCR-ELR-30RM7Q电机保护器 施耐德韩国三和

EOCR-ELR-30RM7Q电机保护器 施耐德韩国三和 基于MCU(微处理器)的密集型设计 精确的接地故障保护功能 电力系统和电动机的接地故障保护 零序电流互感器监测接地故障 电流和故障延时单独设定 LED显示电源输入和运行状态 嵌入式安装 EOCR主要产品有电子式电动机保护继电器&#xf…

redis分片java实践、redis哨兵机制实现、redis集群搭建

redis分片java实践 linux安装redishttps://mp.csdn.net/mp_blog/creation/editor/134864302复制redis.conf配置文件成redis1.conf、redis2.conf、redis3.conf 修改redis的端口信息和存pid文件的路径。存pid文件的路径只要不同就行了&#xff0c;没什么特别要求。 指定配置文件…

记录汇川:电磁阀封装

二位电磁阀封装&#xff1a; 中封三位电磁阀封装&#xff1a; HMI&#xff1a;
最新文章