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.

[参考译文] TMS570LS3137:CAN 消息丢失

Guru**** 2479285 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/693273/tms570ls3137-can-messages-lost

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

您好!

我正在使用 TMS570LS31HDK。 我正在 DCAN1和 DCAN2之间实施 CAN 网关。 当我使用一个 CAN 来接收消息、另一个 CAN 来发送时、所有操作都是完美的。 问题是、当我使用两个 CAN 通道来发送和接收消息时、10%会丢失。

提前感谢

此致、

Dani Gomez

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

    您好!

    只要 CAN 总线空闲、任何单元都可以开始发送一条消息。 如果2个节点 同时开始传输消息、则使用 ID 通过按位仲裁解决总线访问冲突。  您是否对2个 TX MSG 框使用相同的 ID?  

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

    您好!

    否、我对2个 TX MSG 框使用不同的 ID。 我使用 HALCoGen 提供的函数 updateId。 在配置中、我使用不同的 ID 配置 TX 框。

    此致

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

    我已经为输入数据配置了2个邮箱、为两个 CAN 中的输出数据配置了2个邮箱、并使用固定的 ID。 我每10ms 发送一次 CAN 帧、我可以检查一下、如果我在其他邮箱中有一个优先级消息(较低的 ID)、它会丢弃其他消息。 如果总线负载为10%、这怎么可能?

    提前感谢、

    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这只是一个猜测。
    您的传输方式可能会引起冲突。 您能否为两个端口创建一个消息队列、并确认'TX 已发送? 在按下下一帧之前是否已触发中断?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您的回复。 如何为 TX 创建单个队列? 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不调用"canTransmit";而是将 canTransmit 的三个参数加载到数组中。 然后循环以发送数组值、但等待 TX 队列在任一邮箱 ID 上都没有待处理的 TX
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我使用此代码创建队列:

    while (1){
    对于(i = 0;i < 50;i++){
    if (txFrames[0])[i]==1)
    {
    while (canTransmit (canREG1、txFrames[1][i]、&txFrames[2][i])=0);
    txFrames[0][i]= 0;
    }
    否则、if (txFrames[0][i]=2)
    {
    while (canTransmit (canREG2、txFrames[1][i]、&txFrames[2][i])=0);
    txFrames[0][i]= 0;
    }
    }
    

    我在 canMessageNotification 函数中填充 txFrames 数据。 此代码问题仍然存在。 有什么建议吗?

    提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    除非您修改了 canTransmit 函数、否则每个调用都仅检查该特定 canREG[1][2]的状态。 我建议确保两个端口都是清晰的。
    此外、您拥有的代码将创建一个硬件应力测试条件。 一些丢失的帧可能只是限制了您的数据和您要求它执行的操作。