4. CAN驱动基础
在AUTOSAR CAN驱动(CanDrv)中,软件并不直接操作CAN收发器,而是通过CAN控制器(如Bosch M_CAN、FlexCAN、DCAN等)的寄存器与消息RAM完成报文收发。理解控制器硬件接口、邮箱机制以及位定时参数,是正确配置CAN驱动、保证总线通信稳定的前提。本节从硬件接口出发,逐步展开到邮箱结构、位定时组成、采样点计算与波特率配置方法。
一、CAN控制器硬件接口与驱动分层
CAN控制器位于MCU内部,向上通过寄存器接口与CanDrv交互,向下通过TX/RX引脚连接外部CAN收发器,收发器再接入CAN_H/CAN_L双绞线。AUTOSAR CanDrv主要使用三类硬件资源:控制与状态寄存器(模式、中断、错误计数)、位定时寄存器(BRP、TSEG1、TSEG2、SJW)、消息对象存储区(邮箱或消息RAM)。
驱动初始化时通常按以下顺序访问硬件:进入初始化/复位模式,配置位定时与波特率,配置邮箱过滤器与方向,退出初始化模式进入正常模式,最后使能中断。若控制器未进入初始化模式就写位定时寄存器,配置往往不生效,这是工程中常见的低级错误。
二、邮箱机制与报文对象管理
邮箱(Mailbox)是CAN控制器中用于存放报文的对象,每个邮箱通常包含标识符、数据长度、数据字节、方向(发送/接收)、中断使能等字段。控制器通过邮箱过滤器决定接收哪些ID,通过发送仲裁决定哪个邮箱优先发送。不同控制器邮箱数量不同,例如FlexCAN可有数十个邮箱,M_CAN使用消息RAM配合过滤器列表。
邮箱机制的核心是“一个邮箱对应一个报文对象”。发送时,驱动把数据写入发送邮箱并置位发送请求;接收时,控制器把匹配的报文写入接收邮箱并置位接收标志。若邮箱数量不足,需要合理规划:高优先级报文使用独立邮箱,低优先级或诊断报文可共享FIFO。AUTOSAR CanDrv通过HardwareObject(HOH)抽象邮箱,CanIf再映射到PDU。
三、位定时、采样点与同步跳转宽度
CAN位时间由若干时间份额(Tq)组成,典型划分为四段:同步段(Sync_Seg,固定1Tq)、传播段(Prop_Seg)、相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2)。采样点位于Phase_Seg1结束处,即采样点位置 = (1 + Prop_Seg + Phase_Seg1) / 总Tq。采样点通常配置在75%~87.5%之间,高速CAN常用80%左右。
同步跳转宽度(SJW)定义一次重同步中允许调整的最大Tq数,用于吸收振荡器偏差和总线延迟。SJW越大,重同步能力越强,但过大会影响位定时稳定性。工程上SJW常取1~4Tq,且不超过Phase_Seg2。
波特率计算公式为:波特率 = f_CAN时钟 / (BRP × (1 + Prop_Seg + Phase_Seg1 + Phase_Seg2))。其中BRP为波特率预分频。配置时需要先确定CAN时钟,再选择BRP与各段Tq数,使采样点满足要求。
示例:CAN时钟 = 8 MHz,目标波特率 = 500 kbps
总Tq = 8 MHz / (BRP × 500 kbps)
取 BRP = 1,则总Tq = 16
分配:Sync=1, Prop=3, PS1=8, PS2=4
采样点 = (1+3+8)/16 = 75%
若取 Prop=2, PS1=9, PS2=4,采样点 = (1+2+9)/16 = 75%
若取 Prop=2, PS1=10, PS2=3,采样点 = (1+2+10)/16 = 81.25%
四、波特率配置方法与参数对照
配置波特率时,建议按以下流程执行:确认CAN控制器时钟源与频率;根据目标波特率计算总Tq;选择BRP使总Tq在8~25之间;分配各段Tq并计算采样点;检查SJW不超过Phase_Seg2;写入位定时寄存器并复位模式生效;最后用示波器或CAN分析仪验证实际波特率与采样点。
| 参数 | 含义 | 典型取值 | 配置要点 |
|---|---|---|---|
| BRP | 波特率预分频 | 1~64 | 决定Tq长度,影响总Tq数 |
| Prop_Seg | 传播段 | 1~8 Tq | 补偿总线与收发器延迟 |
| Phase_Seg1 | 相位缓冲段1 | 1~8 Tq | 与Prop共同决定采样点 |
| Phase_Seg2 | 相位缓冲段2 | 1~8 Tq | 用于重同步,需≥SJW |
| SJW | 同步跳转宽度 | 1~4 Tq | 吸收时钟偏差,不宜过大 |
| 采样点 | 采样位置 | 75%~87.5% | 高速CAN常用80% |
五、常见误区与复盘
- 误区一:只改波特率不改采样点。不同节点采样点不一致时,长线或高负载下容易出现位错误。
- 误区二:SJW设置过大。SJW超过Phase_Seg2会导致重同步异常,甚至通信失败。
- 误区三:忽略CAN时钟偏差。晶振精度不足时,应适当增大SJW并留出采样点余量。
- 误区四:邮箱数量规划不足。发送邮箱被占满后,新报文只能等待,影响实时性。
综上,CAN驱动基础配置的核心在于:正确访问控制器硬件接口,合理规划邮箱对象,精确计算位定时与采样点,并控制SJW在安全范围内。只有这些参数协同正确,CAN总线才能在目标波特率下稳定运行。