3 功能描述
3.1功能
在3.1节中提到的功能涵盖了[1]中指定的全部功能。支持和不支持的功能分别在以下两个表格中展示。
支持的功能:
CAN收发器初始化。
通过DIO控制CAN收发器。
检测唤醒(wakeup)。
获取和设置CAN收发器的操作模式。
表3-1 支持的SWS功能
额外支持的MICROSAR功能:
使用构建后可选的MICROSAR身份管理器。
表3-2 额外支持的MICROSAR功能
不支持的功能:
通过SPI控制CAN收发器。
CAN收发器自诊断。
表3-3 不支持的SWS功能
CAN收发器驱动提供了用于初始化、操作模式变更和操作模式检测的服务函数,这些服务函数适用于使用的CAN收发器硬件。提供了可选的服务函数和回调函数,用于检测总线事件引发的唤醒,并将其报告给上层组件。
3.2 初始化
CAN收发器硬件在上电后需要进行初始化。因此,CAN收发器驱动提供了两个服务函数。
函数 CanTrcv_30_Tja1043_InitMemory
用于初始化收发器驱动所需的所有值。在上电或复位后,必须首先调用此函数。
函数 CanTrcv_30_Tja1043_Init
用于初始化由生成工具选择的所有CAN收发器通道。每个CAN收发器通道都被切换到操作模式:NORMAL。请注意,在调用 CanTrcv_30_Tja1043_Init
函数之前,必须先调用 CanTrcv_30_Tja1043_InitMemory
函数。
如果在初始化之前有唤醒事件待处理,CAN收发器驱动会存储此事件,并通过调用 EcuM_SetWakeupEvent
函数来通知它。
3.3 设置操作模式
CAN收发器硬件的操作模式可以通过服务函数 CanTrcv_30_Tja1043_SetOpMode
来改变。它能够从正常模式切换到待机模式,从待机模式切换到睡眠模式,以及从待机或睡眠模式切换回正常模式。根据规范,此函数不支持从正常模式直接切换到睡眠模式,或者从睡眠模式直接切换到待机模式。
如果使用与当前已设置的相同操作模式调用该函数,则不会发生模式变化,并且会返回 E_OK
(表示操作成功)。
3.4 获取操作模式
要检索指定CAN收发器硬件的当前操作模式,必须调用服务函数 CanTrcv_30_Tja1043_GetOpMode
。这个函数将返回当前CAN收发器的工作状态,例如正常模式、待机模式或睡眠模式。
3.5 获取版本信息
可以通过调用服务函数 CanTrcv_30_Tja1043_GetVersionInfo
来获取软件模块的版本信息。此功能必须在配置工具中启用,方法是勾选“版本信息API”复选框。
CAN收发器驱动模块的版本可以通过两种不同的方式获取:
-
调用函数
CanTrcv_30_Tja1043_GetVersionInfo
将返回模块的版本信息,该信息包含在Std_VersionInfoType
结构体中,此外还包括VendorID
和ModuleID
。 -
通过访问在头文件
CanTrcv_30_Tja1043.h
中指定的版本定义:-
AUTOSAR修订版本:
-
CANTRCV_30_TJA1043_AR_RELEASE_MAJOR_VERSION
- AUTOSAR主版本号 -
CANTRCV_30_TJA1043_AR_RELEASE_MINOR_VERSION
- AUTOSAR次版本号 -
CANTRCV_30_TJA1043_AR_RELEASE_PATCH_VERSION
- AUTOSAR补丁版本号
-
-
模块版本:
-
CANTRCV_30_TJA1043_SW_MAJOR_VERSION
- 软件主版本号 -
CANTRCV_30_TJA1043_SW_MINOR_VERSION
- 软件次版本号 -
CANTRCV_30_TJA1043_SW_PATCH_VERSION
- 软件补丁版本号
-
-
3.6 通过总线事件检测唤醒
如果配置工具中启用了通过总线检测唤醒的功能,那么在检测到唤醒时,下层必须调用回调函数 CanTrcv_30_Tja1043_CheckWakeup
。这个函数会检查指定的CAN收发器通道。如果收发器硬件处于睡眠或待机模式,并且检测到通过总线的唤醒事件,函数将返回 E_OK
;否则返回 E_NOT_OK
。
注意:
-
为了确定是否发生了唤醒事件,会评估收发器的“Wake”标志。如果“Wake”标志被设置,唤醒事件的原因可能是以下之一:
-
通过WAKE引脚的本地唤醒,
-
通过总线的远程唤醒,
-
上电。
-
-
CAN收发器驱动无法区分它们。因此,API
CanTrcv_30_Tja1043_GetBusWakeupReason
在唤醒事件发生时仅返回CANTRCV_30_TJA1043_WU_BY_BUS
。 -
这种行为适用于以下硬件:
-
NXP Tja1043/T/TK(见[4]第7.2.4节唤醒标志)
-
TI TCAN1043x-Q1(见[5]第9.3.3节唤醒请求标志)
-
NXP Tja1902A(见[6]第7.2.2.4节唤醒标志)
-
-
Infineon Tle9252VSK/VLC通过RxD和NERR引脚的行为来信号唤醒事件(见[7]第5.9节唤醒:RxD和NERR的行为)。对于这种硬件,CAN收发器驱动也无法区分唤醒事件。上述描述的相同特性适用。
这段文本说明了在配置工具中启用了通过总线事件检测唤醒功能后,如何通过回调函数来检查唤醒事件,并指出了不同硬件的唤醒事件检测机制和文档参考。同时,它也强调了驱动程序在处理唤醒事件时的限制,即无法区分不同类型的唤醒原因。
3.6.1 获取总线唤醒原因
服务函数 CanTrcv_30_Tja1043_GetBusWakeupReason
返回导致唤醒的原因。请注意,在3.6节 "通过总线事件检测唤醒" 中提到的注意事项。
3.6.2 设置唤醒模式
服务函数 CanTrcv_30_Tja1043_SetWakeupMode
设置CAN接口所需的唤醒模式。
这两个函数是CAN收发器驱动程序中用于管理唤醒功能的接口。第一个函数允许用户查询导致CAN收发器从低功耗状态唤醒的原因。第二个函数则允许用户设置CAN接口的唤醒模式,这通常与硬件的配置和系统的要求有关。具体的唤醒模式可能包括但不限于通过总线事件唤醒、通过物理引脚唤醒等。
在实际应用中,这些函数的使用需要根据具体的硬件和系统设计来决定,以确保CAN收发器能够在需要时正确地唤醒,同时在不需要时保持低功耗状态
3.6.3 开发错误报告
如果预编译参数 CANTRCV_30_TJA1043_DEV_ERROR_DETECT
设置为 STD_ON
,则开发错误会使用服务 Det_ReportError
报告给DET(诊断事件触发器)。需要在配置工具中指定报告的 CANTRCV
实例ID。有关详细信息,请参见第7.1节 "使用DaVinci Configurator 5进行配置"。
报告的服务ID识别了在6.1节中描述的服务。下表展示了服务ID及其相关服务:
服务ID | 服务 |
0x00 | CanTrcv_30_Tja1043_Init |
0x01 | CanTrcv_30_Tja1043_SetOpMode |
0x02 | CanTrcv_30_Tja1043_GetOpMode |
0x03 | CanTrcv_30_Tja1043_GetBusWuReason |
0x05 | CanTrcv_30_Tja1043_SetWakeupMode |
0x07 | CanTrcv_30_Tja1043_CheckWakeup |
0x04 | CanTrcv_30_Tja1043_GetVersionInfo |
0x06 | CanTrcv_30_Tja1043_MainFunction |
表3-4 服务ID到服务的映射
报告给DET的错误在下表中描述:
错误代码 | 描述 |
0x01 | CANTRCV_30_TJA1043_E_INVALID_TRANSCEIVER 无效的通道索引用于函数参数列表。 |
0x02 | CANTRCV_30_TJA1043_E_PARAM_POINTER 无效的指针NULL_PTR用于函数参数列表。 |
0x11 | CANTRCV_30_TJA1043_E_UNINIT CAN收发器硬件未初始化。 |
0x21 | CANTRCV_30_TJA1043_E_TRCV_NOT_STANDBY CAN收发器硬件不在待机模式。 |
0x22 | CANTRCV_30_TJA1043_E_TRCV_NOT_NORMAL CAN收发器硬件不在正常操作模式。 |
0x23 | CANTRCV_30_TJA1043_E_PARAM_TRCV_WAKEUP_MODE 请求的唤醒模式无效。 |
0x24 | CANTRCV_30_TJA1043_E_PARAM_TRCV_OPMODE 请求的操作模式不受底层收发器硬件支持。 |
0x40 | CANTRCV_30_TJA1043_E_NO_TRCV_CONTROL 如果CAN收发器不受控制,即收发器保持在无效状态,则会触发此生产错误。 |
表3-5 报告给DET的错误
这段文本描述了在AUTOSAR环境中,如何通过特定的服务ID和错误代码将CAN收发器开发过程中的错误报告给诊断系统。这些错误代码提供了一种标准化的方式来识别和响应CAN收发器操作中可能遇到的问题。
4 集成
本章提供了将MICROSAR CANTRCV集成到ECU(电子控制单元)应用环境中所需的必要信息。此组件仅适用于NXP Tja1043 CAN收发器硬件。
4.1 交付范围
CANTRCV的交付包