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.

[参考译文] TMS320F2.8377万D:CPU2可提供偶尔的错过消息

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/573414/tms320f28377d-cpu2-cana-occasional-missed-message

部件号:TMS320F2.8377万D

您好,

我有CPU2在1MHz高精度时钟上处理Cana IO。  我正在处理一个2016 Mac工作簿,该工作簿在Parallels之上托管Windows 10安装。  

要测试通信, 我使用的是PCASN-USB Pro和PCAN-Viewer。  我让PCAN查看器每隔1毫秒发送一条消息。  我注册了16个CAN对象(8 Rx,8 TX)。  其中我只使用了2。  PC到C2000的消息ID为0x200.0002万。  响应消息ID为0x100万。  

下面是我想知道的问题:我 找到偶尔错过的消息(按10^5的顺序为2-6)。  我觉得奇怪的是,当我将CAN消息接收置于ISR上,接收状态中断并累积它们时,我会得到每个入站消息的状态中断,但是,我不会得到接收数据的消息对象的中断。  我认为排除测试作为错误源是合理的,因为接收状态中断始终与测试硬件/软件发送的消息数一致。  在什么情况下可以获得状态中断,但不能获得消息中断?

我尝试了几种方法来进一步确定问题的特点:

—在每次发生接收状态中断时,向CAN核心查询所有接收到的消息。

—禁用接收中断,并查询主循环中的CAN核心。  

—将传输速率更改为2毫秒。  

发送10^6条消息@ 2毫秒后,我没有显示丢失消息。  所以问题似乎与时间有关。  理论上,我应该能够每秒发送8K消息。  因此,总线应仅在25 % 的时间内处于繁忙状态。  

我希望更好地了解这种情况如何发生,以及如何防止这种情况发生。  也许更精通此目标的CAN IO的人可以提出此问题的考虑因素。  

非常感谢!

斯蒂芬

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

    有趣的问题。 只是为了澄清,消息对象是否总是接收数据? 即,您是否只是错过了MO中断或数据也会丢失?

    您是否尝试过通过CAN_INT寄存器将消息对象中断分配给其他中断行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    亚当
    使用ISR方法发现问题后,我尝试通过主循环中的轮询读取所有有效的消息对象。 结果相似。 所以,我认为这意味着数据丢失了。

    还值得注意的是,寄存器或错误中断中没有任何内容可以指示任何问题。 令人困惑的是,CAN核心必须了解某个级别上的"缺失消息",因为接收状态中断计数高于接收的消息数。

    我不清楚如何只将消息对象中断路由到CANA1_INT而不是CANA0_INT。 我尝试将CANA1_INT绑定到另一个ISR,在PIE控制寄存器中启用它,并启用全局CAN中断1。 没有调用相应的ISR。 想法?

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

    好的,如果数据不在消息对象中,那么更改中断行就不重要了。 为了便于将来参考,还需要在CAN_IP_MUX21寄存器中设置相关位,并确保在CAN_GLB_INT_EN中设置了启用位。

    错误的稀少性和对传输速率的依赖性使我怀疑总线布线或位正时配置有问题。 如果消息ID字段中出现位翻转,模块仍将接收消息,但由于ID不匹配,该消息不会存储在邮箱中。

    由于您是从PCAN发送数据,我们可能会假设传输比特率正确。 如果您张贴振荡器频率,PLL配置和可位定时寄存器值,我可以检查它们。 另外,确保线路的两端均使用120欧姆电阻器端接。 根据其手册,PCAN没有内置。 也可以尝试使用不同的电缆。

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

    亚当

    感谢您对CAN_IP_MUX21的提示。  

    我在PCAN端制造了一个带有120欧姆电阻器的新双绞线。 我验证了两端的120欧姆电阻。  不幸的是,结果是一致的。  

    CAN时钟设置为以1MHz运行。  系统时钟设置为以200MHz运行。

    时钟是否实际以1MHz运行,这在我的脑海中仍然是一个问题。  我们以前遇到过时钟问题。  由于TMS320F2.8377万D的CAN时钟存在已知问题,EE决定使用外部时钟。  这似乎解决了问题。  我无法想象这是如何实现的。  但我会问是否相关。  

    ClkCfgRegs (CPU1):

    CPU2的ClkCfgRegs全部为0。  

    CanaRegs (CPU2):

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

    亚当。  我不认为这些登记册的图像已经张贴了。  也许这会起作用...

    ClkCfgRegs (CPU1):

    CanaRegs (CPU2):

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

    [更正]

    抱歉,我说话不正确。 您可以选择位时钟;它使用SYSCLK,它已经从外部振荡器获得。


    我们有一个应用手册和电子表格计算器,用于CAN定时位设置和振荡器容差。 这可能有帮助:

    www.ti.com/.../sprac35.pdf

    www.ti.com/.../getliterature.tsp

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的位计时设置看起来不正确。 如果SYSCLK为200 MHz,BRP为9+1=10,则CAN位时钟为20 MHz。 要获得每秒1 MB的速度,您需要每位20个时间(quanta)。 但同步句段的Tseg1 + Tseg2 + 1仅为18。 这将提供1.111 MB/s 尝试将Tseg2更改为5,看看是否有帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    亚当。
    感谢您观看此内容。 除非我读错TRM,否则这些值应解释为(seg1 + 1)+(seg2 + 1)+ 1 = 20。 为了让人产生怀疑,我将Tseg2提高了2。 使用PCAN的1MHz标称比特率通信完全失败。 也许应该通过范围进行验证,和/或将CANA写入CANB测试,以查看我们是否可以排除/选择PCAN作为罪魁祸首。 想法?

    谢谢!
    斯蒂芬
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哇,我今天真的离场了。 很抱歉我的困惑! 您对寄存器值的看法是正确的。 我想到的是I2C位计时。

    示波器绝对是检验两端比特率的好方法。 从MCU发送帧将允许您验证它所期望的比特率。 我建议从MCU上的RX引脚范围界定开始,因为它始终会提供总线的实际状态。