This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F2.8379万D:CAN通信故障(状态和总线错误)

Guru**** 2223470 points
Other Parts Discussed in Thread: CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/640330/ccs-tms320f28379d-can-communication-trouble-status-and-bus-errors

部件号:TMS320F2.8379万D
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

大家好,

我目前正在通过MCP2551收发器处理与F2.8379万D卡(一个启动板和一个控制卡)之间的CAN通信,我希望每秒发送一条消息。

我已经在同一个卡的CAN A和B之间发送/接收消息(两个都单独),所以我认为GPIO /硬件配置没有问题,但当我尝试连接两个卡时,第一个说话节点会持续产生电子邮件。 就像接收器没有ACQ。

作为参考,我的发射器的CANES REG启用了EWARN和EPASS位,LEC等于“011”。 我在TRM中看到了这个问题,但我不明白到底是什么问题。

对于我来说,这是配置/软件问题,您是否首先知道不同的外围设备/中断是否可能会导致CAN模块故障? (我正在使用ADC,PWM,计时器,从闪存运行,很快使用DMA和CLA)。  

另一个提示是,帧的间隔精确到120US。

目前我只使用RX中断,您认为使用TX中断来监控总线是否至关重要? (我的未来目标还将是验证节点的存在性)。

最后,您是否有关于CAN总线监控/故障管理的代码示例/文档?

非常感谢您的帮助,祝您度过美好的一天。

此致,

热雷梅

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Jeremy:

    根据您对错误标志状态和值的描述,这指向另一节点未接收到CAN消息。  在收到这些信息之前,这些信息将一直显示在CAN总线上。  这说明了为什么您在CAN总线上看到定期消息,因为它未被接收或确认。  您提到Cana和CANB可以使用同一张卡进行通信,但您看到您正在2张卡之间描述此问题。  您需要回答以下几个问题:

    1) 您是否使用相同的物理接口(MCP2551收发器和CAN总线)在相同的卡和不同的卡上进行CAN通信?

    2) 与不同的卡通信时,您是否使用相同的系统速度和波特率?

    CAN SW的唯一代码示例是我们在C2000 Ware/controlSUITE中的内容。  对于总线监控,建议使用CAN接口连接到PC,因为这使您能够查看CAN总线上的活动,错误,波特率以及哪些节点处于活动状态。  例如,如果您在LabView上工作,一个很好的使用工具将是USB 8473。

    此致,

    约瑟夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Joseph,感谢您的回答。

    事实上,我已经尝试过配置:每张卡都通过Cana和CANB对自己讲话。 此配置适用于两个卡(一个一个,我只使用两个MCP2551)。

    所以我认为我们可以消除总线和硬件问题。

    但现在我只使用CAN A来连接每张卡,我尝试让它们进行通信:第一张卡连续发送消息(可能是像您说的那样的ACK问题)。

    我不认为这是因为巴士长度的问题(关于2 cm :))。 波特率是相同的,但我不确定外围时钟(µC核心和CAN核心),启动板上的gPIO73不能用于验证它。

    此外,我正在对存储卡使用类似的代码,除了一个使用PWM/ADC和其它模块之外,您知道UARTprintf是否会对CAN通信造成故障吗?

    谢谢,祝您度过美好的一天!

    此致,

    热雷梅

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jeremy:

    我很确定您已经检查了接收卡的CAN引脚(GPIO)配置,您似乎已经确定了CAN总线中信号的范围,并确认传输的消息定期显示在总线上,显示为~120US。 这至少是确认传输正常。 在接收端,程序是否在接收功能中循环,是否轮询正确的消息编号? 您是否还能观察接收卡的CAN_ES寄存器内容并记下标记(Boff,RxOk,LEC,Per)?

    谢谢,此致,
    约瑟夫
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Joseph:

    很抱歉我的回答延迟了,我正在同时处理不同的项目...

    是的,我可以在示波器上看到帧,当我启动发射器(启动板)时,我可以在短暂延迟后持续发射。

    这是接收器(控制卡)的寄存器:

    我的RX帧中断,测试为“CANIntStatus(Cana_base, CAN_INT_STS_CAUS)"(结果始终为3.2768万...),然后是getStatus函数“98”(您可以在我的屏幕截图中看到的值)。

    在我的主循环中有两个"IF"后,一个用于我自己的应用程序(具有控制定律),另一个用于与RX标志+状态值条件的CAN通信(目前我只有一个受监控的RXmsgObject)。

    我将尝试验证#ifdef或其他,以查看我的卡的“真实”时钟配置。

    现在,你已经知道了一切:)

    非常感谢您的帮助,祝您度过美好的一天,

    此致,

    热雷梅