TC399 是英飞凌公司 AURIX 系列中的一款高性能微控制器,广泛应用于汽车电子系统中。它的 CAN MCAL(Microcontroller Abstraction Layer)配置是 AUTOSAR 基于 TC399 的 CAN 驱动实现中的重要部分。TC399 的 CAN MCAL 配置参数涉及 CAN 控制器、硬件对象、波特率设置、消息处理、唤醒功能等多个方面。
1 MCAL CAN 模块功能
MCAL 中的 CAN 模块作为低层驱动程序,位于硬件与汽车软件堆栈中的高层软件之间。它提供标准化的 API,用于发送和接收 CAN 消息,使得上层软件(如 AUTOSAR 基础软件和应用软件)能够与网络中的其他 ECU 通信,其功能包括:- MCAL 中的 CAN 模块提供了在网络上发送和接收 CAN 消息的功能。
- 它将数据封装到 CAN 帧中,并通过 CAN 总线进行传输。
- 还能够接收来自其他 ECU 的 CAN 帧,并对其进行处理。
- CAN 模块通常支持基于消息标识符(ID)的过滤机制,选择性接收消息。
- MCAL 的 CAN 模块配置过滤器并管理消息缓冲,以确保 ECU 仅处理相关的消息。
- CAN 通信可能会遇到各种错误条件,如位错误和帧错误。
- MCAL 中的 CAN 模块监控总线上的错误状况,并按照 CAN 协议规范执行错误处理机制。
- 它管理错误计数器并执行总线关闭恢复程序,以便在总线关闭状态时恢复通信。
- CAN 使用无损的按位仲裁机制来确定消息的优先级,并解决总线冲突。
- MCAL 中的 CAN 模块负责处理总线仲裁和碰撞避免,确保消息以确定性和无碰撞的方式传输。
- CAN 通信依赖于 ECU 之间精确的时钟同步,以保持数据传输的完整性。
- MCAL 的 CAN 模块可能包含时钟同步和漂移补偿功能,以确保网络中可靠的通信。
- CAN 模块可以生成中断,通知微控制器有关传入消息、错误条件和总线状态的变化。
- MCAL 的 CAN 模块配置和管理中断源,使微控制器能够及时处理 CAN 相关事件。
2 MCAL 配置参数
1)CanDevErrorDetect (CAN开发错误检测)此参数控制 CAN 驱动程序的错误检测机制。应根据错误处理策略设置。选项如下:- ON:启用错误检测机制。如果希望在运行时检测 CAN 驱动程序的错误,选择此选项。
- OFF:禁用错误检测机制。如果希望最小化运行时开销,并依赖外部处理机制,选择此选项。
启用后,可以全面检测和处理 CAN 驱动程序中的开发错误。实施错误处理例程,以记录、通知或适当处理检测到的错误。2)CanInitDeInitApiMode (CAN初始化/去初始化API模式)
此配置参数定义 CAN 初始化和去初始化 API 的使用模式。根据系统安全要求和访问权限,在用户模式和主管模式之间选择 CAN 驱动程序的初始化和去初始化 API 模式。
3)CanMultiCoreErrorDetect (CAN多核错误检测)
启用此功能可以确保在多核系统中进行同步和错误检测。配置错误检测阈值和机制,以维持系统完整性。此参数指定 CAN 硬件通道的索引,值范围为 0 到 255,为 CAN 控制器实例分配唯一索引,确保每个控制器具有不同的索引,以便在系统内进行识别和通信设置。5)CanMainFunctionModePeriod (CAN主功能模式周期)此参数决定 CAN 驱动程序主功能的调用时间间隔,单位为毫秒,范围为 【0.001 ~ 65.535】,设置主功能模式的周期,指定主功能执行的频率。根据应用需求和系统响应性需求调整周期。 6)CanMultiplexedTransmission (CAN复用传输)此参数控制是否支持复用传输,应该根据微控制器是否支持来设置。启用复用传输,以有效利用 CAN 带宽。配置传输优先级和调度算法,以优化数据传输。7)CanTimeoutDuration (CAN超时持续时间)此参数设置 CAN 驱动程序功能的内部超时监控时间,单位为微秒,范围为 0.000001 到 65.535。8)CanVersionInfoApi (CAN版本信息API)此参数启用或禁用 CAN 驱动程序模块的版本信息读取 API。启用版本信息 API 以检索 CAN 驱动程序版本的信息,可用于诊断、兼容性检查和版本特定功能的使用。9)CanSupportTTCANRef (CAN支持TTCAN)此参数指示是否支持时间触发 CAN (TTCAN)。如果需要,启用时间触发 CAN (TTCAN) 支持,配置 TTCAN 特定的设置和参数,以启用 CAN 网络中的时间触发通信功能。10)CanRunTimeErrorDetect (CAN运行时错误检测)启用运行时错误检测,以监控和处理运行时发生的错误。实现错误检测机制,如错误代码、中断或错误计数器,以确保强大的错误处理能力。此参数组包含用于配置虚拟网络通信的设置,这是一种用于测试或开发目的的功能。根据应用需求配置 ICOM (集成通信控制器) 设置。根据需要启用网络管理和消息路由等功能。12)CanLPduReceiveCalloutFunction (CAN低优先级数据单元接收回调函数)指定在成功接收低优先级协议数据单元 (LPDU) 消息后是否调用特定函数(称为回调函数),此函数可用于对接收到的消息进行自定义处理或处理。定义回调函数,以有效处理接收到的低优先级协议数据单元 (LPDU),在回调函数中实现自定义逻辑或处理,以响应传入消息。13)CanMainFunctionBusoffPeriod (CAN总线关闭主功能周期)指示 Can_MainFunction_Busoff 函数以秒为单位的循环调用间隔。此函数通常处理总线关闭事件,确保 CAN 控制器从错误状态中有效恢复。指定循环调用处理总线关闭事件的主功能周期。根据总线关闭恢复要求和系统响应性需求调整周期。14)CanMainFunctionWakeupPeriod (CAN唤醒主功能周期)定义 Can_MainFunction_Wakeup 函数的调用频率(以秒为单位)。此函数管理唤醒事件,确保 CAN 控制器在检测到总线上的唤醒信号时能及时响应。设置循环调用处理唤醒事件的主功能周期。根据唤醒信号检测要求和系统响应性需求配置周期。15)CanSetBaudrateApi (CAN设置波特率API)指定 CAN 驱动程序是否支持可选的 Can_SetBaudrate API 函数。此函数允许在运行时动态调整 CAN 通信速度,以适应变化的网络条件。如果支持,使用设置波特率 API 在运行时动态调整 CAN 通信速度。实施错误处理和验证机制,以确保波特率的安全更改。16)CanEcucPartitionRef (CAN ECUC分区引用)将 CAN 驱动程序映射到一个或多个 ECUC 分区,使驱动程序的 API 功能能够在每个分区中独立访问。此功能有助于模块化软件设计和集成,使 CAN 驱动程序作为每个分区中的独立实例运行。将 CAN 驱动程序映射到一个或多个 ECUC 分区,以便在每个分区中使驱动程序的 API 可用。根据软件架构和分区需求配置分区映射。17)CanOsCounterRef (CAN操作系统计数器引用)包含对 OsCounter 的引用,OsCounter 是 CAN 驱动程序用于计时和调度的操作系统计数器。此参数确保与系统时钟或其他计时机制同步,从而增强 CAN 通信的可靠性。分配 CAN 驱动程序用于计时和调度的 OsCounter 引用。配置计数器同步和分辨率设置,以确保 CAN 模块内的准确计时。18)CanIcomGeneral (CAN集成通信控制器通用配置)此参数组包含集成通信控制器 (ICOM) 功能的通用配置设置。它包括配置 CAN 模块中 ICOM 功能的基本参数。根据应用需求配置集成通信控制器 (ICOM) 的通用参数。调整通信模式和错误处理等设置,以匹配系统要求。19)CanMainFunctionRWPeriods (CAN主功能读写周期)此参数组定义循环调用 Can_MainFunction_Read 或 Can_MainFunction_Write 的周期,具体取决于引用的项目。这些函数管理 CAN 模块内的读写操作,确保 CAN 控制器与应用软件之间高效的数据交换。设置循环调用主功能以读取和写入 CAN 消息的周期。根据消息频率和系统响应性需求调整这些周期。2.2 CanController (CAN控制器) CanBusoffProcessing (CAN总线关闭处理): 此参数决定 CAN 驱动程序是否应处理总线关闭事件。- POLLING (轮询):通过轮询处理总线关闭,驱动程序会定期检查总线关闭状态并在必要时尝试恢复。
- INTERRUPT (中断):通过中断处理总线关闭事件,驱动程序会在总线关闭事件发生时立即响应。
启用以在 CAN 驱动程序中处理总线关闭事件。配置总线关闭恢复机制和错误处理策略,确保通信中断最小化。 CanControllerActivation (CAN控制器激活): 指定 CAN 控制器的激活设置。配置激活触发器和条件,以确保控制器仅在必要时工作,从而节省系统资源。 CanRxInputSelection (CAN接收输入选择): 此参数指定 CAN 接收功能的输入选择。选项取决于硬件配置和引脚分配。通常,应选择适合 CAN 接收的输入引脚。根据系统配置和兼容性选择 CAN 消息接收的输入源,可以是基于硬件或软件的输入。 CanControllerBaseAddress (CAN控制器基地址): 此参数定义 CAN 控制器在内存中的基地址,数值范围为 0 到 4294967295,具体取决于微控制器的内存映射。定义 CAN 控制器寄存器的基地址。确保与硬件规范和微控制器的地址映射要求兼容。 CanControllerId (CAN控制器ID): 此参数提供 CAN 控制器的唯一 ID,在给定 CAN 驱动程序中是唯一的,数值从 0 开始且不允许有间隔。为 CAN 控制器分配唯一标识符。在多控制器系统中使用此标识符进行设备识别和通信设置。 CanRxProcessing (CAN接收处理): 此参数决定接收消息处理模式,启用/禁用 API Can_MainFunction_Read() 来在轮询模式下处理 PDU 接收事件。配置与 CAN 控制器内的消息接收相关的设置。调整缓冲区大小、过滤标准和中断处理,以优化接收性能。 CanTxProcessing (CAN传输处理): 此参数决定传输消息处理模式,启用/禁用 API Can_MainFunction_Write() 来在轮询模式下处理 PDU 传输事件。配置与 CAN 控制器内的消息传输相关的设置。调整优先级、传输调度和错误处理,以优化传输性能。 CanWakeupFunctionalityAPI (CAN唤醒功能API): 此参数指定唤醒功能 API 的可用性,在代码中添加/移除 Can_CheckWakeup() 服务。启用 CAN 驱动程序中的唤醒功能 API。根据电源管理和系统唤醒需求实现唤醒功能。 CanWakeupProcessing (CAN唤醒处理): 此参数控制唤醒事件的处理,启用/禁用 API Can_MainFunction_Wakeup() 来在轮询模式下处理唤醒事件。配置 CAN 控制器的唤醒处理设置。指定唤醒检测机制和检测到唤醒事件时采取的措施,如激活控制器或初始化通信。 CanWakeupSupport (CAN唤醒支持): 启用 CAN 控制器硬件中的唤醒功能支持。配置唤醒源和唤醒信号检测机制,以满足系统要求。 CanControllerDefaultBaudrate (CAN控制器默认波特率): 此参数定义 CAN 控制器的默认波特率。根据应用需求和网络配置指定默认波特率。为 CAN 控制器设置默认波特率。根据通信网络设置为标准值,或根据特定要求进行调整。 CanCpuClockRef (CAN CPU时钟引用): 此参数引用 CPU 的参考时钟,通常是 CPU 用于计时和同步的时钟信号。为 CAN 控制器指定 CPU 时钟的引用。确保 CAN 模块与 CPU 之间的同步和计时对齐。 CanPeripheralBusClockRef (CAN外设总线时钟引用): 此参数引用 CAN 外设总线的参考时钟。此时钟信号用于 CAN 控制器与 CAN 总线上的其他节点同步。定义 CAN 控制器使用的外设总线时钟的引用。确保正确的时钟配置和同步,以实现可靠的 CAN 通信。 CanControllerEcucPartitionRef (CAN控制器ECUC分区引用): 此参数允许将 CAN 控制器映射到零个或一个 ECUC 分区。ECUC 分区是 CAN 驱动程序映射的资源子集,提供系统内资源组织和隔离的灵活性。根据系统架构和分区需求将 CAN 控制器映射到一个或多个 ECUC 分区。确保 CAN 驱动程序的 API 在每个分区中可用。 CanWakeupSourceRef (CAN唤醒源引用): 包含对 ECU 状态管理器中指定的唤醒源的引用。此引用对有效处理唤醒事件至关重要,确保控制器能够适时响应唤醒信号。根据 ECU 状态管理器定义 CAN 控制器的唤醒源。配置唤醒源检测机制和标准,以确保及时可靠的唤醒功能。 CanControllerBaudrateConfig (CAN控制器波特率配置): 此参数组包括与 CAN 控制器的位定时相关的配置参数。位定时设置对于建立通信速度和 CAN 网络中的同步至关重要,以确保可靠的数据传输。配置 CAN 控制器的位定时参数,以建立通信波特率。设置适当的传播延迟、相位段和同步值,以确保可靠的数据传输。 CanTTController (CAN时间触发控制器): CanTTController 是 SWS TTCAN 的一个子集,涵盖了与时间触发 CAN (TTCAN) 控制器相关的配置参数。除了标准 CAN 控制器配置外,这些参数对于在系统中启用和配置 TTCAN 功能是必要的。在标准 CAN 控制器配置之外,指定时间触发 CAN (TTCAN) 控制器的配置参数。根据实时通信要求调整 TTCAN 特定设置,如时间同步和消息调度。2.3 CanHardwareObject (CAN硬件对象)此参数定义 CAN 句柄的类型,表示用于发送或接收 CAN 消息的逻辑实体。句柄类型可能由开发环境或框架定义,选项可能包括传输句柄、接收句柄或错误句柄。- Full (全功能): 提供全面的功能和自定义选项,适用于需要高级功能和广泛控制的应用。
- Basic (基础功能): 提供基本功能,简化配置,适合具有简单需求或资源有限的应用。
为 CAN 消息对象定义句柄类型。根据应用中消息处理所需的功能级别,选择 "full" 或 "basic" 句柄类型。 CanHwObjectCount (CAN硬件对象数量): 此参数指定用于实现一个 HOH 的硬件对象数量。在 HRH 的情况下,此参数定义硬件 FIFO 中的元素数量或影子缓冲区的数量;在 HTH 的情况下,它定义用于复用传输的硬件对象数量或 FullCAN HTH 使用的硬件 FIFO。指定用于消息接收和传输的硬件对象 (HOBJs) 数量。根据需要同时处理的消息数量和硬件限制调整此数量。 CanHwFIFOThreshold (CAN硬件FIFO阈值): 此参数设置 CAN 控制器中硬件 FIFO 缓冲区的阈值级别。该值的范围为【 1 ~64】,表示 FIFO 中必须存在的消息数量,才能触发中断或事件。设置用于消息缓冲的硬件 FIFO 的阈值。配置阈值以优化内存使用,并在高负载情况下尽量减少消息丢失。选项可能包括标准标识符 (11 位) 或扩展标识符 (29 位),具体取决于应用中使用的 CAN 协议和消息格式。- Standard (标准): 使用 11 位标识符,适用于基本寻址需求的应用。
- Mixed (混合): 支持 11 位 (标准) 和 29 位 (扩展) 标识符的组合,为寻址提供灵活性。
- Extended (扩展): 使用 29 位标识符,适用于需要更多唯一标识符或更高优先级消息的应用。
定义 CAN 消息中使用的标识符类型,例如标准或扩展标识符。根据应用的寻址需求和消息格式选择合适的类型。此参数表示 CAN 控制器中特定硬件对象的对象标识符。它持有 HRH 或 HTH 的句柄 ID。此参数的值在给定的 CAN 驱动程序中是唯一的,应从 0 开始且不允许有间隔。对象标识符可以根据硬件配置和应用需求动态分配或配置。指定 CAN 消息处理的对象类型,如传输、接收或两者。根据系统中的通信需求和消息流配置对象类型。此参数定义 CAN 控制器中的对象类型,如传输对象、接收对象或 FIFO 对象。它指定硬件对象是用于传输还是接收。指定 CAN 消息处理的对象类型,如传输、接收或两者。根据系统中的通信需求和消息流配置对象类型。 CanControllerRef (CAN控制器引用): 此参数引用硬件对象所属的 CAN 控制器。它将硬件对象与微控制器中的特定 CAN 控制器相关联,启用硬件对象与控制器之间的通信。为 CAN 控制器分配引用,用于识别和通信设置。确保引用在系统中是唯一且一致的。 CanFdPaddingValue (CAN FD 填充值): 指定用于填充大于 8 字节的 CAN FD 帧中未指定数据的值。这种填充是由于数据长度代码 (DLC) 的离散值在帧大小超过 8 字节时的必要操作。设置用于大于 8 字节的 CAN FD 帧的填充值。选择合适的值,以确保传输期间帧格式正确并保持数据完整性。 CanHardwareObjectUsesPolling (CAN硬件对象使用轮询): 启用此硬件对象的轮询,指示 CAN 硬件对象是否利用轮询机制来处理传输或接收任务。如果需要接收和传输消息,可以启用硬件对象的轮询。配置轮询设置以优化 CPU 使用率和系统响应能力。 CanTriggerTransmitEnable (CAN触发传输启用): 定义 CAN 控制器是否支持指定句柄的触发传输 API。触发传输 API 允许基于预定义的触发条件异步传输 CAN 消息。启用 CAN 消息传输的触发传输 API 支持。根据预定义的事件或触发条件实现触发机制,以启动消息传输。 CanMainFunctionRWPeriodRef (CAN主功能读写周期引用): 此参数引用用于周期性调用读或写主功能 (Can_MainFunction_Read 或 Can_MainFunction_Write) 的周期配置。为周期性调用读或写主功能指定周期配置的引用。确保引用准确并与系统时间要求同步。此容器保存用于一个硬件接收句柄 (HRHs) 的硬件过滤器的配置参数。硬件过滤器用于根据预定义标准选择性接收 CAN 消息。配置硬件过滤器,根据预定义标准选择性接收 CAN 消息。设置过滤参数,如消息标识符和掩码,以有效过滤传入消息。 CanTTHardwareObjectTrigger (CAN时间触发硬件对象触发器): 此参数指定与硬件对象相关的 TTCAN 触发器的配置参数。这些触发器是标准 CAN 硬件对象配置的补充,特定于时间触发 CAN (TTCAN) 通信。定义与硬件对象相关的 TTCAN 触发器的配置参数。根据 TTCAN 消息时间或状态变化调整触发设置,以启动特定操作或事件。