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.

[参考译文] TCAN4551-Q1:Rx FIFO MRAM 内容有时未对齐、消息未按预期显示。

Guru**** 2680875 points

Other Parts Discussed in Thread: TCAN4551-Q1, TCAN4550-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1589907/tcan4551-q1-rx-fifo-mram-contents-sometimes-not-aligned-messages-not-as-expected

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

当我读出 RX FIFO0 的 MRAM 时、我会收到令人困惑的内容。

我觉得一切都很好、直到我开始使用越来越多的不同 CAN 消息进行测试。 通常、如果我在这里和那里只收到一条消息、那么我没有注意到问题、但下面的场景会显示问题。

我在下面发送了 24 个 CAN 消息一个接一个,从上到下,手动,所以每一个之间大约半秒.

image.png

然后我来到读取它们、从 Get 索引读取到 FIFO RAM 的末尾、这应该会显示前 4 条消息。 但是、在内存转储 (DMA SPI) 中、数据不会以第一条消息的 ID 开头、而是以第 8 条消息的数据开头(下图为红色)。

image.png

然后是每个元素第 9、第 10 和第 11 条消息的数据。 您还可以在第一个元素中看到、第三个字中有来自第一条消息的数据、每个元素中都是类似的。 这 4 条消息的标识符均不会显示在存储器中。 你可以看到“下面“的 remenants 的一个较长的消息,我以前测试过。

 

我的设置是 64 字节消息的 64 个元素中的 RX FIFO0、之后是 TX FIFO:

image.png

 

我认为我的数学和布局是正确的、但我无法确定可能有什么问题。

 

我还看到了 SPI 读取示例、其中标识符开始出现在元素的中间。 我目前尚未添加该示例。

 

我有没有做错了、或者在某个地方错过了一些限制? 我在 FIFO 中使用默认的阻塞模式、但 FIFO 开始时为空、以进行此测试。

 

提前感谢。

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

    您好 Ed、

    TCAN4551-Q1 只有 2kB 的 MRAM、因此您需要减少配置中的元素数量。  MCAN IP 可配置为支持最多 64 个 RX FIFO 元素、但 TCAN4551 器件本身没有足够的存储器来支持 64 个元素、每个元素具有完整的 64 个数据字节。

    您似乎是在存储器段重叠、因为对物理地址之外的存储器段的访问尝试只是绕回而不进行错误检查。  因此、您的消息可能会覆盖其他存储器元素、从而导致意外的数据值。

    您需要将总 MRAM 分配限制在 MRAM 地址空间 0x8000 至 0x87FF 内。  如前所述、对地址 0x8800 的读取或写入访问相当于对 0x8000 的相同读取或写入访问。

    您可以在的第 4.2 节中找到更多信息 TCAN45xx 软件用户指南 (链接)

    此致、

    Jonathan

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

    啊、是的! 当然! 我不知道我在想什么。  非常感谢 Jonathan 的快速答复。 至少这是一个简单的!

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

    大家好、 Jonathan Nerger FYI  、参考代码 TCAN4550-Q1 c TCAN4x5x_MRAM_Configure 中似乎确实进行了一些检查。 但我认为它有一个错误。  

    代码显示:

    //检查并确保我们没有超出内存范围。 如果是、则返回失败

    IF ((startAddress - 1)>(MRAM_SIZE + REG_MRAM))

     但 startAddress 从 0 开始、因此添加偏移 REG_MRAM 是不正确的

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

    尊敬的 Ed:

    我们目前正在度假。 请在下周前提供一些反馈、谢谢。

    此致、

    Michael。

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

    尊敬的 Ed:

    很抱歉耽误你的时间。  感谢您指出这一点。  请根据需要修改代码。

    此致、

    Jonathan