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.

[参考译文] TMS320F28032:CAN 数据发送和接收问题

Guru**** 2512295 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1256643/tms320f28032-can-data-sending-and-receiving-problem

器件型号:TMS320F28032

您好,TI 专家:

   我们的木乃伊产品被使用 TMS320F2803x、现在 遇到了一个关于 CAN 通信的棘手问题

   我们发现、当系统中的许多模块主动通过 CAN 总线投射信息时、总线中的模块将丢失其他模块的信息,

   当前一模块发送的信息与当前发送模块的 CAN 数据帧间隔为1ms 时、发送模块无法获取前一模块发送的数据信息,即使我们使用中断来查询 CAN 邮箱信息。总线,PCAN 可以获取数据,同时、 系统中其他不发送信息的模块可以短间隔接收这两个模块发送的数据帧。

   当接收未完成(数据未写入 CAN 邮箱)且 CAN 模块接收 CPU 的指令来发送 CAN 信息时、DSP 的 CAN 外设是否存在、从而导致接收到的数据丢失?

    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
       我们发现,当系统中的许多模块主动通过 CAN 总线投射信息时,总线中的模块将丢失其他模块的信息,

    这不可能发生。 CAN 采用非破坏性仲裁。 一旦节点丢失仲裁、它就不再参与通信、除了接收和确认帧之外。

    当前一模块发送的信息与当前发送模块的 CAN 数据帧间隔为1ms 时,发送模块无法获取前一模块发送的数据信息,即使我们使用中断来查询 CAN 邮箱信息,总线。PCAN 可以同时获取数据, 系统中其他不发送信息的模块可以接收这两个模块发送的短间隔数据帧[/报价]

    这是软件问题。 可能与传输时序有关。

     当接收未完成(数据未写入 CAN 邮箱)且 CAN 模块接收 CPU 发送 CAN 信息的指令时、DSP 的 CAN 外设是否存在、从而导致接收到的数据丢失?

    您询问如果在接收数据的同时启动传输、接收到的数据是否会丢失。 这不太可能发生、原因有两个:(1)传输只能在总线空闲时间为11位时间后启动。 即使在1Mbps 时、这也等于11us、在60 MHz 时相当于660个 CPU 时钟周期。 这个时间对于 CAN 模块将接收到的数据复制到接收邮箱的时间足够了。 (2)传输和接收缓冲器是分开的。

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

    感谢您的回复!

    我需要添加2个附加信息、1)投射到这些模块上的 CAN ID 完全相同、但数据字段不同;2)我们的 CAN 波特率为125K。

    那么、如上所述、为什么发送消息的模块无法接收与之非常接近的前一个数据帧? 我们已经通过中断(10us 调度中断)接收邮箱信息、但是使用其他2个备用邮箱没有帮助。 我们使用了 PCAN 来确定 CAN 总线上这2个帧的数据确实非常接近、这是什么原因?

    似乎没有办法在软件级别进行优化、有什么建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这些模块上抛出的 CAN 的 ID 完全相同,但数据字段不同;

    如果上述情况意味着在具有相同 MSGID 但具有不同数据字段的总线上同时传输两个帧、则这是不允许的。  

    似乎没有办法在软件级别进行优化,有什么建议吗?

    如前所述、这可能是软件问题。 遗憾的是,我不能帮助,因为我不知道传输的确切顺序和同时涉及的时间。 这里没有出现任何硬件问题。

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

    但遗憾的是、这个问题确实发生在我们客户的应用领域。 如上所述、我们在中断级别设计了调试代码、以读取邮箱信息、 然后将邮箱信息写入 RAM、我们读取 RAM 数据以发现邮箱级没有接收到前一个模块的数据、因为我们的发送间隔相对固定、 这会导致发送信息的模块未接收到前一个相邻模块主动抛出的数据帧。 邮箱级别不接收数据、我们的软件不能执行任何操作。

    在设计 DSP 时、我们是否对 CAN 进行了类似的测试? 我们目前都知道2803x 和28004x DSP 平台上都有这个问题、

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

    2803x 中的 eCAN 模块已经有将近25年的历史了、而且我们已交付数百万个包含此 CAN 模块的器件。 尽管不如 eCAN 模块旧、但我们已交付数百万个具有 DCAN 模块的器件、这些器件存在于 F280049中。 在 CAN 协议中不会发生消息丢失、也不会出现某种形式的通信错误。 如果没有错误被标记、而消息仍然看起来是丢失的、那么需要检查应用程序代码以确保中断得到及时处理、从而读取接收到的消息。 如果您的代码无法及时处理中断、您可以利用 OPC 机制(我在 SPRA876中给出了一个示例)。 很抱歉、我无法就此问题提供进一步帮助。

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

    我们认为 DSP 的 CAN 模块应该没问题。 我们只是想知道是不是某种机制导致了问题、并且我们还与当地的 TI FAE 联系、 FAE 之所以给我们、可能是因为 CANID 和、仲裁失败、当数据域冲突时、胜出的模块数据将继续被发送、 而失去竞争对手的模块将产生误码并进入自动重传阶段,在这个过程中,不能进入接收模式,导致无法接收到竞争对手的数据。 这会发生吗?

    未通过数据竞争的模块产生的位错误是否会破坏赢得竞争的数据? 在此期间、我们没有在 PCAN 上发现错误

    再次感谢您的病人答复!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当数据域冲突时,赢得竞争的模块的数据将继续发送,[/报价]

    如前所述、 无法 网络中有两个节点传输同一个 MSGID。 两个节点都将"赢得"仲裁并继续传输。 但是、一旦在数据字段期间发送了冲突的位、就会检测到位错误、并且正在进行的帧将与错误帧一起销毁。

    和失去竞争对手的模块将产生位错误并进入自动重传阶段,

    不正确。 仲裁只在 MSGID 字段上进行、而不对数据字节进行。 两个节点都将尝试重新传输、将发生相同的错误、并且这将反复不断。

    无法进入接收模式,导致无法接收竞争对手的数据。 这是否会发生?

    在这场比赛中没有"赢家"。  

    失败的模块产生的位错误是否会破坏赢得竞争的数据? [/报价]

    框架确实将被摧毁,但这里没有赢家或输家。

    在此期间我们没有在 PCAN 上发现错误

    这是不可能的。 您应该已经在 PCAN 上看到错误帧。 如果没有、就会发生其他情况。  

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

    好的,正如你分析的,在数据域中没有赢家,我们推测它可能是另一种情况,如 A、B 两个节点冲突,然后 A、B 两个节点都开始自动重传," A "第一次重传, 然后"B"立即重新传输,我想与您确认,"B"可以在等待重新传输时收到 A 的信息吗? 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    A"先重新传输,然后立即重新传输"B",

    在这种情况下、 A 和 B 将完全同时重新传输、并且该过程将重复。