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.

[参考译文] TMS320F28075:如何使用 CANA 和 CANB 的邮箱

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/919156/tms320f28075-how-to-use-the-mailboxes-for-cana-and-canb

器件型号:TMS320F28075
主题中讨论的其他器件:C2000WARE

您好!

在我的设置中、两个 CAN 总线(500.000kbit/s)上有很多具有不同消息 ID 的消息被来回发送。

我使用:

#define TX_MSG_OBJ_ID 1.
#define RX_MSG_OBJ_ID 2.

当我发送 CAN 时、我使用(取自 lib):

CANMessageSet (CANA_base、TX_MSG_OBJ_ID、&sTXCANMessage、MSG_OBJ_TYPE_TX);  

但不幸的是、当我运行代码时、消息丢失(不发送)、并且总线错误在我的 PC-APP Busmaster 上弹出。   

对于读取我使用  的消息(取自 lib):   

CANMessageGet (CANA_base、RX_MSG_OBJ_ID、&sRXCANMessage_Int、true);

我知道 CANA 和 CANB 都有 32个消息对象(文档中的“消息对象”也称为“邮箱”)

如何在系统中实现邮箱? 代码示例?

我找到的库中  

CAN_sendMessage (uint32_t base、uint32_t Objid、uint16_t msgLen、
const uint16_t * msgData)

CAN_readMessage (uint32_t base、uint32_t Objid、
uint16_t * msgData)

使用它们是否更好? 对我来说、它看起来几乎是一样的。

我真的需要查看邮箱(32个消息对象) 和不同消息发送(Rx/TX)之间的连接-我必须处理邮箱吗?如何处理?

现在 TX 位于邮箱1中(TX_MSG_OBJ_ID= 1),RX 位于邮箱2中(RX_MSG_OBJ_ID = 2).... 对吗?

谢谢!

此致、

Carsten

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

    Carsten、

                 请下载我的应用报告 http://www.ti.com/lit/sprace5。 它有许多经过测试的示例。 我强烈建议您查看提供的调试提示。 我还强烈建议您下载并使用最新版本的 C2000Ware (https://www.ti.com/tool/download/C2000WARE )。 您使用的是什么板? 您是否正在尝试在28075的 CAN-A 和 CAN-B 之间进行通信?  

    [引用]但不幸的是、当我运行代码时、消息丢失(不发送)、并且我的 PC-app Busmaster 上出现总线错误。 [/报价]

    只有某些消息无法传输,或者没有消息被传输。  

    [报价]如何在系统中实现邮箱? 代码示例? [/报价]

    模块中已有邮箱。 您只需通过代码对其进行配置即可。 代码示例是 C2000Ware 的一部分。  

    [引述]使用它们是否更好? 对我来说、它看起来几乎是一样的。 [/报价]

    是的。 不理解您的评论。 它们有两种不同的功能。  

    [引用]我真的需要查看邮箱(32个消息对象)和不同消息发送(Rx/TX)之间的连接-我是否必须处理邮箱以及如何处理? [/报价]

    请尝试 C2000Ware 中经过测试的示例、如果您有任何困难、请告诉我。  

    [引用]现在 TX 位于邮箱1 (TX_MSG_OBJ_ID= 1),RX 位于邮箱2 (RX_MSG_OBJ_ID = 2).... 对吗? [/报价]

    正确。 您是否参考了 C:\ti\c2000\C2000Ware_3_02_00_00\device_support\f2837xd\docs 中的 Driverlib 文档?

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

    非常感谢您的快速回答... 你是最好的!

    我将告诉您结果如何。

    此致、

    Carsten

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

    您好、Haresh、

    只有部分消息会通过。

    消息在两个 f28075单元之间发送。 两个装置正在发送和接收。

     我想为每个 ID 配置一个邮箱(最多32个)

    我在代码示例中找不到任何地方可以完成此操作。 这些示例仅使用1和2作为对象 ID (邮箱)。

    额外问题:

    如果我在 Rx 和 TX 之间建立一个快捷方式、则可以停止。  

    使其再次运行的正确方法是什么? (禁用、然后启用... 或者重新初始化 CAN 全面?)  

    谢谢!

    BG。

    Carsten

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

    Carsten、

    [引用]我在代码示例中找不到任何地方完成此操作。 这些示例仅使用1和2作为对象 ID (邮箱)。 [/报价]

    无论您要配置多少个邮箱、该过程都是完全相同的。  

    [引用]如果我在 Rx 和 TX 之间建立一个快捷方式、CAN 将停止。 使其再次运行的正确方法是什么? [/报价]

    很抱歉我不明白。 请详细说明。  

    您是否阅读了应用报告中的调试提示?

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

    Hareesh、

    我现在为每个 ID 都创建了一个邮箱。 它似乎起作用。 单元1发送的每个消息也会被单元#2接收、反之亦然。  

    未检测到错误... 谢谢!

    我的下一个问题是如何使两个装置之间的 CAN 连接能够抵御来自外部的所有可能干扰。

    -突发

    - Rx 和 TX 之间的短切(时间间隔较短)

    -等等

    我 的标准是、由于干扰而丢失一些消息是可以的、但 CAN 不能冻结...  

    当我在 Rx 和 TX 之间建立快速快捷方式时、CAN 传输(硬件层)停止。

    问题:

    -如何检测到消息传输已停止?  
    如何重新启动它?  

    将尝试在寄存器 CAN_CTL 中启用自动总线、并可能启用软件复位。

    此致、祝您度过愉快的周末、

    Carsten

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

    [引用]我的标准是、可以由于干扰而丢失某些消息、但 CAN 不能冻结... [/报价]  

    在正确设计的网络中、错误应该很少。 通过"正确设计"、我指的是位时序参数的正确选择、正确的终止等 如果总线由于外部因素而受到干扰、则会生成错误帧、但一旦干扰因素消失、网络应自行恢复。 发送和接收错误计数器有助于故障检测/恢复/控制。 现在、如果干扰影响 MCU 及其相关电路、可以想象 MCU 可能会锁定或复位或开始执行垃圾。 这需要在系统硬件和软件设计中进行处理。 问题通常是去耦/滤波不足、布局错误、屏蔽不当(或缺少)等导致的 有许多在线资源可以解决这一问题。 很难在帖子中解释它们。 抖动继电器有助于在宽频谱范围内产生噪声。 这是一个极其简单的电路。 由于它未以电气方式连接到电路、因此它提供了一种简单的方法来确定电路是否受到辐射噪声的影响。  

    [引用]当我在 Rx 和 TX 之间快速设置快捷方式时、CAN 传输(硬件层)停止。 [/报价]

    您是否说您将 MCU 的 CANTX 和 CANRX 引脚短接? 如果您手动创建此类短路、则可能会将节点推到脱离总线状态。  

    [报价]  -如何检测消息传输已停止?[/quot]

    此 CAN 模块中内置没有超时检测机制。 您可以使用 CPU 计时器实现一个。 换言之,这必须在 S/W 中处理  

    [引述]  -如何重新启动它? [/报价]

    如果检测到总线关闭、则恢复可以是自动的或手动的。 有关详细信息、请参阅 TRM。

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

    您好、Haresh、

    首先、感谢您的帮助。 非常感谢您的快速回答。

    状态:

    是的、当我在 CAN 连接上进行突发测试[4kV]或在 RX 和 Tx 之间进行短切时、设置进入总线关闭状态。

    但是、借助于自动总线打开和一个内置定时器、CAN 总线(A 和 B)的运行非常好。 原因的错误传输很多、但会发生

    CAN 总线不再中断。

    再次感谢——它的工作魅力十足。

    /Carsten