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.

[参考译文] TDA2PXEVM:针对特定数据速率配置 CSI2寄存器

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/725864/tda2pxevm-configuring-csi2-registers-for-a-specific-data-rate

器件型号:TDA2PXEVM
Thread 中讨论的其他器件: DS90UB954-Q1EVM

大家好、

我将 TDA2PXEVM 与 DS90UB954-Q1EVM 配合使用、在设置 CSI2数据速率为800Mbps 时运行时遇到问题。 一切都可以在400Mbps 下正常工作、我能够使用 CAL 的 WRDMA 捕获数据并将其写入存储器。 该实现是裸机。 我根据 TRMv1.0第10.4.5.3章执行 CSI2 PHY 链路初始化。 当 PHY REG0/DS90UB954配置为800Mbps 的数据速率时、将不会达到 STOPSTATE (初始化序列的第2f 点)、因此 不会完成 CAL_CSI2_COMPLEXIO_CFG 的 RESET_DONE。

我不确定是否正确配置了 PHY 寄存器 REG0、REG1中的时序:

对于 THS_TERM:

根据 TRM:“编程值= floor (20ns/DDR_CLK),其中 DDR_CLK 是 CSI-2 I/O 通道速率的周期。 默认值:4 (对于400 MHz)。”

对于 DDR_CLK=5ns 的值(仅查看整数值)、默认值是正确的、该值对应于200MHz。 查看帖子末尾的问题。

 

对于 THS_SETTLE:

根据 TRM:“编程值= floor (105ns/DDR_CLK)+ 4,其中 DDR_CLK 是 CSI-2 I/O 通道速率的周期。 默认值:39 (对于400 MHz)。”

对于默认值39、DDR_CLK 需要介于3和3.0882之间、这对应于大约333.3MHz 的值。  查看帖子末尾的问题。

 

对于 TCLK_SETTLE:

根据 TRM:“编程值= max[3,ceil (155ns/CTRLCLK 周期)–1]默认值:14 (96MHz)”

计算方法是直接的,但在 PDK 中,该值是通过以下公式计算的:"temp =(((((Float32)260U /(Float32)DPHY_Functional_CLK_PERIOD )-(Float32)2U)";

这意味着值为22而不是14。  查看帖子末尾的问题。

TCLK_TERM 的计算也与 TRM 中的计算不同、但在这种情况下、两种计算结果相同。

 

对于 TCLK_DIV:

根据 TRM:“CLKMISS 检测器的 CTRLCLK 分频系数编程值= ceil (15ns/CTRLCLK 周期)-1默认值:1 (96MHz)

CLKMISS 检测时间=(5*TCLK_DIV+1)*(CTRLCLK 周期)< 60ns

注意:只允许满足上述关系的 CTRLCLK 频率。 通常,在 CTRLCLK 上使用96MHz。”

尽管默认值为1、但 CLKMISS 检测时间为62.5ns。 查看帖子末尾的问题。

测试内容:

  • 使用数据速率的周期或实际时钟(数据速率的一半)来计算 THS_TERM、THS_SETTLE。 我已通过电子邮件得知、这些计算应使用数据速率。 对于800MbIT/s 的数据速率、计算如下值:
  • 使用数据速率周期(1.25ns)进行计算 使用时钟周期(2.5ns)进行计算
    THS_TERM floor (20ns/1.25ns)= 16 floor (20ns/2.5ns)= 8.
    THS_SETTLE floor (105ns/1.25ns)+4=84+4=88 floor (105ns/2.5ns)+4=42+4=46
  • 使用 PDK 计算的 TCLK_SETTLE、结合上述两个值、得出值为22而不是14。
  • 否则、对于96MHz 的标准控制时钟、使用 TCLK_DIV (1)和 TCLK_TERM (0)的标准值。
  • 使用示波器监控 CSI2时钟通道、输出为400MHz、预计数据速率为800Mbit/s

问题:

  • 除了 CSI2 PHY 寄存器的 REG0之外、还有其他寄存器因 CSI2数据速率的变化而必须重新编程吗?
  • 要进行双次检查:使用数据速率的周期来计算 THS_TERM、THS_SETTLE 是否正确?
  • 对于 TCLK_SETTLE、TCLK_TERM:应该使用来自 TRM 还是来自 PDK 的计算?
  • 通过 上述计算、TCLK_DIV 是否可以不满足"CLKMISS 检测时间<60ns"要求?

注:

  • PDK (01_10_00_08)中用于比较计算的文件:vpshal_calCsi2Tda2px.c
  • 在 TDA2PX 的 TRM (Nov17)和 TDA3的 TRM (June18)中、上述5个参数的计算是相同的

