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.

[参考译文] TMS320F28388S:使用 TxOk 位检测网络上的仲裁胜出者

Guru**** 2502205 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1547859/tms320f28388s-txok-bit-usage-to-detect-arbitration-winner-on-network

器件型号:TMS320F28388S


工具/软件:

我想检测哪个节点是 CAN 网络上的仲裁胜利者。 通过 J1939 发送 PGn 后、我会检查中的 TxOk 位  

CAN_ES 寄存器。 根据数据表、成功传输消息后、该位应设置为 1。 但该位没有设置为 1。 请帮助我了解通过 CAN 网络检查取胜节点的方法。  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tejaswinee:

    仲裁由 CAN 协议本身完成、如果有多个节点尝试发送、具有最低地址的节点 ID 始终具有最高优先级。  只是想知道为什么你需要手动识别赢得仲裁的节点.  看起来您在查看 TxOk 状态时会监视发送节点的仲裁、对吧?  由于会有多个发送节点、如何同时检测发送节点?  最好在接收节点上监控此情况并按接收顺序记录节点 ID(属于 CAN 帧的一部分)。  您可以使用 CAN ISR 中的计时器(接收到消息时)对接收到的帧顺序进行计时。

    此致、

    Joseph

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

    您好、Joseph:   

    感谢您对此进行研究。 我们的应用中有多个控制单元将在 J1939 CAN 网络上进行通信、一个在仲裁中胜出的控制单元将是主控制器。 此后、只有主设备发送数据请求。 一旦确定一个主设备、其他主设备将进入侦听模式。 我的控制单元代码的工作方式如下:  

    1.考虑首次传输专有 PGN 时,网络上还没有主设备。 发送专有 PGN 并检查传输是否成功、如果是、则当前节点将在仲裁中胜出、并且是主节点。 当前节点将声明总线并通过网络宣布我是专有 PGN 上的主节点。

    2.考虑某人已经是网络上的主设备,进入监听模式,不发送 PGN   

    谢谢您、

    Tejaswinee  

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

    尊敬的 Tejaswini:

    我假设您使用的是 F28388S 器件中的 CAN-FD 模块、因为您要处理 J1939。  我们没有此应用的软件示例、但可以就如何执行此操作提供一些建议。  根据您的描述、并假设每个节点还设置为接收和发送消息、我得出结论:任何尚未完成帧传输并收到 CAN 帧的节点都不是仲裁胜利者。  仲裁胜出者将是已成功传输帧且根本未接收到任何 CAN 帧的节点。  根据这些假设、您可以执行以下步骤:

    • 通过设置 MCAN_IE.TCE 寄存器启用传输完成中断
    • 创建一个 ISR(中断例程)、用于检测到传输完成标志。
    • 在该 ISR 中:
      • 检查中断标志 MCAN_IR.MCAN TC、以确认传输确实已完成
      • 检查位 MCAN_PSR.RFDF。  如果节点接收到 CAN 帧、则设置该位
      • 您可以在此 TC 中放置一条条件语句、这样如果 MCAN_IR.ISR 标志设置为“1"并且“并且 MCAN_PSR.RFDF 被清除为“0",“,则、则这是赢得仲裁的节点。  此时、您可以设置标志或发送一个特殊的 CAN 帧、该帧将在 CAN 总线中广播、表明传输来自赢得仲裁的节点 ID。

    此致、

    Joseph