一文详解TC399 CAN MCAL 配置

文摘   2025-01-12 09:52   上海  

 

TC399 是英飞凌公司 AURIX 系列中的一款高性能微控制器,广泛应用于汽车电子系统中。它的 CAN MCAL(Microcontroller Abstraction Layer)配置是 AUTOSAR 基于 TC399 的 CAN 驱动实现中的重要部分。TC399 的 CAN MCAL 配置参数涉及 CAN 控制器、硬件对象、波特率设置、消息处理、唤醒功能等多个方面。

1 MCAL  CAN 模块功能

MCAL 中的 CAN 模块作为低层驱动程序,位于硬件与汽车软件堆栈中的高层软件之间。它提供标准化的 API,用于发送和接收 CAN 消息,使得上层软件(如 AUTOSAR 基础软件和应用软件)能够与网络中的其他 ECU 通信,其功能包括:
  1. 发送和接收消息:
    1. MCAL 中的 CAN 模块提供了在网络上发送和接收 CAN 消息的功能。
    2. 它将数据封装到 CAN 帧中,并通过 CAN 总线进行传输。
    3. 还能够接收来自其他 ECU 的 CAN 帧,并对其进行处理。
  2. 帧过滤和缓冲:
    1. CAN 模块通常支持基于消息标识符(ID)的过滤机制,选择性接收消息。
    2. MCAL 的 CAN 模块配置过滤器并管理消息缓冲,以确保 ECU 仅处理相关的消息。
  3. 错误处理和管理:
    1. CAN 通信可能会遇到各种错误条件,如位错误和帧错误。
    2. MCAL 中的 CAN 模块监控总线上的错误状况,并按照 CAN 协议规范执行错误处理机制。
    3. 它管理错误计数器并执行总线关闭恢复程序,以便在总线关闭状态时恢复通信。
  4. 总线仲裁与碰撞避免:
    1. CAN 使用无损的按位仲裁机制来确定消息的优先级,并解决总线冲突。
    2. MCAL 中的 CAN 模块负责处理总线仲裁和碰撞避免,确保消息以确定性和无碰撞的方式传输。
  5. 时钟同步:
    1. CAN 通信依赖于 ECU 之间精确的时钟同步,以保持数据传输的完整性。
    2. MCAL 的 CAN 模块可能包含时钟同步和漂移补偿功能,以确保网络中可靠的通信。
  6. 中断处理:
    1. CAN 模块可以生成中断,通知微控制器有关传入消息、错误条件和总线状态的变化。
    2. MCAL 的 CAN 模块配置和管理中断源,使微控制器能够及时处理 CAN 相关事件。

    2 MCAL 配置参数

    2.1 CanGeneral
    1)CanDevErrorDetect (CAN开发错误检测)
    此参数控制 CAN 驱动程序的错误检测机制。应根据错误处理策略设置。选项如下:
    • ON:启用错误检测机制。如果希望在运行时检测 CAN 驱动程序的错误,选择此选项。
    • OFF:禁用错误检测机制。如果希望最小化运行时开销,并依赖外部处理机制,选择此选项。
    启用后,可以全面检测和处理 CAN 驱动程序中的开发错误。实施错误处理例程,以记录、通知或适当处理检测到的错误。

    2)CanInitDeInitApiMode (CAN初始化/去初始化API模式)

    此配置参数定义 CAN 初始化和去初始化 API 的使用模式。根据系统安全要求和访问权限,在用户模式和主管模式之间选择 CAN 驱动程序的初始化和去初始化 API 模式。

    3)CanMultiCoreErrorDetect (CAN多核错误检测)

    此参数控制多核环境中的错误检测。
    • ON:启用多核错误检测。
    • OFF:禁用多核错误检测。
    启用此功能可以确保在多核系统中进行同步和错误检测。配置错误检测阈值和机制,以维持系统完整性。

    4)CanIndex (CAN索引)
    此参数指定 CAN 硬件通道的索引,值范围为 0 到 255,为 CAN 控制器实例分配唯一索引,确保每个控制器具有不同的索引,以便在系统内进行识别和通信设置。
    5)CanMainFunctionModePeriod (CAN主功能模式周期)
    此参数决定 CAN 驱动程序主功能的调用时间间隔,单位为毫秒,范围为 【0.001 ~ 65.535】,设置主功能模式的周期,指定主功能执行的频率。根据应用需求和系统响应性需求调整周期。
     6)CanMultiplexedTransmission (CAN复用传输)
    此参数控制是否支持复用传输,应该根据微控制器是否支持来设置。
    • ON:支持复用传输。
    • OFF:不支持复用传输。
    启用复用传输,以有效利用 CAN 带宽。配置传输优先级和调度算法,以优化数据传输。
    7)CanTimeoutDuration (CAN超时持续时间)
    此参数设置 CAN 驱动程序功能的内部超时监控时间,单位为微秒,范围为 0.000001 到 65.535。
    8)CanVersionInfoApi (CAN版本信息API)
    此参数启用或禁用 CAN 驱动程序模块的版本信息读取 API。
    • ON:启用版本信息 API。
    • OFF:禁用版本信息 API。
    启用版本信息 API 以检索 CAN 驱动程序版本的信息,可用于诊断、兼容性检查和版本特定功能的使用。
    9)CanSupportTTCANRef (CAN支持TTCAN)
    此参数指示是否支持时间触发 CAN (TTCAN)。如果需要,启用时间触发 CAN (TTCAN) 支持,配置 TTCAN 特定的设置和参数,以启用 CAN 网络中的时间触发通信功能。
    10)CanRunTimeErrorDetect (CAN运行时错误检测)
    此参数控制运行时错误检测机制。
    • ON:启用运行时错误检测。
    • OFF:禁用运行时错误检测。
    启用运行时错误检测,以监控和处理运行时发生的错误。实现错误检测机制,如错误代码、中断或错误计数器,以确保强大的错误处理能力。
    11)CanIcom (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 控制器。
      • ON:激活 CAN 控制器。
      • OFF:停用 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() 服务。
      • ON:启用唤醒功能 API。
      • OFF:禁用唤醒功能 API。

    启用 CAN 驱动程序中的唤醒功能 API。根据电源管理和系统唤醒需求实现唤醒功能。
        CanWakeupProcessing (CAN唤醒处理):  
    此参数控制唤醒事件的处理,启用/禁用 API Can_MainFunction_Wakeup() 来在轮询模式下处理唤醒事件。
    配置 CAN 控制器的唤醒处理设置。指定唤醒检测机制和检测到唤醒事件时采取的措施,如激活控制器或初始化通信。
        CanWakeupSupport (CAN唤醒支持):  
    此参数指示是否支持唤醒功能。
      • ON:支持唤醒功能。
      • OFF:不支持唤醒功能。

    启用 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硬件对象)
        CanHandleType (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 的阈值。配置阈值以优化内存使用,并在高负载情况下尽量减少消息丢失。
        CanIdType (CAN标识符类型):  
    此参数指定 CAN 消息中使用的标识符类型。
    选项可能包括标准标识符 (11 位) 或扩展标识符 (29 位),具体取决于应用中使用的 CAN 协议和消息格式。
      • Standard (标准): 使用 11 位标识符,适用于基本寻址需求的应用。
      • Mixed (混合): 支持 11 位 (标准) 和 29 位 (扩展) 标识符的组合,为寻址提供灵活性。
      • Extended (扩展): 使用 29 位标识符,适用于需要更多唯一标识符或更高优先级消息的应用。

    定义 CAN 消息中使用的标识符类型,例如标准或扩展标识符。根据应用的寻址需求和消息格式选择合适的类型。
        CanObjectId (CAN对象ID):  
    此参数表示 CAN 控制器中特定硬件对象的对象标识符。它持有 HRH 或 HTH 的句柄 ID。此参数的值在给定的 CAN 驱动程序中是唯一的,应从 0 开始且不允许有间隔。
    对象标识符可以根据硬件配置和应用需求动态分配或配置。
    指定 CAN 消息处理的对象类型,如传输、接收或两者。根据系统中的通信需求和消息流配置对象类型。
        CanObjectType (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) 的周期配置。
    为周期性调用读或写主功能指定周期配置的引用。确保引用准确并与系统时间要求同步。
        CanHwFilter (CAN硬件过滤器):  
    此容器保存用于一个硬件接收句柄 (HRHs) 的硬件过滤器的配置参数。硬件过滤器用于根据预定义标准选择性接收 CAN 消息。
    配置硬件过滤器,根据预定义标准选择性接收 CAN 消息。设置过滤参数,如消息标识符和掩码,以有效过滤传入消息。
        CanTTHardwareObjectTrigger (CAN时间触发硬件对象触发器):  
    此参数指定与硬件对象相关的 TTCAN 触发器的配置参数。这些触发器是标准 CAN 硬件对象配置的补充,特定于时间触发 CAN (TTCAN) 通信。
    定义与硬件对象相关的 TTCAN 触发器的配置参数。根据 TTCAN 消息时间或状态变化调整触发设置,以启动特定操作或事件。

     

    谦益行
    分享汽车研发日常,助力你我共同成长。
     最新文章