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.

[参考译文] F28M35H52C:CAN LEC 在仲裁期间报告位1错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165407/f28m35h52c-can-lec-reports-bit1-error-during-arbitration

器件型号:F28M35H52C
Thread 中讨论的其他器件:controlSUITE

我一直在使用 controlSUITE v202中 M3内核的 CAN_loopback 示例。

我已将其加载到我们的定制板上、该定制板具有连接到 ISO1050DUB 收发器的 CAN 模块。

我对设置环回的线路进行了注释、而是将它们连接在一起、形成 一个500kbps 的简单总线 、其中只有两个 CAN 模块作为节点。

因此、我有一个节点发送消息、另一个接收器接收消息。 工作正常。

但是、如果我拔下接收端、我看不到发送器的错误计数器递增。

我有一个示波器监控 总线上的 CAN_H - CAN_L 电压。

我附加了下面的注释屏幕截图(隐性位为高电平、显性位为低电平)。 请 µs、它的速率为500kbps、从而产生2 μ s 位、这对应 于示波器屏幕截图上的最小时间节拍。

可以看到帧起始(SoF)后跟四个初始 ID 位(全部为0、因为 ID 为0x10)、然后要求填充位1。 电平变化需要太长时间、导致被监控的位与被发送的位不同、并导致发送器发送一个错误帧(活动错误标志、6个显性位)。

 

这种情况本身不成问题、因为总线没有端接电阻器、所以就我所能说的那样、这种问题是可以预料的。

然后、我还可以从 CAN 2.0B 规范中了解发送器错误计数器未递增的原因:检测到填充错误、这会触发要发送的错误标志。 但是、这种情况发生在仲裁过程中、对于本应为隐性但被监控为显性的位、也会发生这种情况。

但是,该示例设置了一个中断,通过 CANStatusGet ()调用读取状态寄存器。 返回的值为4、表示"Bit1 Error":  

在发送消息期间(仲裁域的触发) 、器 件希望发送一个隐性电平(逻辑值"1"的位)、但监控到的总线值为显性。 (SPRUH22I)

