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.

[参考译文] CCS/TMS320F28377S:F28377s 可偶尔超时进行多机器通信

Guru**** 2479465 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/792501/ccs-tms320f28377s-f28377s-can-multi-machine-communication-occasionally-times-out

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

现在我使用 CAN 通信来连接16个器件、所有这些器件都是 F28377板、运行相同的程序、但通常会出现通信超时、总线负载为160帧/秒、端子电阻为120欧姆、波特率为500k。 采样点为80%。 两个器件之间的通信没有问题。 超时次数越多、超时现象发生的频率就越高。 司机是按照官方程序完成的。 解决方案是什么?

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

    请说明“超时”的含义。 您是否指的是总线关闭情况? 如果是这样、您应该会在总线上看到很多错误帧。 您是否有显示总线活动的 CAN 总线分析器?

    [报价]两个器件之间的通信没有问题。[/报价]

    您是否说总线上只有2个器件时没有问题? 或者、您是否说只有2个器件在总线上通信时没有问题、即使其他14个器件在总线上仍然存在? 正在通信的两个节点是否位于总线的两端?

    [引用]超时次数越多,超时现象就越频繁。 [/报价]

    很抱歉,我不明白你在上述发言中想说什么。

    请查看 SPRA876中的调试检查清单。

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

    当总线上只有两个器件时、长期通信是正常的;当器件逐渐添加时、偶尔会有数据长时间无法接收、但 CAN 分析器可以接收数据。 如果超过100ms 未接收到数据、则会将其视为超时。 如果数据连续超时10次、则无法通信、但 CAN 分析仪获得的数据仍然正常。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CAN 总线分析仪接收数据的事实通常告诉我在通信过程中没有错误。 因此,我们在这里不处理硬件或位定时问题(我假设您在分析仪上没有看到任何错误帧)。 消息是否会丢失? 可能是代码读取接收到的消息的速度不够快、导致消息被覆盖。 也许这被解释为"未收到消息"? 您是否检查了 RxMsgLst 标志?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到官方例行程序写过 CAN 总线通信错误的处理没有完成:
    //读取控制器状态。 这将返回状态字段
            //可以指示各种错误的错误位。 错误处理
            //本示例中不是为了简单起见。 请参阅
            // API 文档,了解有关错误状态位的详细信息。
            //读取此状态的操作将清除中断。

    抱歉、这里应该怎么做、每个位代表什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您指出的例程仅在总线上存在错误条件时适用。 在您的情况下,似乎没有任何总线错误。 请查看您的应用代码中的时间安排、特别是代码是否及时读取/服务收到消息。


    [报价]每个位代表什么?[/报价]

    请参阅 TRM。


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请告诉我们如何处理 ISR 状态信息? 我们没有发现任何有用的信息。
    如何逐步处理状态? 你有常规程序吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Driverlib 示例展示了如何处理发送和接收中断。 错误条件的处理取决于应用。 Driverlib 中没有示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    16个器件的 CAN 总线通信是否有良好的设计? 现在不太确定问题在哪里、应用层还是驱动程序层、是否有合适的判断方法? 由于在总线上只有两个器件时通信是稳定的、因此三个或更多器件不是很稳定。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否查看了 SPRA876中的调试检查清单?

    [报价]是否有适合16个器件 CAN 总线通信的良好设计? [/报价]
    这是一个很难回答的问题。 每个网络都是不同的。 适用于一个网络的参数可能不适用于另一个网络。 变量包括节点数、总线长度、位速率、传播延迟等


    [引用]现在不太确定问题所在是什么、应用层还是驱动程序层、是否有合适的判断方法? 由于在总线上只有两个器件时通信是稳定的、因此三个或更多器件不是很稳定。 [/报价]
    您需要首先确定是否存在硬件问题或软件问题。 尝试一个非常简单的示例、其中总线两端的节点彼此通信。 当总线上只有这2个节点时、请尝试执行此操作。 一旦工作正常、则逐步添加其他节点、但仍然只允许总线任一端的节点进行通信。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    什么是 SPRA876? 我没有这份文档。 我可以将其发送给我吗?电子邮件:dlshypshb@163.com

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    www.ti.com/.../spra876b.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //读取 CAN-A 中断状态以查找中断原因
    状态= CANIntStatus (CAN_BASE、CAN_INT_STS_CAUST);
    
    //如果原因是控制器状态中断,则获取状态
    if (status = CAN_INT_INT0ID_STATUS){
    //
    //读取控制器状态。 这将返回状态字段
    //可以指示各种错误的错误位。 错误处理
    //本示例中不是为了简单起见。 请参阅
    // API 文档,了解有关错误状态位的详细信息。
    //读取此状态的操作将清除中断。
    //
    STATUS = CANStatusGet (CAN_BASE、CAN_STS_CONTROL);
    
    //检查是否发生错误。
    if (status = CAN_ES_RXOK){
    STATUS = CANStatusGet (CAN_BASE、CAN_STS_NEWDAT);
    if (status =(1ul<<(rx_obj_id-1))){
    状态= dcsRx;
    }
    如果(rx_objs 和 status){
    obj_mask = status;
    状态= dcsRxs;
    }
    如果(0!= status){
    obj_mask = status;
    State = dcsErrs;
    } 

    --------------------------------------------------

    我有这样一段代码、CAN_STS_CONTROL 寄存器的值返回为 CAN_ES_RXOK、然后 CAN_STS_NEWDAT 寄存器的值返回为0。 我看到 f28377数据表显示、当没有写入数据时、返回值为0、为什么会出现? ? 如何解决这一问题?

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

    CANES 寄存器中的 RXoK 位置位、即可得知节点总线上监控了一个帧、没有任何错误。 即、节点目睹了一个完整的帧而没有错误。 这并不一定意味着帧被接收到其中一个接收邮箱中。 您需要监视邮箱 RAM 以验证您所期望的帧是否已在您所期望的 MBX 中被实际接收。 我建议您在开始时不要使用任何类型的筛选。 并首先使用轮询、而不是中断。 一旦您知道邮箱正确接收了数据、您就可以添加滤波和中断、前提是您的应用有此保证。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有听到您的声音、假设您能够解决问题。