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-Q1:Tcan4x5x 驱动器问题

Guru**** 2589265 points
Other Parts Discussed in Thread: TCAN4550

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1570864/tcan4550-q1-issue-with-tcan4x5x-driver

器件型号:TCAN4550-Q1
主题:TCAN4550 中讨论的其他器件

工具/软件:

您好:

我目前使用的是 TCAN4x5x CAN 收发器、该收发器通过 SPI 连接到 T2081 处理器。 在我的驱动程序代码中,在我的 ISR 代码中,我清除了 地址 0x1050 寄存器处的 IR(中断寄存器),并检查它是否为零。 然而、在地址 0x1044(仍在 ISR 中)读取 PSR(协议状态寄存器)后、当读回 IR 寄存器时、会显示 0x20000000(保留地址访问)。为什么会发生这种情况。

此致、
Ravindra Arumilli。

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

    尊敬的 Ravindra:

    该位是称为“M_can"的“的 CAN FD 控制器 IP 的一部分、在 TCAN4550 中使用、由 Bosch 开发。  M_CAN 用户手册(链接)针对该位提供以下说明。

    如果您尝试访问无效的寄存器地址或保留地址、则可以设置该位。  请验证您只尝试读取或写入有效寄存器地址。

    此致、

    Jonathan

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

    尊敬的 Jonathan:

    感谢您的答复。

    我们在有效的寄存器访问时收到此错误。 当我们在中断处理中读取有效寄存器时、会发生错误。 在中断处理程序任务(由 ISR 唤醒)中、我们首先清除 IR 寄存器。 清除后、我们确认 IR 为零。 然后、我们读取 10F4(Tx 完成时的 FIFO 状态)和 1044(对于 Rx 时为 PSR)。 在任何一种情况下、当我们回读 IR 时、一旦访问这些寄存器、就会立即显示 0x20000000。  

    为了交叉检查这是否只是 10F4 或 1044 寄存器的问题、我们读取了一些其他寄存器(用于调试)。 我们在某些寄存器(如 10F810410481024 等)中收到保留地址访问错误 但当我们访问 1004、10C0、10D0 等寄存器时、 所有这些都是读取操作。  

    更大的问题是、即使我们将相同的值写回 IR 进行清除、它也不会被清除。  

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

    尊敬的 Ravindra:

    在读取您指示的寄存器时、我无法复制设置的 ARA 位。  我遵循了您首先读取和清除中断寄存器 0x1050 的过程、然后我尝试读取这些寄存器、并在每次读取寄存器之间读取中断寄存器 0x1050 以查看 ARA 位是否已设置。  但对于 0x1050 的所有读取、ARA = 0。

    是否可以使用逻辑分析仪记录 SPI 信号、从而根据我们的预期了解信号是如何生成的?  可能存在某种形式的逻辑错误或时序错误导致器件选择不正确的地址。

    此致、

    Jonathan

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

    尊敬的 Jonathan:

    所附内容是从逻辑分析仪捕获的数据。

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

    尊敬的 Ravindra:

    如果我正在正确地对其进行解码、MOSI 数据字节为:0x41、0x00、0xC4、0x00、0xFF、 0xFF、0xFF、0xFF

    这将是地址 0x00C4 的 SPI 读取 (0x41)、Length 字段为 0x00。

    我看到这有两个问题。

    1.) 0x00C4 没有定义的地址

    2.) 长度字段不应是 0x00、而应该是 0x01、因为在芯片选择信号再次变为高电平以结束 SPI 读取事务之前、只会返回一个额外的数据“字“(或一个额外的 32 位)。

    驱动程序中似乎存在一些错误、导致从 MOSI 线路上的 MCU 输出不正确的位序列、这可能导致设置 ARA 错误位。

    此致、

    Jonathan

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

    尊敬的 Jonathan:  

    感谢您的持续和即时支持。  

    很抱歉混淆。 上述读取操作是我们在调试问题时输入的错误测试代码的结果。 所示为读取寄存器 0x1044 之前和之后读取的 IR 寄存器 (0x1050) 图像。 我们在初始化 CAN 器件后立即执行了三次读取。 在测试这些读取之前、我们没有执行任何其他操作。  访问 0x1044 寄存器后可以立即看到、IR 寄存器值从 0x00000000 更改为 0x20000000。

    谢谢




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

    尊敬的 Ravindra:

    您加载的第一个绘图具有第一个字(32 位)0x41104400 的 MOSI 值。  这是对寄存器 0x1044 的 SPI 读取、长度为 0 个字、因为最后一个字节是 0x00。  这不正确、长度字段应为 0x01。  因此、对于寄存器 0x1044 的 SPI 读取、我预计该值为 0x41104401。

    您加载的第二个和第三个图具有第一个字(32 位)0x41105000 的 MOSI 值。  这是对寄存器 0x1050 的 SPI 读取、长度为 0 个字。 同样、对于单个寄存器读取、Length 字段需要为 0x01。  我期望该值为 0x41105001。

    您在上一篇文章中分享的图也有一个不正确的长度字段。  您能否更正长度字段并查看这样是否解决了错误?

    此致、

    Jonathan

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

    尊敬的 Jonathan:

    非常感谢您的支持。 这似乎已经解决了这个问题。 感谢您的帮助。

    Ravindra。

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

    尊敬的 Ravindra:

    感谢您让我知道此问题已解决。  很高兴我能提供帮助。

    此致、

    Jonathan