imx8mp 柔性扫描硬件时间戳你好
我们有自己的设计,基于恩智浦的 imx8mp 和内核 6.6.23。
我们同时使用两个 flexcan 接口,并希望从驱动程序中读取硬件时间戳。我们正在使用 candump,但读数始终为 0
candump -H -L
(0000000000.0000000000)canfd1 776#94CD03004FC7E1
您知道如何启用这项功能吗?
致以最诚挚的问候和感谢
天使
Re: imx8mp flexcan hardware timestamp- 默认 16 位定时器:FlexCAN 模块具有内置 16 位定时器,用于计算 CAN 总线上的比特间隔。
它还有一个令人讨厌的特点,那就是每次 CAN 时钟同步时,这个 16 位定时器的时钟周期都会受到一点影响。并非所有 16 位定时器周期都等于位时间。因此,如果尝试使用其他 on-SoC 定时器(其时钟与 CAN 时钟来自同一时钟父时钟)来计算 16 位定时器溢出,以扩展时间戳时钟的宽度,则需要以某种方式跟踪 CAN 接收流量导致的时间戳时钟漂移。
Re: imx8mp flexcan hardware timestamp你好
谢谢您的答复。
我们知道 imx8mp 中的硬件 Flexcan 控制器支持这种硬件时间戳功能。
请确认恩智浦在内核 6.6.23 中提供的 Linux 驱动程序是否也支持该功能?
致以最诚挚的问候和感谢
天使
Re: imx8mp flexcan hardware timestamp你好
i.MX 8M Plus FlexCAN具有硬件时间戳功能,该功能使用自由运行的16位计时器,该定时器根据CAN波特率随每个比特间隔递增,默认情况下在接收每个CAN帧时进行RESET。要获得更精确的时间戳并克服限制,必须在 FlexCAN 控制寄存器 1 中启用高分辨率 (HR) 时间戳。这需要一个单独的外部定时器源,通常是系统定时器 (STM),通过配置该定时器可提供高分辨率时基。
工作原理
- 默认 16 位定时器:FlexCAN 模块具有内置 16 位定时器,用于计算 CAN 总线上的比特间隔。
- 该定时器在 65535 个时钟刻度后缠绕(溢出)。
- 溢出所需的时间取决于 CAN 总线的速度。
- 您可以将
CRTL1 [TSYN] 设置为 “1”,以便在收到帧时自动 RESET 计时器,这对于保持消息顺序很有用,但仍受到 16 位限制的限制。
- 高分辨率 (HR) 时间戳:为实现更高精度,可通过设置 FlexCAN 控制寄存器中的相关位来启用 HR 时间戳功能。
- 这将禁用用于时间戳的内部 16 位定时器。
- 它允许使用外部定时器源(如 STM)进行时间戳记录。
- 然后,您可以从专用寄存器读取 HR 时间戳值。
如何启用人力资源时间戳
- 配置外部计时器 (STM):安装 STM 以提供高分辨率的时基。
- 在 FlexCAN 中启用 HR 时间戳:在 FlexCAN 控制器中,启用 HR 时间戳功能。
- 读取时间戳读取
HR_TIME_STAMP寄存器,获取高分辨率时间戳
此致