上面突出显示的异常与 CAN 2.0B 规范一致(如果在仲裁中发生隐性位传输期间监控显性位不是位错误)、这意味着如果我理解正确、LEC 应该读为1 ("填充错误")。 我是吗?

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

    您好!

    感谢您的提问。 请在下周内回复。


    此致、

    Vince

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="329034" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165407/f28m35h52c-can-lec-reports-bit1-error-during-arbitration "]我看不到发送器的错误计数器递增。

    在正常情况下、这应该会导致一个确认错误(ACKE)、这是因为没有其它节点提供 ACK。 TEC一直增加到128、并在那里停止。 节点不会脱离总线。  

    如果您包含端接电阻器、会出现什么行为?

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

    如果我包含端接电阻器、则行为如您所述:

    • 传输误差递增至128、并停止;
    • LEC 读数3:ACK 错误;
    •  如 CANStatusGet ()所示,其它标志被发出:EWarn 和 EPass (Boff 未被升起)。

    我的问题 是、发送器在仲裁过程中监控到隐性填充位为显性位(如示波器屏幕截图所示、即使传输失败、TEC 也不会递增)、LEC 不应指示 "填 充错误"而不是 "Bit1 Error"?

    我得到、除了 LEC 指示的值、CAN 模块的工作状态应该是一样的。 这只是一个问题、我是否理解了它的行为、并正确地解释了这种情况下发生的情况。 LEC 指示的值导致了一些困惑、因为我试图将正在发生的情况组合在一起。

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

    您好 Andre、 Hareesh 是  继续支持这条线程的最佳人选、但不幸的是、他在接下来的几天里已离开办公室。  很抱歉给您带来不便、但您应该在周四之前听到他的回复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="329034" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165407/f28m35h52c-can-lec-reports-bit1-error-during-arbitration ]*可以看到帧起始(SoF)后跟四个初始 ID 位(全部为0、因为 ID 为0x10)、然后需要填充位1。 [/报价]

    填充位在相同值的5个连续位之后插入、而不是您提到的4个连续位之后插入。

    在仲裁过程中、发送的隐性位可能会读回显性状态(因为其他一些节点可能已将总线驱动为低电平)、这将不会触发错误帧。  

    不确定为什么要测试未终止的总线。 这不仅会使上升/下降时间变得混乱、还会由于信号反射而引入误差。 如果您的目标只是创建一个错误条件、那么这是可以的。 您可能需要查看 www.ti.com/lit/SPRACQ3 以了解一种更确定的方法来注入错误。

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

    您好、感谢您的回复。

    填充位确实发生在相同值(显性)的5个连续位之后。 第一个显性位是帧起始位、随后是4个第一个 ID 位、全部为显性位:总共5个显性位。

    关于 测试未端接总线的问题、测试方案本身并不是促使我寻求帮助的原因。 我只是在熟悉示例时通过断开电缆并读取 CAN 模块状态来执行完整性检查。

    在验证电气信号后、需要了解 CAN 模块的行为、特别是错误和状态寄存器(CAN ES)中的 LEC 域、此时在仲裁域中、作为隐性发送的位被监控为显性位。

    即、无论发生哪种情况、  为什么在仲裁域中被监控为显性的位以隐性状态传输、从而导致 LEC 指示"位1错误"? 如原始文章中所述、我从 CAN 2.0B 规格中了解到这不是位错误。 正如您所说的、它不应 触发错误帧(与我观察到的内容一致)。

    在我展示的情况中、填充错误很可能是导致错误帧的原因、这将解释 TEC 不会递增。

    我非常感谢 SPRACQ3链接、谢谢、我不知道该文档。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="329034" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165407/f28m35h52c-can-lec-reports-bit1-error-during-arbitration/4392833 #4392833"]Stuff 位确实发生在相同值(显性)的5个连续位之后。 [/报价]

    你是对的。 我错过了 SOF。

    [引用 userid="329034" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165407/f28m35h52c-can-lec-reports-bit1-error-during-arbitration/4392833 #4392833"]  为什么在仲裁字段期间传输的位为隐性且被监控为显性位会导致 LEC 指示"Bit1 Error"?[/quot]

    我同意不应发生这种情况。 您是否在示波器中捕获了 CANTX 和 CANRX 引脚活动、以验证您对传播延迟的假设是否确实正确?

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

    我不清楚您的意思是"我对传播延迟的假设"以及它们是否正确。 如果我已经检查过传播时间段等特定位时序配置是否正确、您是说吗? 如果是这种情况,我没有详细介绍位时序,而是依靠对 CANBitRateSet()的简单调用。

    µs µs、CAN BTR 的读数为0x344E、CAN_CLK=75MHz、即500kbps、tq = 0、2 μ s、位 µs µs µs = 2 μ s、TSEG1 = 1 μ s、TSEG2 = 0、8 μ s、SJW = 0、4 μ s。

    以下是相同场景的示波器截图、但 在 CANTX 上:

    在 CANRX 上(不 是同时获取 CANTX 屏幕截图):

    这是 CANRX 的第二个屏幕截图、与上面相同、仅移动"光标1"以显示上升时间。

    在我看来、CANRX 实际上提升得太接近了、只有300ns、直到下一个位时间。

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

    根据传播延迟、我指的是"总线传播延迟"。 这就是我建议在同一个示波器快照上捕获 CANTX 和 CANRX 引脚的原因。  

    另一个方面是、我对我们在这里关注的内容以及您对我的期望信息有点失望。 此模块已由第三方进行一致性测试、以确保其符合 CAN 协议规范。 这不仅包括器件的正常运行、还包括各种错误条件下的模块行为。  

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

    你好。 感谢您的回复。

    我感谢您的帮助、我意识到不合格是导致这种行为的最不可能的原因。 我不是这个问题的专家、我希望在这里发帖、是有人能够向我澄清我所看到的行为或指出 我的解释中的错误。

    很抱歉 我之前的示波器截图。 以下是新的、在与之前相同的条件下(单独节点连接到 未端接总线或存根)同时捕获 CANTX (CH1)和 CANRX (CH2)引脚。

    隐性->显性转换的较高分辨率快照:

    显性->隐性转换的较高分辨率快照:

    我可以看到 这些快照对于理解为什么 应该为隐性的位被监控为显性位以及反之非常重要。

    回到我下面的问题、这些是否有助于澄清"仲裁场中的一个位实际上是以隐性状态传输的、被监控为显性状态"?

    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165407/f28m35h52c-can-lec-reports-bit1-error-during-arbitration/4393184 #4393184"]
      为什么在仲裁域中一个被监控为显性的位作为隐性发送而导致 LEC 指示"Bit1 Error"?

    我同意不应发生这种情况。

    [/报价]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="329034" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165407/f28m35h52c-can-lec-reports-bit1-error-during-arbitration/4396470 #4396470"]"仲裁字段期间发送的位为隐性、被监控为显性"实际上在这里发生?

    我认为最后一个示波器截图显示了这一点。