DS90UB983-Q1: 983 cs2.0的TI 芯片,patgen是否绑定固定寄存器地址屏参

Part Number: DS90UB983-Q1

我使用的是983 CS2.0串行器,

配置PATGEN的设置如下:
                    int serAddr = 0x0C;
                    WriteI2C2(serAddr, 0x40, 0x30);
                    WriteI2C2(serAddr, 0x41, 0x29);
                    WriteI2C2(serAddr, 0x42, 0x0C); // 设置PATGEN颜色深度为24bpp用于VP0
                    WriteI2C2(serAddr, 0x41, 0x28);
                    WriteI2C2(serAddr, 0x42, 0x95); // 启用VP0上的PATGEN - 注释掉此行以禁用PATGEN并启用端到端视频
                    WriteI2C2(serAddr, 0x43, 0x00);  //#Set number of VPs used = 1
                    WriteI2C2(serAddr, 0x44, 0x01);  //#disable video processors
配置VP0屏参如下:
                    
        WriteI2C(serAddr, 0x40, 0x32);
        WriteI2C(serAddr, 0x41, 0x01);
        WriteI2C(serAddr, 0x42, 0xa8); // 设置VP_SRC_SELECT为Stream 0以使用SST模式
        WriteI2C(serAddr, 0x41, 0x02);
        WriteI2C(serAddr, 0x42, 0x80); // VID H Active
        WriteI2C(serAddr, 0x42, 0x07); // VID H Active
        WriteI2C(serAddr, 0x41, 0x10);
        WriteI2C(serAddr, 0x42, 0x80); // Horizontal Active
        WriteI2C(serAddr, 0x42, 0x07); // Horizontal Active
        WriteI2C(serAddr, 0x42, 0x20); // Horizontal Back Porch
        WriteI2C(serAddr, 0x42, 0x00); // Horizontal Back Porch
        WriteI2C(serAddr, 0x42, 0x20); // Horizontal Sync
        WriteI2C(serAddr, 0x42, 0x00); // Horizontal Sync
        WriteI2C(serAddr, 0x42, 0x00); // Horizontal Total
        WriteI2C(serAddr, 0x42, 0x08); // Horizontal Total
        WriteI2C(serAddr, 0x42, 0xd0); // Vertical Active
        WriteI2C(serAddr, 0x42, 0x02); // Vertical Active
        WriteI2C(serAddr, 0x42, 0x08); // Vertical Back Porch
        WriteI2C(serAddr, 0x42, 0x00); // Vertical Back Porch
        WriteI2C(serAddr, 0x42, 0x08); // Vertical Sync
        WriteI2C(serAddr, 0x42, 0x00); // Vertical Sync
        WriteI2C(serAddr, 0x42, 0x2d); // Vertical Front Porch
        WriteI2C(serAddr, 0x42, 0x00); // Vertical Front Porch
        WriteI2C(serAddr, 0x41, 0x27);
        WriteI2C(serAddr, 0x42, 0x00); // HSYNC Polarity = +, VSYNC Polarity = +
 