谢谢、

此致、

托比亚斯

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

    PDK CAL 驱动程序/接收器能够以不同的数据速率(400、800、1600Mbps)接收来自多个源(传感器/CSI2集线器)的 CSI2流。

    问题
    1.是的、对 REG 0进行编程就足够了
    据我所知、THS_TERM 和 THS_SETTLE 计算似乎是正确的。 (TRM 可能需要更新、我将检查更新)
    请使用 PDK 中提供的计算
    4.我没有使用 TCLK_DIV,我请一位专家对此发表评论(但专家正在出差,请期待答复延迟)

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

    您好 、Sujith、

    感谢您能很快回来!

    今天、我用800Mbit/s 进行了更多测试、发现在初始化成功退出之前、有时我会尝试使用 TRM 的例程多次初始化 PHY。 我还没有发现一致的行为。 我使用 MIPI 数据速率的周期(1.25ns)或时钟(2.5ns)来计算 THS_TERM 和 THS_SETTLE。 这两种方法似乎都可以正常工作、通常需要两次尝试初始化 PHY。 我还尝试在1.25ns 和2.5ns 之间取不同的值、有些似乎也起作用(大部分是第二次尝试)。

    我的顺序是:

    1. 配置 DS90UB954、但尚未输出任何数据
    2. TDA2PX 上的 CSI2 Init 序列
      1. CAL 软件复位
      2. TRM 的 PHY 初始化序列1至2e
      3. 从 DS90UB954启动 MIPI 输出
      4. 继续 TRM 的 PHY 初始化序列
      5. 重复此操作、直到序列成功完成。 关闭 DS90UB954输出。初始化序列始终超时、因为无法达到 STOP_STATE
    3. 其他 CAL CSI2设置(上下文、写入 DMA 等)
    4. 再次启动 DS90UB954输出
    5. 观察接收到的数据

    我的主要问题是、似乎与我初始化 CSI2 PHY 的方式不一致、除了大部分时间需要2次尝试。 THS_SETTLE 和 THS_TERM 的值计算方法完全不同、但需要两次尝试、之后可以接收数据。 对于400Mbit/s、它始终首先尝试、然后使用数据速率周期(2.5ns)进行计算。


    您是否知道在器件初始化期间为什么会出现这些问题? 我希望在初始化期间实现可重现且一致的行为。

    此致、

    托比亚斯

    编辑:在其中一个括号中以毫微秒为单位更改错误的值

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

    Tobias、

    最新 TRM 中列出的、在当前软件中实现的等式是相同的。  THS_SETTLE 和 THS_TERM 计算中使用的 DDRCLK 代表数据速率时钟周期、因此800Mbps 运行时应使用2.5ns。  对这两个公式进行了更新、导致了400MHz 下的计算结果与默认值之间的电流差异。  当 TRM 公式被更新以在不同频率间获得更好的裕度时,缺省值--使用旧公式计算--已经被硬编码到这些寄存器字段,因此不会同时更新。  尽管如此、这两组值都适用于400MHz 操作。

    为了确保 CSI2正常运行、必须在 CAL PHY 完全上电之前在 DS90UB954上禁用 CLK。

    此致、

    石尾

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

    您好: Shiou Mei、

    感谢您澄清计算。 现在、我将使用2.5ns 的值进行@800Mbps (400MHz 时钟)的计算。 这会导致 THS_TERM = 8且 THS_SETTLE = 46。

    [引用用户="Shiou Mei Huang"]要确保 CSI2正常运行,必须在 CAL PHY 完全上电之前在 DS90UB954上禁用 CLK。

    这意味着我在序列中过早接通 CSI 时钟。 我将其更改为:  

    1. 配置 DS90UB954、但尚未输出任何数据
    2. TDA2PX 上的 CSI2 Init 序列
      1. CAL 软件复位
      2. TRM 的完整 PHY 初始化序列
      3. 简要打开 DS90UB954的 MIPI 输出
      4. 等待 CAL_CSI2_COMPLEXIO_CFG 位 RESET_DONE 完成复位。 (根据 TRM、必须存在 MIPI 时钟)。
      5. 关闭 DS90UB954的 MIPI 输出

    3. 其他 CAL CSI2设置(上下文、写入 DMA 等)
    4. 再次启动 DS90UB954输出
    5. 观察接收到的数据

    这样、PHY 每次都能正确初始化。 感谢你的帮助!

    此致、

    托比亚斯