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.

[参考译文] TCAN4550:TCAN4550 CAN 错误

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1159260/tcan4550-tcan4550-can-error

器件型号:TCAN4550

尊敬的 Peter:

你好。

我设法通过 SPI 与它可靠地通信、初始化工作正常、但在状态寄存器中、我经常会遇到 CAN 错误。 如果我读取 h0820寄存器、我会得到一个 CAN 静默错误。
我已将 CAN 器件连接到 CAN 总线、我正在积极尝试进行通信、但仍没有改进。
我用示波器测量了 CAN 总线、我可以看到、一旦我连接收发器、CAN 总线就会进入空闲模式(CANH 和 CANL 均为2、45V)。

我的问题如下:我设法使 TCAN 进入正常模式(我可以使用0x0800寄存器验证这一点)。 初始化半秒后、SDO 线上的第一个字节为0x00、表示没有错误。 之后、该字节变为0xA0、表示全局错误和 CAN 错误。 读取0x0820寄存器后、我可以确定 CAN 错误是 CANSLNT 错误、表示 CAN 总线上没有任何内容。 我尝试了多种解决方案、但没有成功。

在评估板上、我们尝试从矢量连接多个 CAN 外壳器件、所有器件都运行多种不同的独木舟设置(当然不是同时连接。 如果您在独木舟模拟中打开 KL15、则 CAN 总线上应存在数据。 通过观察 CAN 案例上的 CAN-H 和 CAN-L 引脚可以确认这一点。 一旦我将 TCAN 器件连接到已经激活的 CAN 总线、CAN-H 和 CAN-L 都变为2、46V (通常这意味着 CAN 空闲)。 在整个过程中、我们会不断地为 IC 获取相同的 CANSLNT 误差。 即使我仍然尝试执行上电复位、我们也会得到相同的错误。 器件永远不会进入睡眠模式。

我还尝试将数据发送到 CAN 总线、但我们仍然得到相同的 CAN 静默错误、总线上没有任何内容。 以下是根据数字发现器件提供的 SPI 总线数据:
数据:61 | A0、88 | 00、34 | 00、04 | 00、01 | 00、 A4 | 00、00 | 00、00 | 00、00 | 00、28 | 00、 00 | 00、00 | 00、00 | 00、00 | 00、0B | 00、 CA | 00、00 | 00、00 | 00、00 | 00、00 | 00、
在整个过程中、CAN 总线上仍然没有数据。
遗憾的是、我无法再得到任何进一步的结果、我们似乎得到了相同的 CANSLNT 错误。 您对如何解决此问题有什么想法吗?

我认为 CAN H 和 CAN L 之间的120欧姆电阻器可能存在问题。该电阻器放置在评估板上(R50和 R51串联)。 我尝试移除 J11和 J14以断开这些电阻器、并在那里手动放置一个电阻器、但没有任何变化。


我尝试了很多东西、这在这个线程 TCAN4550EVM 中说过:发送 CAN 消息时出现问题。 我尝试恢复到演示代码、但仍然执行 CAN 静音错误、而 CAN 总线上没有任何内容。 我尝试了一个建议包含此代码的解决方案、以禁用 CAN 无提示错误的可能性:

AHB_WRITE_32 (0x000C、0xFFFFFFF);//删除所有中断标志
AHB_WRITE_32 (0x0830、0xFFFFFFFF);//禁用 CANSLNT 中断
AHB_WRITE_32 (0x0820、0x00100400);//删除 CANSLNT 中断标志

这确实删除了 CAN 静音标志、但我仍然无法向 CAN 总线发送任何内容。 在该主题中,Erik 说,修复 AHB_READ_32()函数后,效果会更好,但我测试了它,它对我来说是有效的。

您对我们如何取得进展有什么想法吗?

(我在 CAN 总线上仍然有一个矢量 CAN 大小写、并且 CANH 和 CANL 之间有120欧姆的电阻器)

请保持安全。


此致、

乔塞尔

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

    Josh、您好。

    我可以帮助您启动并运行它。  您能否为我提供有关测试设置的更多信息?

    您使用 的是 TCAN4550EVM 还是 BOOSTXL-CANFD-LIN 板?

    我熟悉 Digilent Digital Discovery、您是使用它通过 SPI 引脚配置 TCAN4550、还是仅将其用作监控 SPI 数据的逻辑分析仪?  作为后续步骤、如果您将 DD 用作逻辑分析仪、那么您将使用什么来配置 TCAN4550?  它是运行 TI 提供的演示代码版本的 MCU、还是其他内容的 MCU?

    您是否阅读 过《TCAN45xx 软件用户指南》?  本文档介绍了如何配置存储器 RAM (MRAM)以及发送和接收消息、并提供了相关示例。

    TCAN4550使用由 Bosch 开发的 CAN-FD 控制器 IP、称为 M-CAN。  博世已发布 M-CAN 用户手册 、其中包含有关 CAN-FD 控制器的更多信息、超出了 TCAN4550数据表中提供的信息。  我建议将本文档用作 TCAN4550数据表的补充。 M-CAN 寄存器与 TCAN4550中的寄存器相同、唯一的差异是在每个地址中添加了0x1000偏移量。  例如、M-CAN 用户手册中的寄存器地址0x18将是 TCAN4550中的寄存器0x1018。  考虑到这一点、您可以轻松地将 M-CAN 用户手册中读取的寄存器信息传输到 TCAN4550器件。

    我还将注意到、TCAN4550具有三个寄存器地址区域。 我认为解释器件中不同类型的寄存器很有帮助、因为它使您更容易理解器件的运行方式以及状态位是与 M-CAN 相关还是与 TCAN4550器件相关的位置。

    - 0x0000-0x002F 是在芯片逻辑中实现的器件标识和状态信息、只需要 SPI 时钟进行读取/写入。

    - 0x0800-0x08FF 是 TI 设计的 TCAN4550器件专用寄存器、用于数字内核、需要20MHz 或40MHz 时钟才能正常读取/写入。

    - 0x1000-0x10FF 是博世设计的 M-CAN 寄存器块、在 TCAN4550中实现、地址偏移量为0x1000。

    对于器件配置调试、我需要为您的配置提供寄存器值。  您能否读回所有正在设置的配置和状态寄存器、以便我可以查看它们?

    一般来说、您的过程应包含以下一般步骤:

    -读取和清除加电中断

    -在0x08xx 寄存器中配置器件硬件设置

    -配置 M-CAN 设置(标称和数据位时序、RX/TX 缓冲器/FIFO 元件的 MRAM 分配、RX 消息滤波器元件、TX 事件 FIFO 元件等)

    -将模式更改为正常模式以开始参与 CAN 总线上的活动

    -将 CAN 报文元素写入 MRAM 中的 TX 缓冲元素、然后将 TXBAR 寄存器中相应的缓冲元素位置位以启动发送。  根据 CAN 仲裁协议、器件应尝试在下一个可用时间发送消息。

    [引用 userid="530666" URL"~/support/interface-group/interface/f/interface-forum/1159260/tcan4550-tcan4550-can-error 数据:61 | A0、88 | 00、34 | 00、04 | 00、01 | 00、 A4 | 00、00 | 00、00 | 00、00 | 00、28 | 00、 00 | 00、00 | 00、00 | 00、00 | 00、0B | 00、 CA | 00、00 | 00、00 | 00、00 | 00、00 | 00、[/报价]

    我认为我理解您提供的 SPI 数据是您尝试传输的 CAN 消息、这是正确的吗?  SPI 协议在 MRAM 存储器位置的写入和读取操作与寄存器的操作相同。  那么、看看前4个字节、您会得到0x61的写入操作代码、0xA088的存储器地址和0x00字的数据长度。  如果0x61的第一个字节不是 WRITE Op Code、那么我会误解您的数据、这是巧合。  但是、否则、我不希望将第4个字节设置为0x00、因为这表示不会发送任何数据、并且会生成 SPI 错误。

    您能否验证您正尝试向 TX 缓冲区发送哪些数据、并根据 M-CAN 配置验证该数据是否将到达有效的 TX 缓冲区元素? TCAN4550不会对存储器分配进行任何错误检查、可能会重叠或覆盖数据、或将数据放置在错误的存储器位置。  第一个 TX 缓冲区元素位于写入 TX 缓冲区配置(TXBC)寄存器0x10C0[15:2]的 TX 缓冲区起始地址(TBSA)字段的地址。

    一旦这个缓冲区被消息数据和标头信息填满、你应该将 TX 缓冲区添加请求(TXBAR)寄存器0x10D0[0]中的位0置位、这样从第一个 TX 缓冲区元件位置发送消息。

    希望此响应中的某个内容会突出显示该错误、但如果没有、我可以在您提供其他寄存器信息时帮助调试配置。

    此致、

    Jonathan

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

    Josh、您好。

    您是否能够解决您的问题?

    此致、

    Jonathan

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

    您好、Jonathan、

    案例已自动关闭。
    客户没有回来。 我们假设客户已解决问题。

    感谢您的支持。

    请保持安全。

    此致、

    乔塞尔

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

    Josh、您好。

    感谢您的告知。  我将关闭此主题。  如果客户确实回来了、请随时打开或重新发布、届时我们可以继续为他们提供支持。

    也要保持安全。

    此致、

    Jonathan