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:TCAN4551-Q1

Guru**** 2465890 points
Other Parts Discussed in Thread: TCAN4551-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1469639/tcan4551-q1-tcan4551-q1

器件型号:TCAN4551-Q1

工具与软件:

团队成员、您好!

我正在研究 TCAN 4551、并实现了 FIFO 水线功能。 接收到例外水线中断。

我已将水线位配置为60、接收到60条消息并获得中断。 这里我需要 收到的每条消息的时间戳。

请引导我。

谢谢!

Amit  

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

    Amit、您好!

    TCAN4551-Q1使用由 Bosch 开发的称为 MCAN 的 CAN FD 控制器 IP。  我建议您参考 M_CAN 用户手册 (链接)、了解有关如何配置和使用 MCAN 功能(包括消息时间戳)的更多信息。  唯一需要注意的是、TCAN4551-Q1向每个 MCAN 寄存器地址添加了寄存器偏移0x1000。  因此、作为一个示例、控制寄存器在 M_CAN 用户手册中列为0x18、但在 TCAN4551-Q1中实际上为0x1018。  否则、M_CAN 用户手册中的所有其他信息均适用于 TCAN4551-Q1。

    M_CAN 控制器内核内部有一个"内部"时间戳计数器、该计数器以 CAN 位时间的倍数进行计数。 这在寄存器0x1020中控制(请注意、由于0x1000偏移、这是 M_CAN 寄存器)。 时间戳计数器预分频器 tcp[3:0]可以配置为使用此寄存器设置的1到16位时间的倍数来计数。 当前计数器值可从寄存器0x1024读取、如果"内部"计数器已配置可供使用、也可以随时通过写入0x1024来清零或重新启动。 我还将注意到、我相信器件将使用标称位时间进行计数、而不会对 FD 位进行计数、这会使计数器溢出过于频繁。

    M_CAN 控制器允许使用替代的"外部"时间戳计数器来代替内部 CAN 位时间计数器、它只从该外部计数器获取16位值、但它并未指定应如何实现该外部计数器。 TCAN451-Q1使用主机时钟频率(晶振/CLKIN)的标准分频器、允许将分频后的时钟值用作时间戳。 如果选择 TSCC.01020[1 TSS:0]值"10"(寄存器0x1020)、则将使用此"外部"时间戳计数器。 而"外部"仅仅意味着它位于 M_CAN 控制器内核的外部。 但由于这是 TCAN4551的一个特定功能、其预分频器在寄存器0x0804中设置。 请注意、地址偏移量表示这不是 M_CAN 内核寄存器。 默认情况下、该寄存器的值为0x02、这将产生16的时钟分频器。 向该寄存器写入 pscaler 值将清除并重新启动计数器。 当该计数器配置为使用时、该计数器的当前值可以在寄存器0x1024中读取、该寄存器与内部计数器相同、因为一次只能使用一个计数器。

    我还将注意到、您应该在配置例程中添加时间戳计数器复位、对于任何一个您选择使用的计数器、这样、一旦您开始在 CAN 总线上进行通信、您就可以拥有一个确定性的计数器值起点。 每次计数器回绕时、它都会设置一个中断位、以便 MCU 可以跟踪计数器重新启动的次数。 如果这对您很重要、我建议您在 MCU 中使用某种形式的次级计数器来跟踪这些绕回中断、如果消息存储在某种形式的日志中、可以在内部将这些中断附加到从消息中捕获的时间戳值。

    此致、

    Jonathan

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

    Jonathan、您好!

    我已经按照您在之前的消息中提到的方法配置了系统、现在我将收到时间戳计数。 如您所述、时间戳计数器会被复位(溢出)、并且我已经相应地配置了时间戳绕回(TSWE)中断。

    我使用阈值为56的水线中断、每发送56个数据包就收到一次中断。 一旦中断被触发、我就会从 FIFO 中读取全部56个数据包。 我的问题是:在读取 FIFO 时、我如何跟踪或确定两条消息之间发生的 TSWE 中断的时间量?

    谢谢、此致、

    Amit Sutrave

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

    Amit、您好!

    系统将继续捕获消息时间戳并将其与消息缓冲器元素一起存储在 FIFO 中。  当计数器回绕时、新消息的计数值可能小于已存储在 FIFO 中的旧消息的计数值。  因此、接收到这些消息之间的时间总差异将是需要计算的时间戳的累积差异。

    此致、

    Jonathan