ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CAN通讯配置完全指南:以英飞凌TC3xx与瑞萨RH850为例

CAN通讯配置完全指南:以英飞凌TC3xx与瑞萨RH850为例 CAN位时序与波特率原理CAN总线采用NRZ不归零编码数据流中不含时钟信息所有节点必须通过预配置的位时序实现同步。一个Bit Time由四段组成SYNC_SEG固定1 Tq用于节点间同步、PROP_SEG1~8 Tq补偿信号传播延迟、PHASE_SEG11~8 Tq采样点前相位缓冲、PHASE_SEG21~8 Tq采样点后相位缓冲。SJW重同步跳跃宽度决定了单次重同步最大可调Tq数采样点位于PHASE_SEG1与PHASE_SEG2之间。波特率计算公式为BaudRate f_CAN_CLK / ((BRP1) × (1 TSEG1 TSEG2))其中f_CAN_CLK为CAN模块输入时钟频率BRP为波特率预分频系数TSEG1 PROP_SEG PHASE_SEG1TSEG2 PHASE_SEG2。采样点位置 (1 TSEG1) / (1 TSEG1 TSEG2) × 100%。推荐值≤500 kbps取87.5%500 kbps~1 Mbps取80%1 MbpsCAN FD数据段取75%。以CAN时钟80 MHz、目标500 kbps、采样点80%为例取BRP9每Bit Tq 80M/(500K×10) 16 Tq采样点80%对应1TSEG112.8≈13即TSEG112、TSEG23验证波特率80M/(10×16)500 kbps采样点13/1681.25%≈80%SJW取3。英飞凌TC3xx MCMCAN模块配置模块架构与时钟以TC387为例芯片内含3个MCMCAN模块CAN0/CAN1/CAN2每个模块包含4个独立CAN Node采用Bosch M_CAN IP核设计。支持CAN 2.0B CAN FD最高5 Mbps/8 Mbps每个Node最多64个Rx Buffer、2个Rx FIFO、32个Tx Buffer、1个Tx FIFO/Queue。时钟源通常为fASYN80 MHz或fSPB100 MHz需确保CCU中对应模块时钟已使能。波特率寄存器配置TC3xx使用NBTP标称位时序和DBTP数据位时序CAN FD专用两个寄存器。NBTP包含NBRP[15:0]、NTSEG1[23:16]、NTSEG2[30:25]、NSJW[34:29]写入值均为实际值减1。DBTP包含DBRP[7:0]、DTSEG1[12:8]、DTSEG2[16:13]、DSJW[20:17]、TDC[23]发送延迟补偿使能。配置示例500 kbps标称 2 Mbps CAN FD数据段f_CLK80MHz/* 标称位时序500 kbps, 采样点80% */ uint32 nbtp 0; nbtp | (9 - 1) 0; /* NBRP 8 */ nbtp | (12 - 1) 16; /* NTSEG1 11 */ nbtp | (3 - 1) 25; /* NTSEG2 2 */ nbtp | (3 - 1) 29; /* NSJW 2 */ CAN0_N0-NBTP.U nbtp; /* 数据位时序2 Mbps, 采样点75% */ uint32 dbtp 0; dbtp | (1 - 1) 0; /* DBRP 0 */ dbtp | (14 - 1) 8; /* DTSEG1 13 */ dbtp | (5 - 1) 13; /* DTSEG2 4 */ dbtp | (4 - 1) 17; /* DSJW 3 */ dbtp | (1 23); /* TDC使能 */ CAN0_N0-DBTP.U dbtp;Message RAM配置TC3xx的MCMCAN使用共享Message RAM存放收发报文需规划Standard ID Filter Elements、Extended ID Filter Elements、Rx FIFO/Buffer、Tx Buffer/FIFO/Queue、Tx Event FIFO等区域。以Rx FIFO 0为例CAN0_N0-RXF0C.U (RAM_BASE_ADDR RXF0_OFFSET) | (64 16); /* 起始地址深度64 */ CAN0_N0-RXESC.U (7 0); /* 数据段大小64字节(CAN FD) */ CAN0_N0-TXBC.U (RAM_BASE_ADDR TXB_OFFSET) | (32 16) | (1 30); /* Tx Queue模式 */初始化流程必须在INIT1且CCE1状态下才能修改位时序和Message RAM配置退出时先清CCE再清INITvoid CAN_Node_Init(void) { CAN0_N0-CCCR.U | (1 0); /* INIT 1 */ while ((CAN0_N0-CCCR.U (1 0)) 0); CAN0_N0-CCCR.U | (1 1); /* CCE 1 */ /* 配置波特率、Message RAM、滤波器、中断... */ CAN0_N0-CCCR.U | (1 2); /* FDOE 1 (CAN FD) */ CAN0_N0-CCCR.U | (1 3); /* BRSE 1 (比特率切换) */ CAN0_N0-CCCR.U ~(1 1); /* CCE 0 */ CAN0_N0-CCCR.U ~(1 0); /* INIT 0 */ while ((CAN0_N0-CCCR.U (1 0)) ! 0); }瑞萨RH850 RS-CANFD模块配置模块架构与时钟RH850/F1KM或U2A的CAN模块称为RS-CANFD支持CAN 2.0B CAN FD最高8 Mbps多Channel架构如F1KM有2~6个Channel包含Common Block全局控制/时钟/中断、硬件接收规则表Rule Table、独立Rx FIFO/Tx Buffer/Tx Queue。CAN时钟通常为PCLK或专用CANOSC以80 MHz为例实际通信时钟 CANFDCLK / (BRP 1)。模式切换RH850的CAN通道有四种模式切换顺序严格Reset Mode上电默认→ Test Mode仅测试→ Config Mode可配置→ Operating Mode正常收发。while ((RCFDC0CFDGSTS 0x01) ! 0); /* 等待RAM初始化完成 */ RCFDC0CFG 0x00; /* 进入Reset Mode */ while ((RCFDC0CFDGSTS 0x06) ! 0x00); RCFDC0CFG 0x02; /* 进入Config Mode */ while ((RCFDC0CFDGSTS 0x06) ! 0x04); /* ... 在此进行所有配置 ... */ RCFDC0CFG 0x01; /* 进入Operating Mode */ while ((RCFDC0CFDGSTS 0x06) ! 0x02);波特率寄存器配置标称位时序使用RCFDCnCFGBRP、RCFDCnCFGTSEG1、RCFDCnCFGTSEG2、RCFDCnCFGSJW寄存器CAN FD数据段使用RCFDCnCFDDBRP、RCFDCnCFDDTSEG1、RCFDCnCFDDTSEG2、RCFDCnCFDDSJW寄存器写入值均为实际值减1。配置示例500 kbps标称 2 Mbps数据段fCANFD80MHz/* 标称位时序500 kbps */ RCFDC0CFGBRP (10 - 1); /* BRP9 → 分频10 */ RCFDC0CFGTSEG1 (12 - 1); /* TSEG111 */ RCFDC0CFGTSEG2 (3 - 1); /* TSEG22 */ RCFDC0CFGSJW (3 - 1); /* SJW2 */ /* 验证: 80M/(10×(1123)) 500K ✓ */ /* CAN FD数据段2 Mbps */ RCFDC0CFDDBRP (2 - 1); /* BRP1 → 分频2 */ RCFDC0CFDDTSEG1 (14 - 1); /* TSEG113 */ RCFDC0CFDDTSEG2 (5 - 1); /* TSEG24 */ RCFDC0CFDDSJW (4 - 1); /* SJW3 */ /* 验证: 80M/(2×(1145)) 2M ✓ */接收规则表配置RH850采用硬件规则表实现过滤每条规则包含ID、MASK、帧类型、目标Rx FIFO/Buffer等信息/* 接收 ID0x123 的标准帧到 Rx FIFO 0 */ RCFDC0CFDRM_GAFLID0 0x123; RCFDC0CFDRM_GAFLM0 0x7FF; /* 11位标准ID全匹配 */ RCFDC0CFDRM_GAFLP0_0 (0 28) | (0 16); /* DESTRxFIFO, NUM0 */滤波器配置详解英飞凌TC3xx的滤波器配置在Message RAM中通过SIDFC/XIDFC寄存器指向。每个Standard ID Filter Element为32 bit包含SFT匹配模式Range/Dual/Classic/Disabled、SFID1/SFID2ID或范围、SFEC目标FIFO0/FIFO1/RxBuffer/Reject。示例接收ID0x100~0x200的所有帧到Rx FIFO 0uint32 *filter_ram (uint32 *)FILTER_BASE_ADDR; filter_ram[0] (0x00 30) /* SFT Range */ | (0x100 16) /* SFID1 0x100 */ | (0x200 0) /* SFID2 0x200 */ | (0x01 24); /* SFEC Store in Rx FIFO 0 */瑞萨RH850的滤波机制与英飞凌的核心差异在于存储位置为专用规则表寄存器而非RAM匹配模式为IDMASK帧类型组合目标指定通过DESTDEST_NUM字段数量取决于具体芯片型号通常16~128条。发送与接收实战英飞凌TC3xx发送CAN FD报文void CAN_Send_Message(uint8 node, uint32 id, uint8 *data, uint8 dlc) { uint8 txBufIdx 0; uint32 *txBuf (uint32 *)(TX_BUF_BASE txBufIdx * TX_BUF_ELEM_SIZE); txBuf[0] (id 18); /* ID */ txBuf[1] ((uint32)dlc 16); /* DLC */ for (uint8 i 0; i (dlc 3) / 4; i) { txBuf[2 i] (data[4*i] 24) | (data[4*i1] 16) | (data[4*i2] 8) | data[4*i3]; } CAN0_N0-TXBAR.U | (1 txBufIdx); /* 触发发送 */ }瑞萨RH850发送报文void RSCANFD_Send(uint8 ch, uint8 bufIdx, uint32 id, uint8 *data, uint8 dlc) { RCFDCnCFDTBID(ch, bufIdx) id; RCFDCnCFDTBCTRL(ch, bufIdx) (dlc 0x0F) | (1 4); /* IDE0:标准帧 */ for (uint8 i 0; i dlc; i) RCFDCnCFDTBDB(ch, bufIdx, i) data[i]; RCFDCnCFDTBSTS(ch, bufIdx) | 0x01; /* 触发发送 */ }英飞凌TC3xx中断接收void CAN0_RxFIFO0_ISR(void) { uint8 getIdx (CAN0_N0-RXF0S.U 8) 0x3F; uint32 *msgPtr (uint32 *)(RXF0_BASE getIdx * RXF0_ELEM_SIZE); uint32 id (msgPtr[0] 18) 0x7FF; uint8 dlc (msgPtr[1] 16) 0x0F; uint8 data[64]; for (uint8 i 0; i (dlc 3) / 4; i) { data[4*i] (msgPtr[2i] 24) 0xFF; data[4*i1] (msgPtr[2i] 16) 0xFF; data[4*i2] (msgPtr[2i] 8) 0xFF; data[4*i3] msgPtr[2i] 0xFF; } CAN0_N0-RXF0A.U getIdx; /* 确认读取 */ CAN0_N0-IR.U (1 0); /* 清除RF0N中断标志 */ User_ProcessCanMsg(id, data, dlc); }中断与错误处理英飞凌TC3xx通过IE寄存器使能中断RF0NE、BOE、EWE、EPE等通过SRC寄存器路由到指定CPU并设置优先级。瑞萨RH850通过FEINT寄存器使能中断在INTC中注册中断向量并设置优先级。错误状态监控方面英飞凌读取ECR寄存器获取TEC/RECPSR寄存器获取LEC瑞萨读取CFDGESTS寄存器获取错误状态Active/Passive/Bus Off。TEC/REC持续增加表示波特率或硬件问题REC127进入Error PassiveTEC255进入Bus Off。完整配置流程对比步骤英飞凌 TC3xx (MCMCAN)瑞萨 RH850 (RS-CANFD)时钟使能CCU配置fASYN/fSPB → CAN模块CKSC寄存器使能CANOSC/PCLK进入配置模式CCCR.INIT1, CCCR.CCE1等待RAM初始化 → 进入Config Mode波特率配置写NBTP DBTP写CFGBRP/CFGTSEG1/CFGTSEG2/CFGSJWMessage RAM规划配置SIDFC/XIDFC/RXF0C/TXBC等配置Rx FIFO / Tx Buffer大小滤波器配置在RAM中写Filter Element写接收规则表寄存器中断配置IE寄存器 SRC路由FEINT寄存器 INTC注册使能CAN FDCCCR.FDOE1, BRSE1CFG中FD模式位进入运行模式清CCE → 清INIT写Operating Mode验证发送测试帧 / 回环模式发送测试帧 / 回环模式常见问题与调试技巧波特率不匹配发送后无ACK且错误计数飙升通常是双方波特率不一致需用示波器或CAN分析仪测量实际位宽偶发CRC错误多为采样点偏差过大应统一所有节点采样点CAN FD数据段错误需检查DBTP配置及TDC是否使能。英飞凌TC3xx常见坑忘记退出INIT模式就发送会导致帧永远发不出去Message RAM地址必须4字节对齐否则硬件无响应Filter数量与RAM大小不匹配会溢出导致随机丢帧多核访问同一CAN Node需要软件互斥或硬件分区。瑞萨RH850常见坑未等待RAM初始化完成就配置会导致配置无效模式切换顺序错误如从Reset直接到Operating会导致通信失败接收规则表MASK写错会导致接收到非预期帧或完全收不到BRP寄存器值理解错误实际分频值1会导致波特率偏差一倍。调试工具链CAN分析仪Vector CANoe/PCAN/Kvaser用于监听总线验证波特率和帧格式示波器配合差分探头测量CANH/CANL实际波形和位宽回环模式TC3xx: CCCR.TEST1, TEST.LBCK1RH850: Test Mode Internal Loopback无需外部硬件即可验证配置错误计数器监控是最有效的通信健康指标。AUTOSAR MCAL配置要点在实际车规项目中通常使用AUTOSAR MCAL进行CAN配置。英飞凌TC3xx配合EB tresos在CanController下配置CanControllerBaudrateConfig标称波特率参数和CanControllerFdBaudrateConfigCAN FD数据段参数以及CanHth/CanHrh硬件对象。瑞萨RH850配合RH850 MCAL在CanController下配置CanBaudRate、CanBaudRateFD、CanRxRuleTable规则表条目和CanTxBuffer。总结英飞凌TC3xx采用Bosch M_CAN IP核通过寄存器Message RAM配置滤波方式为RAM中Filter Element模式切换通过CCCR寄存器INIT/CCE典型应用于动力总成、底盘、ADAS。瑞萨RH850采用自研RS-CANFD IP通过寄存器规则表配置滤波方式为硬件规则表模式切换为4级状态机典型应用于车身、网关、电机控制。核心建议先用公式或工具如Vector CAN Bit Timing Calculator精确计算位时序参数先用Loopback模式验证配置再接入真实总线同一网络所有节点采样点必须一致TEC/REC是最有效的通信健康指标务必查阅最新Errata Sheet了解已知勘误。参考芯片Infineon AURIX TC387/TC397、Renesas RH850/F1KM/U2A参考标准ISO 11898-1:2015、ISO 11898-2:2016
返回列表