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.

[参考译文] TM4C129XNCZAD:CAN 发送器错误

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/935540/tm4c129xnczad-can-transmitter-error

器件型号:TM4C129XNCZAD

我的 CAN 总线在 TM4C129XNCZAD (15个份额/位、TSeg1、TSeg2、SJW = 13、1、 1 (寄存器值+1))和一个单端(TXSPG、RXSPG)的 SN65HVD230DR 以及一个 LM3S2793 (10个份额/位、TSeg1、TSeg2、SJW = 8、1、 1 (寄存器值+1))和另一端(TXTCU、RXTCU)的 SN65HVD230DR。  我正在监控 RX 和 TX 引脚、因此我不加载总线。  这是一条长总线;我发现500ns 和600ns 总环路延迟(从 Tx 到 Rx)也存在同样的问题。  

下面是显示错误的消息、然后在下一次尝试时成功传输:  

这是第一个数据包末尾的缩放:  

TXSPG 的 CRC 定界符的末尾非常接近屏幕中心。  就在屏幕中间、TXTCU 用一个 ACK 进行响应、该 ACK 在沿传输线路向下行驶后被 RXSPG 检测到、然后 TXSPG 在同一位时间内抛出活动错误。  为什么?  

根据博世标准,我看到以下内容:  

这是一个位时间太早、不能成为 Ack 错误(标志从下一位开始、而不是在 Ack 时隙期间)。  

这两个位太早、不能成为 CRC 错误(标志从 Ack 分界符后面的位开始)

在仲裁和 Ack 期间、位错误有一个例外、因此它不是这样。  

CRC 中的先前位为0b10110110 (0xd6)、因此它不是填充错误。  

这只会导致格式错误(SOF、EOF、ACK 定界符和 CRC 定界符、符合 sloa101b.pdf)。  SOF 之前有很多位、ACK 和 EOF 仍在未来、因此时序使其看起来像是 CRC 形式错误、但我看不到它。  

我缺少什么?  

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

    TM4C129的 LEC 中设置了什么错误代码?

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

    问得好。  数据表中有一些有趣的措辞:  

    ' LEC 位域保存的代码表示 CAN 总线上最后一次发生的错误的类型。 这种情况
    当一个消息被无错误地传输(接收或发送)时、此位域被清除。
    CPU 可以写入未使用的错误代码0x7来手动将该域设置为无效错误
    以便稍后可以检查它是否有更改。"

    在上面的示例中、左侧数据包有错误、右侧数据包无错误地传输。  粗体语句是否意味着我必须在右边的数据包传输之前检查 LEC?  这意味着我需要在 LEC 上设置一个中断来检查这一点。  

    使用"最后一个错误代码"的名称、似乎该错误将是静态的、直到它被0x7读取和覆盖。  

    作为示例、中的寄存器列表  显示了 LEC 值0x5。  是在中断上捕获的吗?  

    似乎是时候拉出调试器了!  

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

    是的、它需要启用 CAN 状态中断并在状态发生变化时检查 LEC。  

    查看您的逻辑分析仪图片、您会发现来自 TCU 的 ACK 到达 SPG 的时间太晚。 SPG 会将其视为表单错误。 这是最坏情况下的时序路径、因为延迟加倍。 帧开始时从 SPG 到 TCU 的延迟、由于频率差异而累积的误差、然后从 TCU 返回 SPG 进行确认的延迟。 您的巴士是否超过30米?  

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

    谢谢。  

    我在20m、25m 和30m 总线上看到了这一点、这是两个器件之间的点对点。  我已将控制寄存器设置为长延迟(15个份额/位、TSeg1、TSeg2、SJW = 13、1、 1 (寄存器值+1)。  我将最早采样点置于800ns 的计算结果。  在最坏的情况下、通过收发器和总线向下的总延迟低于660ns (我的100 Ω 传输线路慢于5ns/m)。  我应该有超过140ns 的裕度、但性能仍然是间歇性的、如图所示。  

     TM4C129XNCZAD 和 LM3S2793器件中增加了多长时间的延迟?  我尝试通过发送单个显性位来进行量化、并希望稍后6位的有效误差帧加上内部延迟、但我无法获得一致的结果(我希望外设设置会干扰此测试)。  此技术在博世 PDF 的第9页上进行了介绍,该 PDF 的标题为“CAN 位定时配置”。  

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

    如果通过收发器并向下传输总线的最坏情况为660nS、则对于确认位、最坏的延迟为1320nS。 接收器时序与发送器时序相距660nS (帧开始到达接收器的时间)、另一个660nS 的响应信号返回发送器。 TM4C 和 LM3S 的接收引脚上都存在时钟同步延迟。  它是一个系统时钟周期。

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

    抱歉、回路时序低于660ns、因此在总线下每条线路的时间为320ns。  这显示为从 RxTCU 到 RxSPG 或反之(减去一遍通过 HVD230接收器的时间延迟、~44ns)。  。  

    一个系统时钟意味着我增加了29ns (1/120MHz + 1/50MHz)。  我应该还有很好的裕度。  

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

    哪个器件(TM4C129或 LM3S)是 SPG、哪个是 TCU? 从您的逻辑分析仪屏幕截图可以看到、来自 TCU 的确认将在确认窗口中达到 SPG 约60%。 TCU 正在传输、SPG 正在发送确认信号时、您是否遇到过错误?

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

    是的、TM4C129位于 SPG 端。 60%是正确的、这就是为什么我将 CANBIT 参数设置为如此高(15个份额/位、TSeg1、TSeg2、SJW = 13、1、 1 (寄存器值+ 1))、因此我将以80%的采样率进行采样。  我不确定我是否还有来自 Stellaris 端的错误。  TM4C129偶尔会遇到足够的错误、以至于它会使发送器脱离总线、这正是我集中精力的地方。  

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

    您能否提供配置后 TM4C129 CAN 寄存器的屏幕截图?

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

    不幸的是、此问题的优先级有所提高、因此我不会再回到这个问题上一段时间。  当我有更多数据时、我可以启动一个新线程。  感谢你的所有帮助。