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.

[参考译文] TMS320F28335:CAN 模块无法正常工作-有多个问题

Guru**** 2611705 points
Other Parts Discussed in Thread: TMS320F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/691560/tms320f28335-can-module-not-working---multiple-questions

器件型号:TMS320F28335

大家好、TI、

一段时间前发布了有关 SCI A 的问题、得到了非常有用的响应! 因此、在这里、我又经历了多日的努力、通过 TMS320F28335来解决我们定制板上的 CAN 模块问题。 我无法获取示例代码(eCAN-A_TO_b_xmit)来工作。 一些概述:

-具有适当端接和 TJA1040 CAN 收发器的定制板

-网络中的其他节点目前只是具有 CAN 屏蔽功能的 Arduino

-该 Arduino CAN 屏蔽在不同波特率下工作正常(与其他 CAN 网络完美配合使用、包括 NXP 芯片 MCP5744和摩托车 AIM 垃圾记录器)

- Arduino 不过滤接收器 ID、因此所有消息都将显示在串行监视器上。

迄今为止的问题:

CAN 时钟频率是多少? PDF (spru074f)规定为150MHz 或100MHz、但如果它链接到标准外设时钟(如 SCI)、则永远不可能达到150MHz、并且我将以75MHz 外设时钟运行

-同一 PDF (spru074f)中的表3-1:CAN 模块时钟列到底是什么意思?

-使用示例代码是否存在任何已知问题? 问题:它在 while 循环等待确认时挂起(在本例中、另一个节点 Arduino 应发送确认;我对吗?)。 删除 while 循环没有帮助。 我在 CAN 总线上根本看不到任何使用示波器的活动。 在 InitECan()之后,CAN-HIGH 和 CAN-LOW 之间的电压差移动到3.3V。

感谢您的任何意见! 是否有任何建议需要采取哪些步骤? 提前感谢:)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    快速添加有关 CAN 时钟、BTC 时序寄存器和波特率的信息:
    -用于以下值的示例代码:
    * ECanaShady.CANBTC.bit.BRPREG = 4;
    * ECANaShady.CANBTC.bit.TSEG2REG = 2;
    * ECANaShady.CANBTC.bit.TSEG1REG = 10;

    -在 spru074f 中使用表3-1,会导致波特率很高。 因此、我将 BRPREG 调整为9和19 (两者都尝试)、没有效果。 似乎示例代码的值不会相加。 我是对的吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否尝试过自检示例(eCAN-back2back)? 这不需要任何外部 CAN 节点的存在。

     

    我的 app.note 中还有一个简单的传输示例(SPRA876)、您可以从 www.ti.com 下载该示例。 您可以通过运行此代码来检查 CANTX 引脚上的活动。 这将有助于根据 SYSCLKOUT 频率验证比特率是否正确。

     

    您说"网络中的其他节点现在只是具有 CAN 屏蔽功能的 Arduino、"但您没有提到 CAN-A 和 CAN-B 是否相互连接、这对于示例代码的工作非常重要。 如果 Arduino 配置为正确的比特率、我同意它应发送 ACK。

     

    在这个器件上、CAN 时钟频率为 SYSCLKOUT/2。 因此、如果您以150MHz 的频率运行器件、则 CAN 时钟频率为75MHz。 请参阅 SPRS439N 第173页的图6-29。 对于 F28335、您应该使用的是 SPRUEU1、而不是 SPRU074F。 SPRU074F 的表3-1是指 TMS320F281x 器件、其中 CAN 时钟与 SYSCLKOUT 相同。 请参阅 SPRUEU1中的表3-1、其中给出了75MHz CAN 时钟的参数。

     

    示例代码没有已知问题。 它应该"按原样"工作。 与 app.note 中的示例代码一起使用。 唯一的条件(对于使用自检模式的代码以外的代码)是至少有一个另外的节点提供 ACK。 如果 CAN-B 和 CAN-A 相互连接、则会自动进行处理。 在您的情况下、您必须确保 Arduino 配置正确。

     

    您提到 CAN 总线上没有任何活动、这让人感到困惑。 即使 ACK 不是来自另一个节点、您也必须看到来自 CAN-A 的重复传输 您是否愿意分享原理图的 CAN 部分? 您可以将其私下发送给我。

     

    示例中使用的 CANBTC 值正确

     

    75MHz/[(4+1)*(2+10+3)]= 75MHz/(5 * 15)= 1Mbps。 请勿更改这些值。

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

    您好、Haresh、

    非常感谢您的广泛回答! 我又花了1、5天的时间在电路板和开发板上对您的 TX 传输环路感到困惑。 获得正确的 eCAN pdf 非常有帮助、感谢您注意到这一点!

    事实证明、问题所在:我们的 CAN 模块位于输出 PCB 的 HV 侧、中间有一个隔离栅。 高压地区的电源显然不能正常工作。 这也会影响 TX 线上的信号、该信号一直被拉高。 但我很高兴示例代码现在能够完美地适用于我们的电路板!

    感谢您的参与和响应。

    Jeroen

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

    Jeroen、

       很高兴问题得到解决。 感谢您迅速关闭帖子。