问题是之前使用CS1.0的时候,配置PATGEN的WriteI2C2(serAddr, 0x42, 0x0C); 之前写的是WriteI2C2(serAddr, 0x42, 0x08);也查看寄存器手册FPD4_PGCFG_VP0 Register (Address = 0x29) ,差别是第三个bit,Timing Select Control: 1: The Pattern Generator creates its own video timing as configured in the Pattern Generator Total Frame Size, Active Frame Size, Horizontal Sync Width, Vertical Sync Width, Horizontal Back Porch, Vertical Back Porch, and Sync Configuration registers. 0: the Pattern Generator uses external video timing from the pixel clock, Data Enable, Horizontal Sync, and Vertical Sync signals. ,
所以
第一个问题:1.0和2.0中改动了什么,必须得用2.0得设置29寄存器0C才可以亮屏,
第二个问题:外部的Timing和内部的Timing设置有什么区别?
点三个问题:为什么2.0中还需要配置2b寄存器才可以,不配的话屏幕的状态看着不正常,
WriteI2C(serAddr,0x41,0x2a); //Set patgen address
            WriteI2C(serAddr,0x42,0x86); //Set patgen address auto increment
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x0); //Set patgen THW 2048
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x8); //Set patgen THW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x0D); //Set patgen TVW 781
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x03); //Set patgen TVW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x80); //Set patgen AHW 1920
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x7); //Set patgen AHW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0xd0); //Set patgen AVW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x2); //Set patgen AVW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x20); //Set patgen HSW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x0); //Set patgen HSW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x8); //Set patgen VSW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x0); //Set patgen VSW
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x20); //Set patgen HBP
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x0); //Set patgen HBP
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x8); //Set patgen VBP
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x0); //Set patgen VBP
            WriteI2C(serAddr,0x41,0x2a);
            WriteI2C(serAddr,0x42,0x96);
            WriteI2C(serAddr,0x41,0x2b);
            WriteI2C(serAddr,0x42,0x0); //HSYNC Polarity = +, VSYNC Polarity = +
  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 你好,

    第一个问题:1.0 版本和 2.0 版本之间做了哪些更改?为什么在 2.0 版本中需要设置寄存器 29 (0C) 才能点亮屏幕?

    我需要研究一下 CS1.0 和 CS2.0 之间的差异才能给出确切答案,但我初步猜测这是由于默认寄存器值的变化造成的。对于 983 来说,使用内部时序通常更稳定,因为我们需要在板载上提供一个 27MHz 的参考时钟信号。如果您希望我进一步调查,请告诉我,但我建议您始终将该寄存器写入 0xC0,除非您正在对外部视频信号进行针对性调试。

    第二个问题:外部时序设置和内部时序设置有什么区别?

    外部时序设置会强制 983 从外部视频源获取其 PATGEN 时钟信号,而不是从 983 板载的参考时钟信号获取。相反,内部时序设置会强制 983 从内部参考时钟信号获取其 PATGEN 时钟信号。

    三个问题:为什么在 2.0 版本中需要配置 2b 寄存器?如果不配置,屏幕显示会异常。

    您提供的第二个代码块将 PATGEN 间接寄存器编程为您想要显示的特定视频时序。我建议您每次都对这组寄存器进行编程,无论您使用的是 CS1.0 还是 CS2.0。至于为什么在 CS1.0 中不需要编程,而在 CS2.0 中却需要,很可能是因为默认寄存器值不同。CS2.0 中的默认寄存器值可能与您尝试显示的内容不同。根据数据手册,默认信号似乎是 1920x1080p,因此可能与您需要的时序略有偏差。

    一般来说,在对 98x FPD-Link 设备进行编程时,我建议使用 FPD-Link CDDS 中的 ScriptGen 工具。该工具可根据客户需求进行配置,并生成包含最新代码建议的定制化平面脚本。

    如果您还有其他问题,请告诉我。

    最好的,

    卡梅伦

  • Hi,

    我重新更清晰的描述我的背景和问题,这样更有助于理解我的问题
    背景:我们之前使用的型号是 PDS90HH983BARURTQ1,后来第二次采购的是PDS90HH983CARURTQ1

      第二次采购的PDS90HH983CARURTQ1,我们这里点不亮屏,所以改动了Set patgen配置中 0x29寄存器的值从0x08改成了0x0C

    根据983寄存器datasheet可以看出第三个bit  PATGEN_TSEL的区别,视频流来自于外部还是内部

    配置0x29 寄存器为0x08的时候VP0的配置是(下面这些配置统称为区域一)

            WriteI2C(serAddr, 0x40, 0x32);

            WriteI2C(serAddr, 0x41, 0x01);

            WriteI2C(serAddr, 0x42, 0xa8); // 设置VP_SRC_SELECTStream 0以使用SST模式

            WriteI2C(serAddr, 0x41, 0x02);

            WriteI2C(serAddr, 0x42, 0x80); // VID H Active

            WriteI2C(serAddr, 0x42, 0x07); // VID H Active

            WriteI2C(serAddr, 0x41, 0x10);

            WriteI2C(serAddr, 0x42, 0x80); // Horizontal Active

            WriteI2C(serAddr, 0x42, 0x07); // Horizontal Active

            WriteI2C(serAddr, 0x42, 0x20); // Horizontal Back Porch

            WriteI2C(serAddr, 0x42, 0x00); // Horizontal Back Porch

            WriteI2C(serAddr, 0x42, 0x20); // Horizontal Sync

            WriteI2C(serAddr, 0x42, 0x00); // Horizontal Sync

            WriteI2C(serAddr, 0x42, 0x00); // Horizontal Total

            WriteI2C(serAddr, 0x42, 0x08); // Horizontal Total

            WriteI2C(serAddr, 0x42, 0xd0); // Vertical Active

            WriteI2C(serAddr, 0x42, 0x02); // Vertical Active

            WriteI2C(serAddr, 0x42, 0x08); // Vertical Back Porch

            WriteI2C(serAddr, 0x42, 0x00); // Vertical Back Porch

            WriteI2C(serAddr, 0x42, 0x08); // Vertical Sync

            WriteI2C(serAddr, 0x42, 0x00); // Vertical Sync

            WriteI2C(serAddr, 0x42, 0x2d); // Vertical Front Porch

            WriteI2C(serAddr, 0x42, 0x00); // Vertical Front Porch

            WriteI2C(serAddr, 0x41, 0x27);

            WriteI2C(serAddr, 0x42, 0x00);

     

    配置0x29 寄存器为0x0C的时候VP0的配置比上方多了(下面这些配置统称为区域二)

                WriteI2C(serAddr,0x41,0x2a); //Set patgen address

                WriteI2C(serAddr,0x42,0x86); //Set patgen address auto increment

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x0); //Set patgen THW 2048

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x8); //Set patgen THW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x0D); //Set patgen TVW 781

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x03); //Set patgen TVW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x80); //Set patgen AHW 1920

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x7); //Set patgen AHW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0xd0); //Set patgen AVW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x2); //Set patgen AVW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x20); //Set patgen HSW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x0); //Set patgen HSW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x8); //Set patgen VSW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x0); //Set patgen VSW

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x20); //Set patgen HBP

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x0); //Set patgen HBP

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x8); //Set patgen VBP

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x0); //Set patgen VBP

                WriteI2C(serAddr,0x41,0x2a);

                WriteI2C(serAddr,0x42,0x96);

                WriteI2C(serAddr,0x41,0x2b);

                WriteI2C(serAddr,0x42,0x0); //HSYC Polarity = +, VSYNC Polarity = +

     

    一开始我这里配置0x29 寄存器为0x0C时并未加入新增的区域二这些寄存器配置

    发现屏虽然可以点亮,但是会有各种异常,比如屏闪,reset以后屏不亮

    加入区域二,一切都正常了

     

    由此产生了几个问题:

    1: PDS90HH983BARURTQ1 PDS90HH983CARURTQ1做了什么改动,导致需要改0x29 寄存器为0x0C才可以点亮屏?

    1. 0x29 寄存器配置成0x08或者0x0C,是视频流来源于外部和内部的区别,0x08来源于外部视频线(区域一对0x01寄存器写入默认值0xa8),这些VPTiming配置是在哪配置的?或者说来源于区域一的配置,但是区域一更像是内部配置
    2. 如果0x08来源于外部视频线,我理解配置成0x0C,就不应该可以来源于外部视频线,那就不应该可以通过HDMI投屏,但是现在可以投屏
    3. 为什么0x29寄存器配置成了0x0C,会多出区域二那么多Timing的配置,区域一和区域二Timing的配置在寄存器配置后,真正生效的是否只有区域二?那么区域一的作用是什么?

     

    Best Regards

    Chen Shaojie