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.

[参考译文] DS90UB960-Q1:具有 4 个 DS90UB935-Q1 显示解决方案的 DS90UB960 偶尔无法输出图像。

Guru**** 2668255 points

Other Parts Discussed in Thread: DS90UB935-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1579346/ds90ub960-q1-ds90ub960-with-4-ds90ub935-display-solution-occasionally-fails-to-output-images

部件号: DS90UB960-Q1

详细说明:MCU 显示模式:4 通道、8 位、分辨率 1920x1080。

同时输出四个通道时、可能会出现黑屏或绿屏。 MCU 日志显示致命错误、例如“冻结“或“CSID RX FIFO 溢出“。  

电流参数如下:

          struct {
          u8 port_sel;
          u8 vc;
          u8 addr;
     } ds90ub960_935_map[] = {{0x01, 0x0, 0x5D}, {0x12, 0x1, 0x5E}, {0x24, 0x2, 0x5F}, {0x38, 0x3, 0x60}};

     const uint8_t serAlias[4] = {0x1A, 0x2A, 0x3A, 0x4A};

     ds90ub960_935_write_reg(DS90UB960_ADDR, 0x01, 0x00);

     for (i = 0; i < (sizeof(ds90ub960_935_map) / sizeof(ds90ub960_933_map[0])); i++) {

          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x4C, ds90ub960_935_map[i].port_sel); // page to port RX0, RX1, ...
          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x58, 0x9E); // I2C Pass-Through Enabled
          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x6D, 0x7C); // RAW10 Mode
          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x70, (ds90ub960_935_map[i].vc << 6) | 0x1E); // Port X -> VC X,  YUV422 8-bit
          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x72, ds90ub960_935_map[i].vc);
          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x7C, 0x81);
          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x5B, 0x31);
          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x5D, 0x6C);
          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x65, 0x6C);

          ds90ub960_935_write_reg(DS90UB960_ADDR, 0x5C, serAlias[i] + 1); 

          ds90ub960_935_write_reg(0x18, 0x02, 0x72);
          msleep(100); // sleep 100ms

          ds90ub960_935_read_reg(0x18, 0x02, &val);
          printk("%s() 962's serAlia_7bit reg[0x02]:%2x\n", __FUNCTION__, val);


          ds90ub960_933_write_reg(DS90UB960_ADDR, 0x5B, 0x30);
          ds90ub960_933_write_reg(DS90UB960_ADDR, 0x5C, serAlias[i]);

     }

     ds90ub960_935_write_reg(DS90UB960_ADDR, 0x18, 0x00);
     ds90ub960_935_write_reg(DS90UB960_ADDR, 0x1F, 0x10); 

     ds90ub960_935_write_reg(DS90UB960_ADDR, 0x20, 0x00);
     ds90ub960_935_write_reg(DS90UB960_ADDR, 0x32, 0x01);
     ds90ub960_935_write_reg(DS90UB960_ADDR, 0x33, 0x41);

