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.

[参考译文] AM3359:CAN 环回示例问题

Guru**** 2585275 points
Other Parts Discussed in Thread: AM3359

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633462/am3359-can-loopback-example-issues

器件型号:AM3359

尊敬的团队:

我的一位客户 的 ICE v2评估板(Sitara - AM3359)存在以下问题

请帮我们解决这个问题。

===========================================================================================================================

目前、我正在尝试运行 SYS/BIOS 工业 SDK 2.1.0.1中包含的 CAN 环回示例。 很遗憾、我在这个示例项目中遇到了一些问题、因此我希望您能为我提供一些指导、帮助我了解和克服这些问题。 我们的开发套件包含一个带有 AM3359处理器的 ICE v2评估板。 我发现的问题如下所述。

 

  1. 我不得不注释一些函数调用、这些函数调用标识了运行固件的电路板和处理器、因为它们会在无限循环中挂起。 我只是确保这些函数调用不会设置配置数据结构的成员(否则、我会手动设置它们、以获取电路板和处理器的值)。 这根本不是问题、但我认为值得提及–我希望我不会中断任何事情。

 

  1. 采样程序要求在回送模式下发送一到十个数据帧。 在介绍数据后、似乎什么都不会发生。 仅当您暂停程序并再次点击“播放”时,终端上才会显示一些字符。 在几个暂停/播放周期后、输出缓冲器将完全清空。 它是否应该在没有用户操作的情况下平滑显示字符?

 

  1. 根据处理器的技术参考手册(TI 文献编号 SPRUH73P)、图 23-6、CAN 模块应将帧发送到 TX 引脚、也是在回送模式下。 我们无法在 CAN 收发器两侧的引脚上看到任何内容。 如电路板硬件原理图中所述、连接收发器旁边引脚的跳线。

 

顺便说一下、我意识到电路板的引脚复用表中没有包含将引脚配置为 CAN TX/RX 的控制寄存器、因此我手动编写了配置:

 

* CAN0_TX_pinmux = PAD_MUX_SELECT_CAN | PAD_PULLUP_DISABLE | PAD_SLEW_CONTINT_FAST;//这会产生0x0009

               

               其中 CAN0_TX_PINMUx 指向0x44E1 0000 (控制模块的基址)+ 0x091C (MII1_TXD3引脚的偏移、该引脚多路复用到 DCAN0_TX)。 不过、Code Composer Studio 的存储器查看器指示该寄存器的正确地址具有偏移量0x0928。 这些地址都不会在 CAN TX 引脚上产生活动。 除了此处所述的更改、我尚未从 SDK 示例中修改 CAN 驱动程序。

 

您能否确认引脚多路复用器的正确偏移? 我是否忘记配置任何其他寄存器以使引脚复用正常工作?

===========================================================================================================================

提前感谢您的帮助、

此致、

Bilal Malik

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、TI 不再支持工业 SDK。 请阅读此论坛的至声明: e2e.ti.com/.../580869
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、

    我是上述客户、面临这些问题。 经过一些研究、我意识到我为 Tx 配置了错误的输出引脚。 现在、我可以在示波器上看到信号。

    不过、我仍在尝试解决第二个问题(UART 缓冲区刷新、CAN 消息仅在暂停调试器后才发送)。AFAIK、第一段(我必须注释掉的函数调用)不应影响、 由于这些调用似乎仅在程序使用的数据结构中设置一些参数、但未映射到外设寄存器。 无论如何、我们将感谢您为进一步研究提供的任何帮助/线索。

    提前非常感谢!

    此致、

    Alejandro

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    同样、很抱歉、TI 不再支持工业 SDK。 请阅读此论坛之上的声明: e2e.ti.com/.../580869
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Biser、

    由于与并行项目中的第三方库存在依赖关系、我们仍在使用过时的 SDK。 无论如何、pdk_am335x_1_0_7中 CAN 示例的代码完全相同、因此我假设它仅在暂停时显示相同的清除缓冲区效果(我不会自己检查: 这些工程随附了包含和库的绝对路径、需要一段时间才能全部更改)。

    是否有任何方法可以使数据"按实际速度"运行、而不必暂停程序以发送 CAN 帧并刷新 UART 缓冲器?

    非常感谢您的参与。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alejandro
    您是否了解了 CAN 帧的相关中断是否被触发?

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

    你好、Lali、

    我已检查 INT[0]、INTPND_X[0]和 INTPND_12[0]位是否置位、这意味着由于第一个报文对象而产生的中断正暂挂。 ES 寄存器只有 TxOK 状态位被置位、所以一切看起来都很好。

    回送应用可以发送1到10之间的帧数。 我已经意识到帧1到 N-1在人们期望的时候发送、但最后一个帧仅在暂停调试器后发送。 如果只有一个帧、它将扮演"最后一个"帧的角色。

    另一方面、终端上显示的用于打印接收到的有效载荷的消息仅以小块显示、当我暂停调试器时、每个小块(例如12-15字节)都会出现。 我还检查了一些"冻结"配置字段、这些字段修改了调试/挂起模式中某些外设的行为、但它们似乎没有设置为停止 CAN 或 UART 传输。 在发送输入的最后一帧之前、所有内容都正常运行。

    您能否解释一下为什么最后一个帧会一直保留到调试器暂停、以及为什么系统在恢复执行后会减慢? 我认为这将解决我的所有疑问。

    非常感谢。
    此致、

    Alejandro

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

    你好、Lali、

    我发现 DMA 导致 CAN Tx 和终端输出缓慢。 如果我切换到 DCAN 手动模式(而不是 DCAN DMA 模式)、最后一个帧将立即发送、并且终端以"全速"继续工作、两者都不必暂停调试器。 当然、我必须做一些小的修改(主要是将数据从源缓冲器复制到 DCAN TX 消息对象、以及从 RX 消息对象复制到目标缓冲器)。

    仅对于几个32位字(我们的实际应用将处理的内容)、我将不使用 DMA。 但是、如果其他人遇到相同的问题、了解问题的根本原因并修复 SDK 的 DMA 驱动程序将会很有意思。

    如果您找到答案、请将其发布在此处吗? 非常感谢。

    此致、

    Alejandro

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

    感谢您在此处发布更新并指出哪些内容对您有用。 我需要在内部检查 DMA 可能导致您看到问题的原因、并在我获得更多详细信息后更新此主题。 谢谢、

    Lali