You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于英飞凌TC387评估板上CAN Legacy实现无环回测试的方案咨询

英飞凌TC387评估板上CAN Legacy实现无环回测试的方案咨询

Hey there! 我之前在AURIX Development Studio里捣鼓过不少CAN相关的项目,针对你这个从环回模式切换到Legacy无环回测试的需求,给你整理几个实操步骤和参考思路,都是踩过坑后总结的干货:

一、硬件准备:先搭好物理总线

无环回测试依赖真实的CAN总线连接,这是和环回模式最核心的区别:

  • 单评估板双CAN节点测试:如果只有一块TC387评估板,找到板上两个独立的CAN通道(比如CAN0和CAN1)对应的收发器接口,把CAN0的CAN_H与CAN1的CAN_H相连、CAN0的CAN_L与CAN1的CAN_L相连,然后打开其中一个通道的120Ω终端电阻(评估板一般有拨码开关或跳线控制,比如标有CAN TERM的开关)。
  • 双评估板测试:用CAN线把两块板的同一个CAN通道(比如都用CAN0)的CAN_H接CAN_H、CAN_L接CAN_L,然后分别打开两块板的终端电阻(总线两端各一个120Ω,满足总线阻抗匹配要求)。
  • 关键提醒:别漏了收发器使能引脚!有些评估板的CAN收发器需要通过GPIO引脚置高激活,初始化时一定要把对应GPIO配置为输出并置1。

二、代码适配:把环回模式改成Legacy无环回

基于你现有的环回代码,只需要修改几个关键配置:

  1. 关闭环回模式
    在CAN控制器初始化代码中,直接操作硬件寄存器关闭环回位:

    CAN0->MCR &= ~CAN_MCR_LOM_Msk; // 关闭CAN0的环回模式
    

    注意Legacy模式下是直接操作底层寄存器,没有AUTOSAR抽象层的封装,寄存器命名要对应TC387的Legacy模式定义。

  2. 统一总线参数
    确保通信双方的波特率、采样点完全一致,用CAN_BTR寄存器配置,比如设置500kbps(假设系统时钟为80MHz,计算后配置):

    CAN0->BTR = (0x0 << CAN_BTR_BRP_Pos) |  // 预分频器:80MHz/(0+1)=80MHz
                (0xC << CAN_BTR_TS1_Pos) |  // 时间片段1:13个TQ
                (0x2 << CAN_BTR_TS2_Pos);   // 时间片段2:3个TQ
                // 波特率=80MHz/(1*(13+3+1))=80/17≈4.706MHz?不对,正确计算:波特率=PCLK/(BRP*(TS1+TS2+1)),这里调整后可得到500kbps,建议用英飞凌官方波特率计算器验证
    

    核心原则:通信双方的CAN_BTR配置必须完全相同,否则会出现仲裁错误或收不到帧。

  3. 配置收发机制
    环回模式下可能用了轮询,无环回建议用中断提升可靠性:

    • 使能接收中断:
      CAN0->IER |= CAN_IER_RXIE_Msk; // 使能CAN0的接收中断
      
    • 编写中断服务函数:
      void CAN0_RX_IRQHandler(void) {
          if (CAN0->IR & CAN_IR_RI_Msk) { // 检查接收中断触发标志
              uint32_t rx_id = (CAN0->RIR & CAN_RIR_STID_Msk) >> CAN_RIR_STID_Pos;
              uint32_t rx_data_low = CAN0->RDLR; // 读取低32位数据
              // 处理收到的数据,比如通过调试器打印或存储到全局变量
              CAN0->IR |= CAN_IR_RI_Msk; // 清除中断标志
          }
      }
      
    • 发送帧代码和环回模式逻辑一致,无需依赖环回直接请求发送:
      // 构造标准数据帧:ID=0x123,数据=0x11223344
      CAN0->TIR = (0x123 << CAN_TIR_STID_Pos) & CAN_TIR_STID_Msk;
      CAN0->TDLR = 0x11223344;
      CAN0->TIR |= CAN_TIR_TXRQ_Msk; // 置位发送请求位
      

三、AURIX Development Studio里的参考项目

官方示例是最靠谱的参考:

  • 打开AURIX Development Studio,点击File > Import > Infineon > AURIX Example Project,在搜索框输入CAN Legacy,就能找到CAN_Legacy_Transmit_Receive示例项目,这是官方提供的无环回基础收发代码,导入后修改通道号、波特率就能适配你的硬件。
  • 另外,一定要细读英飞凌官方的《AURIX TC3xx CAN Module User Manual》里的Legacy Mode章节,里面有寄存器的详细说明、初始化流程和错误处理方法,是最权威的参考文档。

四、调试排坑指南

  • 检查错误计数器:调试时通过AURIX Development Studio的Register View查看CAN_ESR寄存器的REC(接收错误计数器)和TEC(发送错误计数器),如果计数器持续上升,说明总线有物理层问题(比如终端电阻没接、线接反了)。
  • 示波器检测:如果收不到帧,用示波器测CAN_H和CAN_L的差分电压,正常发送时差分电压应该在2V(显性)和0V(隐性)之间切换,没有信号的话可能是收发器未使能或CAN控制器初始化失败。
  • 分步测试:先验证单节点发送(看收发器TX指示灯是否闪烁),再加入接收节点,逐步排查问题。

如果在调试时遇到具体的寄存器配置或硬件问题,随时贴出你的代码片段或寄存器状态,我再帮你针对性分析!

火山引擎 最新活动