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.

[参考译文] TMS320F28335:CAN 传输邮箱优先级不能作为用户指南和#39;s 描述

Guru**** 2539640 points
Other Parts Discussed in Thread: TMS320F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/610603/tms320f28335-can-transmit-mailbox-priority-not-worked-as-user-guide-s-description

器件型号:TMS320F28335

大家好、

 我的客户报告了 TMS320F28335 CAN 传输邮箱优先级不起作用的问题、作为用户指南说明:

 邮箱14和邮箱12被设置为发送邮箱、而邮箱12和邮箱的 TRS 都被设置、 优先级低的邮箱12将首先发出、然后发送优先级更高的邮箱14。

 请就以下问题发表意见:  

1) 1)什么是 CPK 和消息控制器工作流程? 如果较低优先级的邮箱满足数据要求(TRS 设置为1、 同时,较高优先级的邮箱也是用数据来实现的(TRS 设置为1),因为较低优先级的邮箱没有发出,首先是较高优先级的邮箱的传输缓冲区和  较高优先级邮箱的发送上下文吗?   

2) 2)如果设置了另一个较高优先级邮箱(TRS)、为什么低优先级邮箱首先发送?

详细信息可在附加的文件中找到。

 

此致

Benjamine2e.ti.com/.../tms320F28335-eCAN-priority-transmit-issue.docx

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、
    在用户指南中、它提到: “消息控制器还负责根据消息的优先级发送下一条消息到 CPK”,这意味着:如果发送缓冲区被低优先级邮箱的上下文填满,则发送缓冲区仍将以低优先级发送上下文。 对于下一个传输缓冲区、它将填充更高优先级的邮箱上下文?
    期待您的回复、谢谢。

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

    Benjamin、

               正确的做法是、一旦传输缓冲区中填充了一条消息、它将首先输出。 当相关邮箱的 TRS 位被同时置位时、发送优先级的工作方式与用户指南中描述的方式一致。 请告诉我这是否能解答您的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Haresh、
    以下是用户指南第1.5.1章中的说明:"如果传输由于仲裁丢失或错误而失败、将重新尝试传输消息。 在重新尝试传输之前、CAN 模块会检查是否有其他传输被请求、然后传输具有最高优先级的邮箱。"
    此外,正如客户在第一个帖子中报告的问题所提到的,节点2 TRS.12和 TRS.14都设置为1,并且根据第1.5.1章,总线上还有其他更高优先级的 ID 帧, 哪个节点2 CAN 控制器应首先传输邮箱14、然后传输邮箱12。
    您对客户问题有何意见? 根据第1.5.1章、邮箱14似乎应该首先传输、但是根据第1.2.1章和之前的帖子、邮箱12首先传输是正常的。 很困惑。
    您对如何实现以下功能有何建议:首先是更高优先级的 CAN 邮箱发送、之后是更低优先级? 由于这个已报告的优先级问题、根据测试、由于较高优先级邮箱无法传输、一些基于 CAN 数据的系统较高时序操作将会错过时序限制、从而降低系统性能。
    期待您的回复、谢谢。

    PS:
    节点1
    帧1 ID:1 1100 1000 xxxx xxxx xxxx xxxx xxxx
    帧2 ID:1 1100 1000 xxxx xxxx xxxx xxxx xxxx xxxx
    帧3 ID:1 1101 0000 1000 xxxx xxxx xxxx xxxx xxxx
    节点2:
    帧4 ID:1 1100 1001 0000 xxxx xxxx xxxx xxxx xxxx
    帧5 ID:1 1101 0001 0000 xxxx xxxx xxxx xxxx xxxx xxxx


    此致
    Benjamin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Haresh:
    您还能回答第一个帖子中的问题吗?
    1) 1)什么是 CPK 和消息控制器工作流程? 如果较低优先级的邮箱满足数据要求(TRS 设置为1、 同时,较高优先级的邮箱也是用数据来实现的(TRS 设置为1),因为较低优先级的邮箱没有发出,首先是较高优先级的邮箱的传输缓冲区和较高优先级邮箱的发送上下文吗?

    2) 2)如果设置了另一个较高优先级邮箱(TRS)、为什么低优先级邮箱首先发送?

    期待您的回复、谢谢。

    此致
    Benjamin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 SPRUEU1、TMS320F2833x、2823x 增强型控制器局域网(eCAN)参考指南的1.5.1中,它提到:“如果传输由于仲裁丢失或错误而失败,则将重试消息传输。 在重新尝试传输之前、CAN 模块检查是否有其他传输被请求、然后传输具有最高优先级的邮箱。 "
    优先级逻辑是正确的、但这与 Benjamin 提到的逻辑相矛盾。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Benjamin、

               正如我在第一个帖子中所解释的那样,一旦传输缓冲区中填充了一条消息,即使随后启动了其它较高优先级的消息的传输,它也会停止。 请注意"后续"一词。

     

    用户5049454、

               "如果传输由于仲裁丢失或错误而失败、则消息传输将被重试。 在重新尝试传输之前、CAN 模块检查是否有其他传输被请求、然后传输具有最高优先级的邮箱。 "

     

    考虑一种既不存在仲裁丢失也不存在错误的情况、但当正常 CAN 通信开始时、邮箱被标记为传输。 当 TRS 设置为1时、消息被复制到发送缓冲器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道正常情况、但我需要知道仲裁失败或错误的条件。 例如、考虑以下时序:
    1)。 节点 A 的低优先级邮箱首先请求发送数据、但现在总线占线、当总线空闲时、低优先级邮箱中的数据将被发送;
    2)。 节点 A 的高优先级邮箱还请求在总线空闲前发送数据;
    3)。 现在总线是空闲的、但是节点 A 的低优先级邮箱中的数据试图被发送、但由于仲裁丢失而无法成功发送到总线(其他节点由于高优先级帧 ID 而成功仲裁总线);
    4).当总线再次空闲时、哪个邮箱的节点 A 数据将被发送到总线?低优先级或高优先级?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于您描述的情形、应根据规范传输高优先级消息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Hareesh、
    如何在上帖子中确定描述了4个步骤的情境? 是否有任何 CAN 状态位可以重新反射这些情况?

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

    您好、Haresh

          我非常同意您的观点、我也认为  来自高优先级邮箱的消息将首先发送。

         这个逻辑电路是很有价值的、否则 、低优先级邮箱的消息由于 仲裁丢失而长时间占用 TX 缓冲器、 并且高优先级邮箱的消息不能被发送。

         实际上、这种情况通常会发生。 例如、系统设计为某些低优先级消息需要在 CAN 总线上定期传输、而某些高优先级消息需要随机发送、并且需要低延迟响应。

        TMS320F28335 CAN 外设大多数场景都是 先发送高优先级消息、但我们发现、有时首先发送低优先级消息的概率非常低。

       我们的系统 CAN 总线占用率约为75%、CAN 波特率为500Kbps、数据传输帧的时间约为300us、时序如下:

       1)。   来自 低优先级邮箱的消息首先请求发送、但现在总线占线、消息未成功发送;

       2)。  大约1毫秒后、高优先级邮箱消息也被请求发送、那么低优先级邮箱数据仍然未成功发送。

       3)。 在另外2毫秒之后、低优先级邮箱数据被成功发送、但是 在低优先级邮箱消息被成功发送之前、高优先级邮箱消息仍然没有被成功发送。

       请告诉我发生了什么。我将等待您的在线回复。

       谢谢。

       

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

    [引用用户="Benjamin Zhou ]Haresesh、
    如何在上帖子中确定描述了4个步骤的情境? 是否有任何 CAN 状态位可以重新反射这些情况?

    此致
    Benjamin

    [/报价]

    否、没有反映这种情况的状态位。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 您可以为低优先级 MBX 设置 TRS。 数据被传输到 TX 缓冲区、但不会被发出(因为总线忙)。
    2. 您可以为高优先级邮箱设置 TRS。
    3. 同时、当总线空闲时、低优先级邮箱的数据被尝试发送、但仲裁丢失。
    4. 现在、当总线变为空闲并且尝试重新传输低优先级邮箱时、CAN 模块应该检查是否有任何等待发送的高优先级邮箱。 (可以想象 CAN 模块会在仲裁本身丢失时检查等待发送的任何高优先级邮箱)。
    5. 现在、有时会传输一个低优先级邮箱。

     

    现在、您如何确定确实存在仲裁丢失? 这很难证明、因为一旦我们设置 TRS 位、帧输出的精确时刻就不再受我们的控制。 可能是低优先级邮箱的 TRS 位在高优先级邮箱之前被置位、并且没有仲裁错误或丢失。 我可以考虑一种方法来试验性地验证这一点:

    假设 MBX0具有低优先级消息、MBX1具有高优先级消息。

    TRS0被置位时、切换 GPIOx。 TRS1被置位时切换 GPIOy。 触发 GPIOy 上的示波器。 捕获另一个通道中的 CAN 流量。 通常、GPIOy 应首先切换、然后是 GPIOx。 如果发生相反的情况、请查看 CAN 流量以查看是否确实存在仲裁丢失。 您可能希望使用基于 USB 的低成本逻辑分析仪而不是示波器。 正确触发器有点棘手、但我们需要说服自己、即使等待的是高优先级消息、仲裁确实会丢失、CAN 模块仍会发出低优先级消息。

     

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

    请查看此帖子:https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/343127/1626209#1626209 您似乎面临类似的情况。 下面是设计分析:

     

    现在、我们的用户指南说明了以下内容:

    如果传输由于仲裁丢失或错误而失败、则消息传输将被重新尝试。 在重新尝试传输之前、CAN 模块检查是否有其他传输被请求、然后传输具有最高优先级的邮箱。

     

    更好、更精确的措辞如下:

    如果传输由于仲裁丢失或错误而失败、则消息传输将被重新尝试。 在重新尝试传输之前、CAN 模块会检查是否请求了其他传输。 如果在发送缓冲区中的消息丢失仲裁之前、较高优先级(由 MBX 编号或相关的 TPL 值确定)邮箱的 TRS 位已经被置位、 传输缓冲区内容将被更高优先级邮箱的内容所取代、而更高优先级邮箱将在仲裁丢失后被传输。 但是、如果在发送缓冲区中的报文丢失仲裁后该 TRS 位置位、那么优先级较高的 MBX 将只在发送缓冲区中的当前报文发送完毕后才发送。

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

    我还要提请 你注意弗兰克·博尔曼先生在另一个主题中提出的建议:

     

    "...您是否考虑使用 TRR 寄存器? 这会有帮助吗? 根据我的理解、TRR=1将取消传输请求、该请求已在进行中、但由于仲裁失败而导致传输请求失败(请参阅 UG 章2.4)。 因此,如果节点需要传输紧急消息,它可以检查是否仍设置了其它 TRS 位,并通过设置 TRR 位来取消这些请求。。。 "

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

    有两种方法可以知道仲裁是否丢失:

    我们可以计算仲裁是否丢失。 在500Kbps 波特率下、帧传输时间大约为300微秒。 很少、

       步骤1:首先、我们为低优先级 MBX 设置 TRS。 来自低优先级 MBX 的数据被立即传输到 TX 缓冲区。

       第2步:1毫秒后、我们将 TRS 设置为高优先级 MBX、此时、低优先级邮箱的数据不会被发送出去。

       步骤3:在另外2毫秒后、低优先级邮箱的数据被成功发送、 同时高优先级邮箱的数据不被发送。

       在从 Step2到 Step3的2毫秒内、大约6帧数据可以通过 CAN 总线传输。 如果低优先级邮箱的数据被尝试在2毫秒内连续传输、那么它肯定会导致仲裁丢失。 如果高优先级邮箱的数据被尝试发送、高优先级邮箱的数据在低优先级邮箱之前被成功发送。

    2.另一种直观的方法是使用示波器检测 TX 和 RX。

       高优先级邮箱和低优先级邮箱的帧 ID 不同、在 CAN 总线竞争中、我们很直观地发现低优先级邮箱数据多次被仲裁失败、但高优先级邮箱的 TRS 被设置。

      上述两种方法在实验室中多次得到确认。 结论是、在极少数情况 下、低优先级邮箱数据在高优先级邮箱数据之前发出。

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

    在步骤1和步骤2之间、有1 ms。 仅在步骤2中是高优先级邮箱集的 TRS。 这意味着总线在步骤1和步骤2之间托管高优先级消息、并且低优先级消息已丢失仲裁。 高优先级报文的 TRS 在发送缓冲区中的报文丢失仲裁后置1。 因此、根据我之前的消息、低优先级的消息首先发出。

     

    2.恐怕我不明白你在这里所描述的内容。 在任何情况下、重要的是当高优先级 MBX 的 TRS 被设定时相对于仲裁丢失发生的时间的相对偏移。

     

     

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

    在发送缓冲区中的消息失去仲裁之后、高优先级消息的 TRS 被置位、但是在2毫秒后、低优先级邮箱的数据被发出。 在2毫秒内、低优先级邮箱消息已失去仲裁大约6次。 为什么高优先级邮箱消息不能被载入发送缓冲器。 是否可以说"低优先级邮箱消息仲裁失败、 CAN 模块检查是否请求了其他传输、然后传输了具有最高优先级的邮箱"这一逻辑只适用于第一次、而不是每次?

    2.我想说的是,我们可以 直观地判断是否通过 TX 和 RX 失去仲裁。

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

    是否可以说"低优先级邮箱消息仲裁失败、 CAN 模块检查是否请求了其他传输、然后传输了具有最高优先级的邮箱"这一逻辑只适用于第一次、而不是每次?

    answe-->这当然是事实。