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.
您好!
在我的设置中、两个 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