问题:参数调整可以改善这个问题吗?

 

 

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

    仅输出单个通道时、不会出现“无图像输出“问题。 这是因为单通道配置与四通道寄存器参数配置不同吗?

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

    “冻结“或“CSID RX FIFO 溢出“可能表明存在多种不同类型的问题。 可能其中一个 RX 端口之间的锁定会失败、从而中断发送到 SoC 的数据并导致数据冻结。

    您是否能够在每个 RX 端口上提供 960 的寄存器转储?

    这可能是 CSI 带宽问题。 解串器处的数据聚合限制。 如果提供寄存器转储、我可以了解更多。

    您能否提供有关每个成像仪视频带宽的更多详细信息? 如果无法从图像传感器供应商/数据表中获得确切的数字、我们通常根据以下公式来估算带宽。

    视频 BW = HActive x VActive x fps x bpp x CSI 消隐/开销(假设 10%- 25%的额外开销(如果未知))

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

    您好、Justin

    摄像头配置信息如下所示: ​

    DS90UB935-Q1

    1920*1080

    30fps

    FPD-linkIII

    YUV422

    LVDS

    支持同步

    寄存器转储如下: ​

    e2e.ti.com/.../960-rx0_5F00_3.txte2e.ti.com/.../960-rx1_5F00_3.txte2e.ti.com/.../960-rx2_5F00_3.txte2e.ti.com/.../960-rx3_5F00_3.txt

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

    您好:Bingkang、

    我的意见:

    1. 客户设置 960 寄存器 0x58 = 0xDE。 这会设置 I2C_pass_through_all 位、从而将每个 I2C 命令传递到解串器板上的串行器板。
      1. 您客户能否通过设置 960 寄存器 0x58 = 0x5E 在所有 RX 端口上禁用此功能?
      2. 原因是我们希望控制发送到摄像头的 I2C 命令、并防止任何意外的 I2C 写入损坏串行器或图像传感器中的设置。
    2. 诊断寄存器 0x4D、0x4E、0x55-0x56 和 0x7A-0x7B 不能指示 FPD-Link 接收器上存在任何错误。 根据诊断寄存器 0x35、CSI 发送器端口正在正确地输出视频数据。 寄存器 0x73 –0x76 表示 1920x1080、并且解串器正在正确接收 YUV422 8 位数据。
      1. 仔细检查一下、这些寄存器转储是在出现黑屏或绿屏错误情况时获取的吗?
      2. 出现这种黑屏/绿屏错误的可能性是多少? 它是否仅在系统某些上电时偶尔发生?
    3. 您是否还更详细地了解 处理器发出的“冻结“或“CSID RX FIFO 溢出“错误消息是什么意思?

    此致、

    Justin Phan

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

    您好、Justin

    关于问题 1: ​​我们已设置 UB960 的寄存器 0x58 至 0x5E。 ​

    关于问题 2: ​

    a.当寄存器 0x1F 中的 CSI 数据速率配置为每通道 1.6Gbps 时、相关寄存器会相应地设置。 但是、当我们尝试将寄存器 0x1F 中的 CSI 速率配置为每通道 800Mbps 时、我们发现即使单通道输出也无法生成正常图像。 寄存器转储表示设置了寄存器 0x4E 中的位 4。 该位的设置专门指示什么? CSI 输出能力可能导致问题吗?

    e2e.ti.com/.../960-rx0.txte2e.ti.com/.../960-rx1.txte2e.ti.com/.../960-rx2.txte2e.ti.com/.../960-rx3.txt

    B.成功率约为 50%。 UB960 持续保持通电、且不执行下电上电操作。 ​

    ​关于问题 3: ​​处理器报告错误:“冻结“和“CSID RX FIFO 溢出“。 这些错误由 CSID 硬件中断生成、表明 CSID 已接收到不符合要求的异常数据或数据、因此已停止接受数据。 此类错误通常是由 CSID 接收不匹配引起的。 尽管我们已经将处理器的接收能力设置为最大值(我们的处理器支持三个 4 通道 CSI (4/4/4 或 4/4/2/1)、D-PHY 1.2、每通道 2.5Gbps)、但理论上这不会造成接收瓶颈问题。 ​

    根据上述情况、我们怀疑问题可能出在 CSI 输出能力方面。 因此、您能否提供用于调整 CSI 输出能力的相关寄存器配置?

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

    您好、Justin

    1. 问题仍然存在。  
    2. 我想知道如何参考所提供的示例寄存器参数。 哪些特定寄存器被视为关键寄存器?
    3. UB960 的上电顺序要求是什么? 提供的“PEC‘没有明确说明这一点。 由于我们的硬件在控制通电时没有定义的顺序、您能详细介绍 UB960 的上电时序要求吗?
    4. 电源和时钟稳定。
    5. 我们尝试仅连接一个摄像头、但仍为 4 个通道配置了寄存器参数。 尽管问题发生的可能性变小、但仍然出现“OF FREEZE“和“CSID RX FIFO 溢出“错误、降至大约 10%。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Bingkang、

    这里是对配置脚本的几条注释。 您能否根据我的反馈进行更改、看看这样是否能解决问题?

    1. 960 寄存器 0x58 = 0x9E //将此值更改为 0x5E、您已经尝试过
    2. 960 寄存器 0x6D = 0x7C //注释显示 RAW10 模式、但如果串行器是 935、则必须将其设置为 CSI-2 模式。 如果您正确地将 MODE 设置为 CSI-2 模式、则不需要写入此寄存器、并且可以注释掉此行。
      1.  
    3. 960 寄存器 0x70 = x //不需要写入此寄存器。 您处于 CSI-2 模式。 此行可以注释掉。
    4. 960 寄存器 0x1F = 0x10 //您正在写入保留寄存器位。 您能否改为将该值设置为 0x00? 看看这是否有帮助?

    此外、即使使用单个摄像头模块、您仍然会收到该错误消息、这很奇怪。 这些 SoC 错误消息似乎指示向 SoC 输出了过多的视频数据。

    您可以尝试以下操作:

    1) 将 960 连接到单个摄像头模块。

    2) 运行以下 PATGEN 脚本、使 953 串行器生成 1280x30fps 视频。 然后查看 SoC 是否仍然有问题?

    import time
    
    devAddr = 0x60
    serAddr = 0x18
    
    # Enable PATGEN on the 953
    # 1280x720, 30fps, YUV422 8-bit
    board.WriteI2C(serAddr,0xB0,0x00) # Indirect Pattern Gen Registers 
    board.WriteI2C(serAddr,0xB1,0x01) # Enable PATGEN
    board.WriteI2C(serAddr,0xB2,0x01) 
    board.WriteI2C(serAddr,0xB1,0x02) # Configure color bar pattern in video Not critical
    board.WriteI2C(serAddr,0xB2,0x33) 
    board.WriteI2C(serAddr,0xB1,0x03) # Configure the VC-ID and CSI-2 Data Type of the video generated Need to know the CSI-2 data type. Default is RGB888.
    board.WriteI2C(serAddr,0xB2,0x1E) # 0x1E = YUV422 8-bit (16bpp)
    board.WriteI2C(serAddr,0xB1,0x04) # 8 MSB for Active Line Length in bytes
    board.WriteI2C(serAddr,0xB2,0x0A) 
    board.WriteI2C(serAddr,0xB1,0x05) # 8 LSB for Active Line Length in bytes
                                      # Example - Suppose you want to generate video for 1280x720 at 30fps and the CSI-2 data type of the video is RGB888 (24bpp). 
                                      # 1280pixels x 16bpp / 8bitsperbyte = 2,560 = 0xA00
    board.WriteI2C(serAddr,0xB2,0x00) 
    board.WriteI2C(serAddr,0xB1,0x06) # PGEN_BAR_SIZE1 Not critical
    board.WriteI2C(serAddr,0xB2,0x01) 
    board.WriteI2C(serAddr,0xB1,0x07) # PGEN_BAR_SIZE0 Not critical
    board.WriteI2C(serAddr,0xB2,0xE0) 
    board.WriteI2C(serAddr,0xB1,0x08) # 8 MSB of Active Lines per frame
    board.WriteI2C(serAddr,0xB2,0x02) 
    board.WriteI2C(serAddr,0xB1,0x09) # 8 LSB of Active Lines per frame
                                      # 0x2D0 = 720 active lines 
    board.WriteI2C(serAddr,0xB2,0xD0) 
    board.WriteI2C(serAddr,0xB1,0x0A) # 8 MSB of Total Lines per frame
    board.WriteI2C(serAddr,0xB2,0x04) 
    board.WriteI2C(serAddr,0xB1,0x0B) # 8 LSB of Total Lines per frame
                                             #  0x41A = 1050 total lines (720 active + 330 blanking)
    board.WriteI2C(serAddr,0xB2,0x1A) 
    board.WriteI2C(serAddr,0xB1,0x0C) # 8 MSB of line period (determines fps)
    board.WriteI2C(serAddr,0xB2,0x0C) 
    board.WriteI2C(serAddr,0xB1,0x0D) # 8 LSB of line period (determines fps)
                                      # Line Period = [1/(fps*PGEN_TOT_LPF)] * (FC Rate / 40)
                                      # Desired fps = 30, PGEN_TOT_LPF = 1050, FC Rate = 4Gbps
                                      # Line Period = 3174.6 = 0x0C67
    board.WriteI2C(serAddr,0xB2,0x67) 
    board.WriteI2C(serAddr,0xB1,0x0E) # Vertical Back Porch Set to 33
    board.WriteI2C(serAddr,0xB2,0x21) 
    board.WriteI2C(serAddr,0xB1,0x0F) # Vertical Front Porch Set to 10
    board.WriteI2C(serAddr,0xB2,0x0A) # Vertical Sync Pulse is the remaining blanking (VSync = 330-33-10 = 287)
    
    # Forward video data from RX0 to CSI0
    board.WriteI2C(devAddr,0x20,0xE0) # Forward RX0 to CSI0
    
    # Enable CSI Port 0 on 960
    board.WriteI2C(devAddr,0x32,0x01) # CSI0 Port select
    board.WriteI2C(devAddr,0x33,0x41) # CSI0 enable

    如果没有错误、您可以尝试运行这个输出 1920x108 视频的 PATGEN 脚本。 然后看看 SoC 是否有任何问题?

    import time
    
    devAddr = 0x60
    serAddr = 0x18
    
    # Enable PATGEN on the 953
    # 1920x1080, 30fps, YUV422 8-bit
    board.WriteI2C(serAddr,0xB0,0x00) # Indirect Pattern Gen Registers 
    board.WriteI2C(serAddr,0xB1,0x01) # Enable PATGEN
    board.WriteI2C(serAddr,0xB2,0x01) 
    board.WriteI2C(serAddr,0xB1,0x02) # Configure color bar pattern in video Not critical
    board.WriteI2C(serAddr,0xB2,0x33) 
    board.WriteI2C(serAddr,0xB1,0x03) # Configure the VC-ID and CSI-2 Data Type of the video generated Need to know the CSI-2 data type. Default is RGB888.
    board.WriteI2C(serAddr,0xB2,0x1E) # 0x1E = YUV422 8-bit (16bpp)
    board.WriteI2C(serAddr,0xB1,0x04) # 8 MSB for Active Line Length in bytes
    board.WriteI2C(serAddr,0xB2,0x0F) 
    board.WriteI2C(serAddr,0xB1,0x05) # 8 LSB for Active Line Length in bytes
                                      # Example - Suppose you want to generate video for 1920x1080 at 30fps and the CSI-2 data type of the video is 16bpp
                                      # 1920pixels x 16bpp / 8bitsperbyte = 3,840 = 0xF00
    board.WriteI2C(serAddr,0xB2,0x00) 
    board.WriteI2C(serAddr,0xB1,0x06) # PGEN_BAR_SIZE1 Not critical
    board.WriteI2C(serAddr,0xB2,0x01) 
    board.WriteI2C(serAddr,0xB1,0x07) # PGEN_BAR_SIZE0 Not critical
    board.WriteI2C(serAddr,0xB2,0xE0) 
    board.WriteI2C(serAddr,0xB1,0x08) # 8 MSB of Active Lines per frame
    board.WriteI2C(serAddr,0xB2,0x04) 
    board.WriteI2C(serAddr,0xB1,0x09) # 8 LSB of Active Lines per frame
                                      # 0x0438 = 1080 active lines 
    board.WriteI2C(serAddr,0xB2,0x38) 
    board.WriteI2C(serAddr,0xB1,0x0A) # 8 MSB of Total Lines per frame
    board.WriteI2C(serAddr,0xB2,0x04) 
    board.WriteI2C(serAddr,0xB1,0x0B) # 8 LSB of Total Lines per frame
                                      #  0x4B0 = 1200 total lines (1080 active + 120 blanking)
    board.WriteI2C(serAddr,0xB2,0xB0) 
    board.WriteI2C(serAddr,0xB1,0x0C) # 8 MSB of line period (determines fps)
    board.WriteI2C(serAddr,0xB2,0x0A) 
    board.WriteI2C(serAddr,0xB1,0x0D) # 8 LSB of line period (determines fps)
                                      # Line Period = [1/(fps*PGEN_TOT_LPF)] * (FC Rate / 40)
                                      # Desired fps = 30, PGEN_TOT_LPF = 1200, FC Rate = 4Gbps
                                      # Line Period = 2777.78 = 0x0ADA
    board.WriteI2C(serAddr,0xB2,0xDA) 
    board.WriteI2C(serAddr,0xB1,0x0E) # Vertical Back Porch Set to 33
    board.WriteI2C(serAddr,0xB2,0x21) 
    board.WriteI2C(serAddr,0xB1,0x0F) # Vertical Front Porch Set to 10
    board.WriteI2C(serAddr,0xB2,0x0A) # Vertical Sync Pulse is the remaining blanking (VSync = 120-33-10 = 77)
    
    # Forward video data from RX0 to CSI0
    board.WriteI2C(devAddr,0x20,0xE0) # Forward RX0 to CSI0
    
    # Enable CSI Port 0 on 960
    board.WriteI2C(devAddr,0x32,0x01) # CSI0 Port select
    board.WriteI2C(devAddr,0x33,0x41) # CSI0 enable

    此外、960 数据表中定义了上电序列。 请确认满足此上电序列。

    此致、

    Justin Phan

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

    您好、Jusint

    我们尝试了上述配置、但问题仍然不变。 我们怀疑溢出是由于 UB960 持续输出数据、而 SoC 的 ISP 尚未准备好接收数据而引起的。 我们想知道是否有特定的寄存器参数来控制 UB960 的“启动流“操作。 我们打算测试 UB960 的输出流受到控制(即,仅在 SoC 准备充分后命令 UB960 才开始流式传输)、那么问题是否仍然存在。

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

    您好:Bingkang、

    CSI 输出通过以下两行确定:

         ds90ub960_935_write_reg(DS90UB960_ADDR, 0x32, 0x01);
         ds90ub960_935_write_reg(DS90UB960_ADDR, 0x33, 0x41);

    960 寄存器 0x32 在 CSI-2 端口上选择要修改。
    960 寄存器 0x33 配置选定的 MIPI CSI-2 端口设置并启用输出。 您可以在设置 960 寄存器 0x33 之前设置延迟、看看是否有所帮助。

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

    您好、Jusint

    请您对我们描述的问题进行分析

    此致、

    Luo Bingkang

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

    尊敬的 Bingkang:

    我很抱歉耽误了回复。 让我更深入地了解一下、并尝试在今天为您提供回应。

    此致、

    Justin Phan

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

    960 寄存器 0x54 是 SENSOR_STS_3 寄存器、是发送到解串器的串行器内的诊断功能。 在 935 数据表中、它解释了什么是 SENSOR_STS_3。

    对于“图像输出“、串行器会标记 SOT 和同步错误。 这意味着串行器正在接收 D-PHY 视频数据、但它正在检测接收到的视频数据中的一些错误。 这些可能是初始化产生的意外错误标志、因此您可以通过读取 960 个寄存器 0xDE 和 0xDF 来清除。

    在“无图像输出“的情况下、不会标记任何错误。 但这也可能表明实际没有视频数据发送到串行器。 请注意、在 960 寄存器 0x73 - 0x76 中、解串器也未检测到来自串行器的任何视频数据。  

    这基本上意味着图像传感器不会输出任何视频数据。

    您能否确认图像传感器已正确编程?

    是否有办法回读图像传感器上的寄存器以确保其已正确编程? 如果它使用参考时钟、您能否测量该时钟以确保时钟正常? 您是否还能确保图像传感器已正确加电?

    此致、

    Justin Phan