NXP MCU 技术论坛
直播中

杨福林

8年用户 1593经验值
私信 关注
[问答]

如果RT1062 CAN中的传输ID和接收ID相同,会发生什么情况?

RT1062 当 CAN 中的发送 ID 和接收 ID 相同时,发送的数据将在发送数据的通道上接收。

我有一个问题,因为设置中有错误。

我已确认 FLEXCANx_CTRL1 的 LPB 为 0。

回帖(1)

刘芳

2025-3-3 11:52:42

在RT1062的FlexCAN模块中,当发送ID与接收ID相同且出现自发自收现象时(即使LPB模式未启用),根本原因通常与自接收请求(Self Reception Request, SRR)功能有关。以下是关键分析及解决方案:




问题原因




  1. SRR位配置



    • FlexCAN的模块配置寄存器(MCR)中有一个SRR位(Self Reception Request)。若该位被置为1,模块会在发送报文时,强制将报文存入接收缓冲区,即使未启用回环模式(LPB=0)。

    • 这是设计上的功能,用于某些需要自发自收的场景(如协议栈测试),但若意外启用会导致异常。




  2. 接收过滤器配置



    • 如果接收过滤器(RX MB或FIFO)的ID掩码(ID MASK)设置过于宽松(如全匹配或未过滤),当SRR启用时,发送的ID会直接通过过滤器,触发接收逻辑。






解决方案




  1. 禁用SRR功能



    • 检查并清除MCR寄存器的SRR位(通常需向MCR[SRR_DIS]写入1,具体参考手册)。示例代码:
      FLEXCAN_EnableSelfReception(CAN_Type *base, bool enable); // 使用NXP SDK时,确保第二个参数为false

    • 确保初始化代码中未误启用自接收功能。




  2. 检查接收过滤器配置



    • 确认接收邮箱(RX Mailbox)或FIFO的ID掩码是否严格匹配目标ID。例如:
      flexcan_rx_mb_config_t mbConfig;
      mbConfig.id = RECEIVE_ID;     // 接收ID
      mbConfig.idMask = 0x7FF;      // 11位标准ID全掩码,确保精确匹配
      FLEXCAN_SetRxMbConfig(base, mbIdx, &mbConfig, true);

    • 若需接收多个ID,需合理设置掩码值,避免包含发送ID。




  3. 验证硬件连接



    • 确保CAN总线终端电阻正确(120Ω),且不存在物理层短路(如TX与RX误接)。






验证步骤




  1. 读取MCR寄存器



    • 使用调试工具(如调试器或printf)确认MCR[SRR_DIS]的值,确保SRR已禁用。




  2. 逻辑分析仪抓包



    • 通过逻辑分析仪或CAN分析工具,确认总线上是否存在重复帧。若仅有单一发送帧,但接收端仍捕获到数据,则需重点检查SRR配置。






总结


RT1062的FlexCAN在发送与接收ID相同时,若出现自发自收现象,需优先检查SRR功能是否被启用,而非仅依赖LPB模式。通过禁用SRR并严格配置接收过滤器,可避免该问题。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分