CAN Transport Layer (CanTp)
Provides segmentation and reassembly of CAN messages up to 4095 bytes (ISO 15765-2).
Funktionen — Übersicht
void CanTp_Init (const CanTp_ConfigType* CfgPtr);This function initializes the Can Tp module.void CanTp_GetVersionInfo (Std_VersionInfoType* versioninfo);This function returns the version information of the Can Tp module.void CanTp_Shutdown (void);This function is called to shutdown the Can Tp module.Std_ReturnType CanTp_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr);Requests transmission of a PDU.Std_ReturnType CanTp_CancelTransmit (PduIdType TxPduId);Requests cancellation of an ongoing transmission of a PDU in a lower layer communication module.Std_ReturnType CanTp_CancelReceive (PduIdType RxPduId);Requests cancellation of an ongoing reception of a PDU in a lower layer transport protocol module.Std_ReturnType CanTp_ChangeParameter (PduIdType id, TPParameterType parameter, uint16 value);Request to change a specific transport protocol parameter (e.Std_ReturnType CanTp_ReadParameter (PduIdType id, TPParameterType parameter, uint16* value);This service is used to read the current value of reception parameters BS and STmin for a specified N - SDU.void CanTp_MainFunction (void);The main function for scheduling the CAN TP.void CanTp_RxIndication (PduIdType RxPduId, const PduInfoType* PduInfoPtr);Indication of a received PDU from a lower layer communication interface module.void CanTp_TxConfirmation (PduIdType TxPduId, Std_ReturnType result);The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.
Typen — Übersicht
struct CanTp_ConfigTypeData structure type for the post - build configuration parameters.
Funktionen & Typen — Detailansicht
函数 CanTp_Init [SWS_CanTp_00208] 📄 PDF
void CanTp_Init (const CanTp_ConfigType* CfgPtr);
This function initializes the Can Tp module.
同步且不可重入的函数 CanTp_Init 初始化 CanTp 模块 [SWS_CanTp_00208]。它通过参数 CfgPtr 接收指向 Post-Build 配置数据(CanTp_ConfigType)的指针,且没有返回值 [SWS_CanTp_00208]。模块环境必须强制调用 CanTp_Init,然后模块才能用于进一步的处理 [SWS_CanTp_00199]。
在初始化期间,模块的所有全局变量均被初始化,并且所有传输协议连接都被置于 CANTP_ON 的子状态,在该子状态下分段传输和分段接收均未处于活动状态 [SWS_CanTp_00030]。此时接收路径处于状态 CANTP_RX_WAIT,发送路径处于状态 CANTP_TX_WAIT [SWS_CanTp_00030]。成功执行后,模块切换到内部状态 CANTP_ON [SWS_CanTp_00170]。
如果在模块已处于全局状态 CANTP_ON 时调用 CanTp_Init,则该函数将模块重置为 Idle 状态,从而既没有发送过程也没有接收过程在运行 [SWS_CanTp_00111]。
如果开发错误检测(Development Error Detection)已启用,且 PDU Router 或 CAN Interface 尝试在调用 CanTp_Init 之前执行模块的函数(CanTp_GetVersionInfo 除外),则 CanTp 模块会报告错误 CANTP_E_UNINIT [SWS_CanTp_00031]。
该文本由人工智能基于规范生成。
实现者指南即将推出(复杂度 I2)
函数 CanTp_GetVersionInfo [SWS_CanTp_00210] 📄 PDF
void CanTp_GetVersionInfo (Std_VersionInfoType* versioninfo);
This function returns the version information of the Can Tp module.
函数 CanTp_Shutdown [SWS_CanTp_00211] 📄 PDF
void CanTp_Shutdown (void);
This function is called to shutdown the Can Tp module.
用法与调用上下文
函数 CanTp_Shutdown 用于有序关闭整个 CanTp 模块([SWS_CanTp_00211])。该接口通过头文件 CanTp.h 提供,并具有服务 ID 0x02([SWS_CanTp_00211])。该调用为同步处理,不接受传入参数,也不返回返回值([SWS_CanTp_00211])。
状态转换与清理
执行时,CanTp_Shutdown 会关闭所有挂起的传输协议连接,释放所有已分配的资源,并将 CanTp 模块转入状态 CANTP_OFF([SWS_CanTp_00202])。中止行为的一个重要方面是,对于仍未完成的帧传输或帧接收过程,明确禁止向上一层触发任何通知([SWS_CanTp_00200])。
并发性与边界条件
该函数被指定为不可重入(Non Reentrant)([SWS_CanTp_00211])。因此,不得同时从不同的执行上下文或中断例程中调用该函数。该接口的功能范围内未指定具体的错误代码或发往错误管理的通知。
本使用说明基于 AUTOSAR Classic Release R20-11 规范自动生成。
实现者指南即将推出(复杂度 I1)
函数 CanTp_Transmit [SWS_CanTp_00212] 📄 PDF
Std_ReturnType CanTp_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr);
Requests transmission of a PDU.
使用
函数 CanTp_Transmit 用于请求通过 CAN 传输层传输 N-SDU [SWS_CanTp_00212]。待传输 PDU 的标识符(TxPduId)以及指向数据、长度和元数据的指针(PduInfoPtr)作为参数传递 [SWS_CanTp_00212]。该调用通过 E_OK 返回成功接受,或通过 E_NOT_OK 返回拒绝请求 [SWS_CanTp_00212]。虽然调用是同步确认的,但传输的处理是异步的 [SWS_CanTp_00176](解释:规范表中的“Synchronous”说明可能指的是请求的接收)。 问题 Q-df438ddaa4963aba (未决)
交互与 PDU 处理
对于带有元数据的 N-SDU,模块会存储地址信息(取决于寻址格式,如 Normal、Extended、Mixed 11 bit、Normal fixed 或 Mixed 29 bit),以便将其用于 SF-、FF- 和 CF-N-PDU 以及用于识别 FC-N-PDU [SWS_CanTp_00334]。如果不使用元数据,CanTp_Transmit 仅访问长度信息 SduLength 以准备 SF- 或 FF-PCI,而不使用 N-SDU 数据缓冲区 [SWS_CanTp_00225]。
错误处理与并发
- 错误检查:如果启用了 DET 且
PduInfoPtr为NULL指针,该函数将报告错误CANTP_E_PARAM_POINTER并直接返回,不执行进一步操作 [SWS_CanTp_00321]。 - 通道占用:如果分配的通道处于
CANTP_TX_PROCESSING状态,或者该 N-SDU 标识符的会话已在运行,则传输请求将被拒绝并返回E_NOT_OK[SWS_CanTp_00123], [SWS_CanTp_00206]。 - 可重入性:该服务对于不同的 PDU-ID 是可重入的,但对于相同的 PDU-ID 是不可重入的 [SWS_CanTp_00212]。
本说明由 AI 基于 AUTOSAR Classic R20-11 规范生成。
实现者指南即将推出(复杂度 I2)
函数 CanTp_CancelTransmit [SWS_CanTp_00246] 📄 PDF
Std_ReturnType CanTp_CancelTransmit (PduIdType TxPduId);
Requests cancellation of an ongoing transmission of a PDU in a lower layer communication module.
同步函数 CanTp_CancelTransmit 请求中止下层通信模块中正在进行的 PDU 传输 [SWS_CanTp_00246],从而启动发送过程的取消 [SWS_CanTp_00274]。受影响 PDU 的标识符(TxPduId)作为参数传递 [SWS_CanTp_00246]。作为返回值,E_OK 指示目标模块成功执行了中止,而 E_NOT_OK 则指示被拒绝 [SWS_CanTp_00246]。
函数调用后,受影响连接上的传输将被中止[SWS_CanTp_00243]。如果中止成功执行,模块CanTp必须调用具有否定结果E_NOT_OK的确认PduR_CanTpTxConfirmation,以通知上层关于中止的信息[SWS_CanTp_00255]。
在启用开发错误检测(Development Error Detection)时,CanTp_CancelTransmit检查TxPduId的有效性:如果参数无效,将生成开发错误CANTP_E_PARAM_ID并返回E_NOT_OK[SWS_CanTp_00254]。如果为当前未处于传输过程中的 N-SDU 请求中止,模块向 Default Error Tracer(DET)报告运行时错误CANTP_E_OPER_NOT_SUPPORTED,并且同样返回E_NOT_OK[SWS_CanTp_00254]。
在并发性方面,该函数对于不同的 PDU-ID 是可重入的,但对于相同的TxPduId不得并发调用[SWS_CanTp_00246]。
本使用说明基于 AUTOSAR 规范自动创建。
实现者指南即将推出(复杂度 I2)
函数 CanTp_CancelReceive [SWS_CanTp_00257] 📄 PDF
Std_ReturnType CanTp_CancelReceive (PduIdType RxPduId);
Requests cancellation of an ongoing reception of a PDU in a lower layer transport protocol module.
函数CanTp_CancelReceive同步中止下层传输协议模块中正在进行的 PDU 接收[SWS_CanTp_00257]。它可通过头文件CanTp.h获取,并具有服务 ID 0x4c[SWS_CanTp_00257]。
使用和调用条件
通过输入参数RxPduId传递要中止的 PDU 的标识符[SWS_CanTp_00257]。该调用被同步处理,并被指定为不可重入(Non Reentrant)[SWS_CanTp_00257]。作为返回值,类型为Std_ReturnType的接口提供:
E_OK:中止已由目标模块成功执行[SWS_CanTp_00257]。E_NOT_OK:中止被目标模块拒绝[SWS_CanTp_00257]。
错误处理
在启用开发错误检测(Development Error Detection)时,该函数会验证参数RxPduId[SWS_CanTp_00260]:
- 如果
RxPduId的值无效,CanTp_CancelReceive将报告开发错误CANTP_E_PARAM_ID并返回E_NOT_OK[SWS_CanTp_00260]。 - 如果为当前未处于正在进行的接收过程中的 N-SDU 请求中止,模块向 Default Error Tracer 报告运行时错误
CANTP_E_OPER_NOT_SUPPORTED并返回E_NOT_OK[SWS_CanTp_00260]。
与相邻模块的交互
如果接收中止成功执行,CanTp 会调用带有通知结果E_NOT_OK的回调函数PduR_CanTpRxIndication,以通知上层关于中止的信息[SWS_CanTp_00263]。
本使用说明基于 AUTOSAR Classic R20-11 规范并自动生成。
实现者指南即将推出(复杂度 I1)
函数 CanTp_ChangeParameter [SWS_CanTp_00302] 📄 PDF
Std_ReturnType CanTp_ChangeParameter (PduIdType id, TPParameterType parameter, uint16 value);
Request to change a specific transport protocol parameter (e.g. block size).
同步函数CanTp_ChangeParameter用于在运行时更改特定的传输协议参数,例如块大小([SWS_CanTp_00302])。该服务通过头文件CanTp.h提供,接收 PDU 标识符(id)、参数标识符(parameter)以及要设置的新值(value)([SWS_CanTp_00302])。成功执行时,函数返回E_OK;如果更改失败或被拒绝,则返回E_NOT_OK([SWS_CanTp_00302])。
关于并发性和调用条件,适用以下规定:
- 该接口采用不可重入(Non Reentrant)设计([SWS_CanTp_00302])。
- 如果在调用时受影响的 N-SDU 已处于正在进行的接收过程中,
CanTp_ChangeParameter会立即中止,返回E_NOT_OK且不改变参数值([SWS_CanTp_00304])。
对于通用连接存在特殊的交互:如果为带有 MetaData 的 N-SDU 调用该函数,则参数更改将应用于所有通用连接,并对所有后续接收过程生效([SWS_CanTp_00338])。
此使用说明是基于规范要求自动生成的。
函数 CanTp_ChangeParameter 用于请求修改指定的传输协议参数(例如块大小 Block Size)[SWS_CanTp_00302]。该服务为同步执行且不可重入(Non Reentrant),通过头文件 CanTp.h 提供,其服务 ID 为 0x4b [SWS_CanTp_00302]。
调用时需传入受影响 PDU 的标识符 id、待更改参数的标识符 parameter 以及新参数值 value。当参数成功修改时函数返回 E_OK;若修改请求被拒绝则返回 E_NOT_OK [SWS_CanTp_00302]。
在并发与调用时序方面须遵循以下规则:
- 若针对当前正处于接收过程中的 N-SDU 请求修改参数,
CanTp_ChangeParameter将立即返回E_NOT_OK,且不修改任何参数值 [SWS_CanTp_00304]。 - 当对带有元数据 MetaData(指示通用连接)的 N-SDU 调用该服务时,所做的参数更改将应用于所有通用连接,并在后续的所有接收流程中生效 [SWS_CanTp_00338]。
本使用提示由人工智能基于 AUTOSAR 规范自动生成。
实现者指南即将推出(复杂度 I1)
函数 CanTp_ReadParameter [SWS_CanTp_00323] 📄 PDF
Std_ReturnType CanTp_ReadParameter (PduIdType id, TPParameterType parameter, uint16* value);
This service is used to read the current value of reception parameters BS and STmin for a specified N - SDU.
使用
同步函数CanTp_ReadParameter用于读取指定接收 N-SDU [SWS_CanTp_00323]的接收参数BS(Block Size)或STmin(Separation Time minimum)的当前值。其声明可通过头文件CanTp.h获取[SWS_CanTp_00323]。
该接口具有以下参数:
id(in):接收到的 N-SDU 的标识符(类型PduIdType),为其读取接收参数[SWS_CanTp_00323]。parameter(in):确定要读取的参数(类型为TPParameterType的BS或STmin)[SWS_CanTp_00323]。value(out):指向uint16的指针,通过它提供读取出的参数值[SWS_CanTp_00323]。
作为返回值,函数提供Std_ReturnType;其中E_OK表示接受请求,E_NOT_OK表示拒绝[SWS_CanTp_00323]。
错误处理
如果开发错误检测(Development Error Detection)已启用,CanTp_ReadParameter将检查参数id和parameter的有效性[SWS_CanTp_00324]。如果这些参数之一无效,函数将报告开发错误CANTP_E_PARAM_ID并返回E_NOT_OK[SWS_CanTp_00324]。
并发性与限制
该函数被指定为不可重入(Non Reentrant)[SWS_CanTp_00323]。调用者必须避免对同一接口进行并行访问。
此文本由 AI 基于 AUTOSAR R20-11 的规范文档生成。
实现者指南即将推出(复杂度 I1)
函数 CanTp_MainFunction [SWS_CanTp_00213] 📄 PDF
void CanTp_MainFunction (void);
The main function for scheduling the CAN TP.
函数 CanTp_MainFunction 用作 CAN 传输协议(CAN TP)周期性调度的核心入口点 [SWS_CanTp_00213], [SWS_CanTp_00164]。它拥有服务 ID 0x06,具有签名 void CanTp_MainFunction(void),并通过头文件 SchM_CanTp.h 提供 [SWS_CanTp_00213]。它不接收任何参数且不返回返回值 [SWS_CanTp_00213]。
调用上下文与时间控制
根据所需的周期时间,该调用由 Schedule Manager 或 Free Running Timer 模块启动 [SWS_CanTp_00164]。在模块内部,CanTp_MainFunction 负责协议流程的时间监控和控制 [SWS_CanTp_00164]。具体而言,该函数参与以下定时器和时间条件的处理:
- 传输和确认的协议超时:
N_As、N_Bs、N_Cs以及N_Ar、N_Br和N_Cr[SWS_CanTp_00164]。 - 遵守最小帧间隔时间
STMmin[SWS_CanTp_00164]。
错误处理与并发
在有效载荷中未为此函数定义针对 DET 或 DEM 的具体错误码。解释:作为周期性调用的调度函数,CanTp_MainFunction 可能是不可重入的,并且需要一致的调用速率,以确保内部定时器的正确递减。 问题 Q-2fe22e31085abf49 (未决)
本段文本由人工智能基于 AUTOSAR 规范 R20-11 生成。
实现者指南即将推出(复杂度 I1)
函数 CanTp_RxIndication [SWS_CanTp_00214] 📄 PDF
void CanTp_RxIndication (PduIdType RxPduId, const PduInfoType* PduInfoPtr);
Indication of a received PDU from a lower layer communication interface module.
用法与语义
同步函数 [SWS_CanTp_00214] 向 CAN 传输模块通报底层通信接口模块对 N-PDU 的接收。该调用传入接收到的 PDU 的标识(RxPduId),并通过指针 PduInfoPtr 传入长度(SduLength)、有效载荷数据(SduDataPtr)及相关元数据。该函数没有返回值。
并发与调用上下文
该函数对于不同的 PDU-ID 是可重入的,但对于相同的 PDU-ID 是不可重入的 [SWS_CanTp_00214]。CanTp_RxIndication 允许在中断上下文中调用,例如直接在 CAN 接收中断中调用 [SWS_CanTp_00235]。
通用连接时的相互协作
当针对带有元数据的单帧(SF)或首帧(FF)调用时,CanTp 会保存所包含的地址信息(例如在 Normal-fixed 或 Mixed-29 位寻址中的 N_SA 和 N_TA)。这些信息用于与上一层建立连接、发送流控制帧(FC)以及识别连续帧(CF)[SWS_CanTp_00330]。在后续的 CF 帧和接收到的 FC 帧中,CanTp 会根据保存的值检查元数据中的地址数据 [SWS_CanTp_00333]、[SWS_CanTp_00336]。
错误处理与填充
如果启用了 DET 且 PduInfoPtr 为 NULL 指针,则该函数报告错误 CANTP_E_PARAM_POINTER 并直接返回而不执行任何操作 [SWS_CanTp_00322]。如果针对有效载荷至多 8 字节的帧启用了填充检查(CanTpRxPaddingActivation 或 CanTpTxPaddingActivation 等于 CANTP_ON),则在发生长度错误时向 DET 报告运行时错误 CANTP_E_PADDING:
- 带有
SduLength < 8的 SF 将被拒绝 [SWS_CanTp_00345]。 - 带有
SduLength != 8的最后一个 CF 将通过PduR_CanTpRxIndication()携带E_NOT_OK中止正在进行的接收 [SWS_CanTp_00346]。 - 接收到的带有
SduLength < 8的 FC 将通过PduR_CanTpTxConfirmation()携带E_NOT_OK中止正在进行的传输 [SWS_CanTp_00349]。
本文本由 AI 生成,仅供参考。一切以 AUTOSAR 规范为准。
实现者指南即将推出(复杂度 I2)
函数 CanTp_TxConfirmation [SWS_CanTp_00215] 📄 PDF
void CanTp_TxConfirmation (PduIdType TxPduId, Std_ReturnType result);
The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.
CanTp 模块通过头文件 CanTp.h 提供同步回调函数 CanTp_TxConfirmation(服务 ID 0x40),以接收已发送 PDU 的确认调用 [SWS_CanTp_00076] [SWS_CanTp_00215]。通过此接口,底层通信接口模块报告 PDU 传输的成功发送或失败 [SWS_CanTp_00215]。
参数与返回值
该函数无返回值(void),并需要两个输入参数 [SWS_CanTp_00215]:
TxPduId:已传输 PDU 的 ID [SWS_CanTp_00215]。result:传输状态。值E_OK确认传输成功,而E_NOT_OK表示 PDU 传输失败 [SWS_CanTp_00215]。
错误处理
如果以结果值 E_NOT_OK 调用 CanTp_TxConfirmation,CanTp 模块将中止关联的传输会话 [SWS_CanTp_00355]。
并发性与执行上下文
关于并发性,该函数对于不同的 PDU-ID 是可重入的,但对于相同的 PDU-ID 是不可重入的 [SWS_CanTp_00215]。它必须能够在中断上下文中调用,例如允许直接从 CAN 发送中断中调用 [SWS_CanTp_00236]。
此使用说明基于 AUTOSAR Classic Release R20-11 规范自动生成。
实现者指南即将推出(复杂度 I2)
类型 CanTp_ConfigType [SWS_CanTp_00340] 📄 PDF
Data structure type for the post - build configuration parameters.
Request a governed re-review of this record. The record is not changed immediately.
- Record
AUTOSAR/AP/record/CP_MOD_CanTp- Status
- unspecified
- Version
AUTOSAR/AP/record/CP_MOD_CanTp@rel:R20-11#e0467276- Content hash
e0467276- Source
- https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANTransportLayer.pdf#nameddest=SWS_CanTp_00208
gemini-3.8-flash-low· 2026-10-13 · 德文原文