CAN通信:EB中配置CAN驱动,配置参数解析
以S32K314芯片说明,其他芯片不同,参数配置也有差异
1. General
- Development Error Detection:是否使能开发错误检测,与AUTOSAR的DET相关。
- Can Enable User Mode Support :是支持模式切换,从用户态切换到内核态。确保只有系统权限能操作CAN驱动。
- Can Multicore Support :是否支持多核,与芯片相关。
- Can Enable Security Event Reporting:未知
- Provide Version Info API :是否提供版本信息
- Can Driver Index (0 -> 255) :CAN控制器ID,唯一
- Can Main Function Busoff Period (seconds) (0 -> 65.535):处理总线busoff周期,防止总线因为busoff时间过长导致卡死,但是正常情况下一般不启用,因为busoff需要用户主动处理。
- Can Main Function Wakeup Period (seconds) (0 -> 65.535) :唤醒周期,一般唤醒CAN会用到;
- Can Main Function Mode Period (seconds) (0 -> 65.535):调用CAN main function的周期,can有三种模式,周期,中断,DMA,如果使用周期轮询的方式读取CAN数据,则必须使用对应的函数,非强制;
- Can Multiplexed Transmission :如果Can Hw Object Count大于1,则必须使能;
- Can Timeout Method:CAN超时时使用的计数器来源
- Can Timeout Duration (0.000001 -> 65.535) :超时时间
- CanLPduReceiveCalloutFunction :于在接收到 CAN 消息时进行自定义处理。它允许开发者根据特定需求决定是否将接收到的 LPDU 数据上传至 COM 层。
- Can Os Counter Ref :包含对 OsCounter 的引用,OsCounter 是 CAN 驱动程序用于计时和调度的操作系统计数器。此参数确保与系统时钟或其他计时机制同步,从而增强 CAN 通信的可靠性
- CanSupportTTCANRef :此参数指示是否支持时间触发 CAN (TTCAN)。如果需要,启用时间触发 CAN (TTCAN) 支持。配置 TTCAN 特定的设置和参数,以启用 CAN 网络中的时间触发通信功能。
- Can MB Count Extension Support :扩展MB数量,与硬件相关,S32K314中配置无效
- CanApiEnableMbAbort:开启关闭CAN MB的API,此功能未用;猜测和内存相关,根据手册描述,如果MB剩余,可将其是为正常的RAM,应该与此相关
- CanSetBaudrateApi:修改波特率
- CanEnableDualClockMode:CanEnableDualClockMode 是 AUTOSAR CAN 驱动模块中的布尔型参数(boolean),用于控制是否启用 双时钟模式(Dual Clock Mode)。双时钟模式是一种增强型时钟同步机制,允许 CAN 控制器同时使用两个独立的时钟源(如主时钟和备用时钟),或支持主从节点间的时钟动态切换,以提升总线同步的可靠性和灵活性。
- CanListenOnlyModeApi:CanListenOnlyModeApi 是布尔型参数(boolean),用于控制是否启用 监听模式(Listen Only Mode)的 API 接口。监听模式指节点仅接收并解析总线消息,不发送任何数据(包括确认位),常用于诊断、监控或调试场景。启用该参数后,上层应用可通过 API(如 Can_EnterListenOnlyMode()、Can_ExitListenOnlyMode())动态切换节点的监听状态。
- Can Global Time Support:CanGlobalTimeSupport 是布尔型参数(boolean),用于控制是否启用 全局时间支持(Global Time Support, GTS)。全局时间支持是 CAN 总线的一种高级同步机制,通过在消息中嵌入全局时间戳(基于主时钟的全局时间),实现跨节点的时间同步,适用于需要精确时间对齐的场景(如多传感器数据融合)
- CanTimeStamp:CanTimeStamp 是 CAN 消息数据字段中的可选部分(通常为 1~4 字节),用于记录消息的发送时间或接收时间。其核心作用是为消息提供精确的时间标签,支持后续的时间序列分析、故障追溯或数据融合。
2. CanControl
2.1 General
- Can Hardware Channel:硬件收发器编号
- Can Controller Activation:是否使能
- Can Controller Base Address (0-> 4294967295):控制器基址,一般不用动
- Can Controller lD:控制器编号,唯一
- Can Rx Processing Type:Rx消息处理方式,中断,轮询,混合
- Can Tx Processing Type:Tx消息处理方式,中断,轮询,混合
- Can BusOff Processing Type:Tx消息处理方式,中断,轮询,
- CanWakeupFunctionalityAPl:CanWakeupFunctionalityAPI 是布尔型参数(boolean),用于控制是否启用 CAN 唤醒功能的 API 接口。唤醒功能指节点通过 CAN 总线接收特定消息(如唤醒帧)后从低功耗模式(如睡眠)切换至活跃模式的能力。启用该参数后,上层应用可通过 API(如 Can_TriggerWakeup()、Can_SetWakeupMask())动态配置唤醒条件(如特定 ID 的消息)。
- Can Wakeup Processing Type:CanWakeupProcessingType 是枚举型参数,用于定义 唤醒事件的触发和处理方式,影响唤醒的实时性和 CPU 占用。常见选项包括:中断触发,轮询检测,混合模式
- Can Wakeup support:CanWakeupSupport 是布尔型参数(boolean),用于控制是否启用 CAN 唤醒功能。禁用时,节点无法通过 CAN 总线接收的唤醒帧从低功耗模式恢复;启用时,节点可响应特定唤醒帧并切换至活跃模式。
- Can Auto BusOff Recovery:Can Auto BusOff Recovery 是布尔型参数(boolean),用于控制是否启用 总线关闭(Busoff)的自动恢复功能。当节点因严重错误(如连续位错误)进入 Busoff 状态时,启用该参数后系统会自动尝试恢复通信,无需人工干预。
- Can Protocol Exception:不符合 CAN 协议的错误帧的处理方式(如过长的数据帧、错误的 CRC 校验
- Can FD ISO:,用于控制是否启用 符合 ISO 11898-7 标准的 CAN FD(灵活数据速率)功能。CAN FD 支持更高的数据速率(最高 12 Mbps)和更灵活的数据长度(最大 64 字节),适用于需要高速、大数据量传输的场景。
- Can Loop Back Mode:Can Loop Back Mode 是布尔型参数(boolean),用于控制是否启用 CAN 回环模式。回环模式下,节点将发送的消息直接回环到自身的接收端(不实际发送到总线),用于测试和调试
- Can Three Samples: Can Three Samples 是布尔型参数(boolean),用于控制是否启用 三采样模式。接收端对每个位信号采样三次(通常在位时间的 75%、50%、25% 处采样),取多数表决结果作为最终位值,提高抗干扰能力。
- Can Edge Filter:Can Edge Filter 是布尔型参数(boolean),用于控制是否启用 边沿滤波器。边沿滤波器通过硬件或软件滤除总线信号中的噪声边沿(如快速跳变),确保接收端正确识别有效位边沿(上升沿或下降沿)
- Can Controller Default Baudrate:Can Controller Default Baudrate 是数值型参数(单位:bps),用于设置 CAN 控制器的默认波特率(未显式配置时使用的初始值)。波特率决定了总线传输速率(如 500 kbps 表示每秒传输 500,000 位
- Can Controller Ecuc Partition Ref:Can Controller Ecuc Partition Ref 是引用型参数,用于关联 CAN 控制器与其他 ECUC(嵌入式统一配置)模块的配置。ECUC 是 AUTOSAR 的嵌入式系统配置标准,通过分区(Partition)管理不同功能模块的资源(如内存、时钟)
- CanCpuClockRef*:CanCpuClockRef* 是引用型参数(可能为数组,支持多个时钟源),用于指定 CAN 控制器使用的 CPU 时钟源(如主时钟、备用时钟或外部晶振)。时钟源决定了控制器的运行频率(如 80 MHz、40 MHz)
- CanCpuClockRefAlternate:CanCpuClockRefAlternate 是引用型参数,用于指定 CAN 控制器的备用 CPU 时钟源(仅在主时钟失效时使用)。备用时钟源通常为内部 RC 振荡器或低功耗晶振,确保控制器在主时钟故障时仍能基本运行
- CanWakeupSourceRef :CanWakeupSourceRef 是引用型参数,用于指定 CAN 唤醒事件的触发源(即节点从低功耗模式恢复的触发条件)。唤醒源可以是总线上的特定消息(如唤醒帧)、外部硬件信号(如 GPIO 引脚)或内部事件(如定时器超时)
- Message Buffer Time Stamp Base :Message Buffer Time Stamp Base 是数值型参数(单位:时间单位,如微秒),用于定义 消息缓冲区中时间戳的基准值(即时间戳的起始参考点)。时间戳通常记录消息的发送或接收时间,基值用于计算相对时间(如“消息接收时间 = 当前时间 - 基值”)。
- TimeStamp Time Tick Source:TimeStamp Time Tick Source 是枚举型参数,用于指定 时间戳生成所依赖的时钟源(即时间滴答的计时基准)。时间滴答(Time Tick)是系统时钟的周期性中断(如每微秒一次),用于驱动时间戳的递增。
- High Resolution Time Stamp Capture Point :High Resolution Time Stamp Capture Point 是枚举型参数,用于定义 高分辨率时间戳的捕获阶段(即在消息处理流程的哪个环节记录时间戳)。高分辨率时间戳通常具有更高的精度(如纳秒级),需在关键事件发生时精确捕获
2.2 CanControllerBaudrateConfig
- CanBaudrateTypeSuport:
特性 | NORMAL_CBT(标准型) | ENHANCE_CBT(增强型) |
---|---|---|
波特率范围 | 125 kbps ~ 2 Mbps(标准值) | 1 Mbps ~ 12 Mbps(可自定义) |
CBT 配置灵活性 | 固定同步段(1 位时间单位),分段范围有限 | 可调同步段(1~8 位时间单位),分段范围大 |
适用场景 | 传统车载网络、低速传感器 | 自动驾驶、工业 IoT、高速机器人 |
硬件要求 | 传统 CAN 控制器(如 S32K314) | 支持扩展 CBT 的高端控制器(如 AURIX TC3xx) |
实际应用中,需根据通信速率、总线长度、噪声环境及硬件能力选择合适的 CBT 模式,以确保 CAN 通信的可靠性和性能。
- Can Automatic Time Segments Calculation:CanAutomatic Time Segments Calculation 是布尔型参数(boolean),用于控制是否启用 位时间分段的自动计算。启用后,控制器根据总线长度、传播延迟等参数自动计算同步段、传播段、相位段等时间分段的长度,无需手动配置
- Can Bus Length (meters)(1 -> 5000):Can Bus Length 是数值型参数(单位:米),用于定义 CAN 总线的物理长度(范围:1~5000 米)。总线长度直接影响信号传播时间,是计算传播段、预分频器等参数的关键输入,一般位40m;
- Can Propagation Delay Tranceiver (ns) (0 -> 5000):Can Propagation Delay Tranceiver 是数值型参数(单位:纳秒),用于定义 CAN 收发器的信号传播延迟(范围:0~5000 ns)。传播延迟是信号从发送端到接收端的额外延迟,由收发器硬件特性决定。S32K314固定位150;
- Can Tx ArbitrationStart Delay (0 -> 31):Can Tx ArbitrationStart Delay 是数值型参数(单位:位时间),用于定义发送节点在仲裁阶段开始前的延迟时间(范围:0~31 位时间)。其核心作用是避免多个节点同时发送时的仲裁冲突。高优先级节点延迟低,低优先级可适当调高优先级。
- Can Controller Prescaller (1 -> 1024):Can Controller Prescaller 是数值型参数(范围:1~1024),用于定义 CAN 控制器的预分频比,调整内部时钟频率以匹配目标波特率。预分频器将主时钟(如 CPU 时钟)分频后,作为位时间计数的基准
- Can Controller Prescaller Alternate (1 -> 1024):Can Controller Prescaller Alternate 是数值型参数(范围:1~1024),用于定义主预分频器失效时的备用预分频值。其核心作用是保障控制器在主预分频器故障时仍能维持基本通信
- Can Controller BaudRate Config lD:Can Controller BaudRate Config lD 是标识符(如索引或句柄),用于引用预定义的波特率配置(如存储在 EEPROM 或配置工具中的参数组)。其核心作用是实现波特率配置的复用和管理
- Can Controller BaudRate (kbps)(0 -> 2000):Can Controller BaudRate 是数值型参数(单位:kbps,范围:0~2000 kbps,即 0~2 Mbps),用于定义 CAN 控制器的目标通信波特率。波特率决定了总线传输速率,直接影响通信延迟和带宽
- Can Synchronization Segment (1 -> 1):Can Synchronization Segment 是数值型参数(固定为 1),用于定义位时间中的同步段长度(单位:时间单位)。同步段是位时间的起始部分,用于同步发送端与接收端的位时序
- Can Propagation Segment (0 -> 255):Can Propagation Segment 是数值型参数(范围:0~255,单位:时间单位),用于定义位时间中的传播段长度。传播段用于补偿信号在总线上的传播延迟,确保接收端在正确的时间采样数据位
- Can Phase Segment 1 (0 -> 255):Can Phase Segment 1 是数值型参数(范围:0~255,单位:时间单位),用于定义位时间中的相位段 1 长度。相位段 1 是传播段之后的第一个调整段,用于微调采样点位置,确保接收端与发送端的位时序同步
- Can Phase Segment 2 (0 -> 255):Can Phase Segment 2 是数值型参数(范围:0~255,单位:时间单位),用于定义位时间中的相位段 2 长度。相位段 2 是相位段 1 之后的第二个调整段,用于补偿相位段 1 的不足,并确保位时间结束时的同步
- Can Resynch Jump Width (0 -> 255):Can Resynch Jump Width 是数值型参数(范围:0~255,单位:时间单位),用于定义仲裁阶段中位时间的跳转宽度。当多个节点同时发送时,跳转宽度决定了接收端如何调整位时序以重新同步
CANDF
- Can FD Controller BaudRate (dynamic range):动态范围通常为500kbps~8Mbps(高速段)
- Can FD Synchronization Segment (1 -> 1):固定为1个时间量子(TQ)
- Can FD Propagation Segment:传播段,1~8TQ,根据总线长度调整
- Can FD Phase Segment 1:相位缓冲段1,1~8TQ,用于同步与延迟补偿
- Can FD Phase Segment 2:相位缓冲段2,1~8TQ,通常与Phase Segment 1相等
- Can FD Resynch Jump Width:跳跃幅度,1~4TQ,不超过Phase Segment 1
- Transmitter Delay Compensation Offset:延迟补偿,0~15TQ,补偿收发器延迟
- Can FD Prescaler(1 -> 1024):分频系数,1~1024,设定时间量子基准
- Can Controller Prescaller Alternate FD(1 -> 1024):替代分频系数,冗余设计;1~1024,交替的时间量子预分频
- **CanControllerTxBitRateSwitch:**启用/禁用CAN FD的高速段波特率切换
3. CanHardwareObject
配置CAN硬件邮箱以及CANID,Rx在前,Tx在后;每个芯片的CAN硬件内存都是固定的,对于S32K314的can0来说,如果配置邮箱位8字节,则最多有96个邮箱,如果配置位64字节,则只有21个;
- FD padding value (0 -> 255): CAN FD消息中用于填充的字节值,范围0~255,补偿帧长以满足硬件/协议要求
- Can Object Payload Length: CAN消息对象的有效数据长度,CAN 2.0最大8字节,CAN FD最大64/2048字节(依配置),可不使能;
- Can Implementation Type: CAN 邮箱适用类型,FULL或者BASIC,FULL代表此CAN ID独占邮箱,BASIC代表多个CAN ID共享邮箱;
- Can ID Message Type: CAN ID的类型,区分标准帧(11位ID)和扩展帧(29位ID)
- Can Object ID: 用于唯一标识CAN消息对象的编号,通常为数字标识符
- Can Object Type:Rx或者Tx
- Hardware Object Uses Polling: 硬件对象是否采用轮询方式工作,取值为启用(True)或禁用(False)
- Can Controller Reference: 关联的CAN控制器引用,指定该对象所属的控制器(如控制器名称/ID)
- Can MainFunction RW Period Reference: CAN主函数读写周期的参考基准,指定主函数处理读写操作的周期源
- Can HwObject Uses Block: 硬件对象是否使用块模式(批量处理消息),取值为启用或禁用
- Can Hw Object Count (1 -> 65535): 硬件消息对象的总数,即控制器支持的硬件级消息对象数量,CAN邮箱数量,范围1~65535,实际上受芯片邮箱数量限制
CAN ID过滤器配置
- Can Hw Filter Code (0 -> 4294967295):硬件过滤的参考ID值,接收到的CAN消息ID需与该值在掩码指定的有效位上匹配才会被接收,范围0~4294967295
- Can Hw Filter Mask (0 -> 4294967295):硬件过滤的掩码值,用于指定ID中哪些位需要严格匹配(1表示需匹配,0表示忽略),范围0~4294967295
目前仅记录以上配置参数介绍,FIFO,TTCAN等功能待学习