Part Number:DS90UB983-Q1Other Parts Discussed in Thread:DS90UH984-Q1
We want to know how to use two interrupts at the same time to support the touch of two screens.
We are using a DS90UB983 as the add-serializer and DS90UB944 and DS90UB948 as the deserializers. Can 983 support this?
Please send the 983 configuration that supports two different deserializer interrupts?
Taylor:
您好,
已经收到了您的案例,调查需要些时间,感谢您的耐心等待。
,
Alice:
您好,
您是否打算使用INTB或GPIO引脚来处理来自两个不同解串器的中断。
您可以将每个相应端口的 REM_INTB 映射到不同的 GPIO。
,
Dennis Duncan:
您好,
目前我们的板子设计的983的INTB和gpio4来处理两个不同解串器的中断,目前也只有INTB的中断可以传过来,将gpio4配置为REM_INTB的始终传不过来,我们使用过你们datasheet里的配置也不行,是否对不同解串器需要有特殊配置?能否发一份参考的中断配置我们试一下;
thanks!
,
Dennis Duncan:
您好,
目前我们的板子设计的983的INTB和gpio4来处理两个不同解串器的中断,目前也只有INTB的中断可以传过来,将gpio4配置为REM_INTB的始终传不过来,我们使用过你们datasheet里的配置也不行,是否对不同解串器需要有特殊配置?能否发一份参考的中断配置我们试一下;
thanks!
,
Alice:
您好,
您能否提供寄存器配置和系统的示意图,以便能了解哪个设备连接到哪个FPD-Link端口?
,
Dennis Duncan:
您好,
983的系统框图如下:
int 硬件io 配置如下(红色选中的):
其中: port0上接的是TI944的屏, port1上接的是TI948的屏。 软件目前的配置是:/********************************************* **remote interrupt config*********************************************/ ti983_write_byte(ti_bridge->ti983_i2c, 0xc6, 0x21); ti983_write_byte(ti_bridge->ti983_i2c, 0x1b, 0x88); // to port0 ti983_write_byte(ti_bridge->ti983_i2c, 0x51, 0x83); 这样配置后, port0上的屏中断可以透传过来, 使用示波器测量REM_INTB的引脚, 触屏可以看到示波器上有电平变化。 但是如果将参数配置为:/********************************************* **remote interrupt config*********************************************/ ti983_write_byte(ti_bridge->ti983_i2c, 0xc6, 0x21); ti983_write_byte(ti_bridge->ti983_i2c, 0x1b, 0x98); // to port1 ti983_write_byte(ti_bridge->ti983_i2c, 0x51, 0x83);这里触摸port1对应的屏, 示波器上没有电平变化。 一直为高。 注:已确认屏端的INTB是有电平变化的。而且,示波器查看TI983的INTB对应的引脚, 它一直是高电平, 没有变化。 另外, 也验证过网上查到的一些配置,如:983配置选择FPD Link1上的INTB中断输入配置 ti983_write_byte(ti_bridge->ti983_i2c,,0xC6,0x21);ti983_write_byte(ti_bridge->ti983_i2c,0x1B,0x88);ti983_write_byte(ti_bridge->ti983_i2c,0x51,0x83);ti983_write_byte(ti_bridge->ti983_i2c,0x40,0x24);ti983_write_byte(ti_bridge->ti983_i2c,0x41,0x8C);ti983_write_byte(ti_bridge->ti983_i2c,0x42,0x20); 选择FPD Link2上的INTB中断输入配置: ti983_write_byte(ti_bridge->ti983_i2c,0xC6,0x21);ti983_write_byte(ti_bridge->ti983_i2c,0x1B,0x98); ti983_write_byte(ti_bridge->ti983_i2c,0x51,0x83);ti983_write_byte(ti_bridge->ti983_i2c,0x40,0x24);ti983_write_byte(ti_bridge->ti983_i2c,0x41,0x9C);ti983_write_byte(ti_bridge->ti983_i2c,0x42,0x20); 这样配置后,结果也还是一样, port1上的屏中断传不过来。
,
Dennis Duncan:
您好,
下面补充一下我们在使用的983 完整的配置## TI Confidential – NDA Restrictions
##
## Copyright 2018 Texas Instruments Incorporated. All rights reserved.
##
## IMPORTANT: Your use of this Software is limited to those specific rights
## granted under the terms of a software license agreement between the user who
## downloaded the software, his/her employer (which must be your employer) and
## Texas Instruments Incorporated (the License). You may not use this Software
## unless you agree to abide by the terms of the License. The License limits your
## use, and you acknowledge, that the Software may not be modified, copied or
## distributed unless embedded on a Texas Instruments microcontroller which is
## integrated into your product. Other than for the foregoing purpose, you may
## not use, reproduce, copy, prepare derivative works of, modify, distribute,
## perform, display or sell this Software and/or its documentation for any
## purpose.
##
## YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
## PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
## INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
## NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL TEXAS
## INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
## NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL
## EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT
## LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL
## DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS,
## TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT
## LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
##
## Should you have any questions regarding your right to use this Software,
## contact Texas Instruments Incorporated at www.TI.com.
#### DS90xx98x-Q1 Auto Script Generation Output
## Tool Version 5.4import time
## Serializer: DS90Ux983-Q1
## User Inputs:
## Serializer I2C Address= 0x18
## Max DP Lane Count = 2
## Max DP Lane Rate = 8.1Gbps
## DPRX no SSC Mode Enabled
## DP MST Mode Enabled
## DP Mode Enabled
## FPD-Link Configuration: FPD-Link IV Port 0, FPD-Link III Port 1 – 6.75Gbps Port 0## Number of Displays = 2
## Video Processor 0 (Stream 0) Properties:
## Total Horizontal Pixels = 2768
## Total Vertical Lines = 1490
## Active Horizontal Pixels = 2560
## Active Vertical Lines = 1440
## Horizontal Back Porch = 60
## Vertical Back Porch = 20
## Horizontal Sync = 60
## Vertical Sync = 2
## Horizontal Front Porch = 88
## Vertical Front Porch = 28
## Horizontal Sync Polarity = Positive
## Vertical Sync Polarity = Positive
## Bits per pixel = 24
## Pixel Clock = 247.46MHz
## PATGEN Disabled## Video Processor 1 (Stream 1) Properties:
## Total Horizontal Pixels = 2052
## Total Vertical Lines = 761
## Active Horizontal Pixels = 1920
## Active Vertical Lines = 720
## Horizontal Back Porch = 32
## Vertical Back Porch = 6
## Horizontal Sync = 28
## Vertical Sync = 5
## Horizontal Front Porch = 72
## Vertical Front Porch = 30
## Horizontal Sync Polarity = Negative
## Vertical Sync Polarity = Negative
## Bits per pixel = 24
## Pixel Clock = 90.6MHz
## PATGEN Disabled## Deserializer 0: DS90UH984-Q1
## User Inputs:
## Deserializer I2C Address = 0x70
## Deserializer I2C Alias = 0x70
## Override of DES eFuse enabled
## DP Port 0 Enabled
## DP0 Video Source = Serializer Stream 0
## DP Port 0 PatGen Disabled
## DP Port 1 Disabled
## DP Port 1 PatGen Disabled
## DP Rate set to 2.7 Gbps
## DP lane number set to 4 lanes## *********************************************
## Set up Variables
## *********************************************
serAddr = 0x18
desAddr0 = 0x70
desAlias0 = 0x70
desAddr1 = 0x70
desAlias1 = 0x72
board.WriteI2C(serAddr,0x70,desAddr0)
board.WriteI2C(serAddr,0x78,desAlias0)
board.WriteI2C(serAddr,0x88,0x0)
board.WriteI2C(serAddr,0x71,desAddr1)
board.WriteI2C(serAddr,0x79,desAlias1+1)
board.WriteI2C(serAddr,0x89,0x0)
board.WriteI2C(serAddr,0x3a,0x88) #Disable remote contorller on FPD port 0 and port 1 – comment out if there is an I2C controller on the remote side## *********************************************
## Check MODE Strapping
## *********************************************
FPD4_Strap_Rate_P0 = 0
FPD4_Strap_Rate_P1 = 0
SSCG_FDEV_STRAP = 0
SSCG_FMOD_STRAP = 0
SSCG_TYPE_STRAP = "none"
TX_MODE_STS = board.ReadI2C(serAddr,0x27,1)
if TX_MODE_STS == 0:
print "Error: No Serializer Detected"
GENERAL_CFG = board.ReadI2C(serAddr,0x7,1)
if GENERAL_CFG & 0x01 == 1:
print "MODE Strapped for FPD III Mode"
FPD4_Strap_Rate_P0 = 0
FPD4_Strap_Rate_P1 = 0
TX_MODE_STRAP = "FPD3"
else:
if TX_MODE_STS & 0x0F == 0x0F:
print "MODE Strapped for FPD III Mode"
FPD4_Strap_Rate_P0 = 0
FPD4_Strap_Rate_P1 = 0
print "MODE Strapped for Independent Mode"
TX_MODE_STRAP = "Independent"
if TX_MODE_STS & 0x0F == 0x08:
print "MODE Strapped for FPD IV 10.8Gbps"
FPD4_Strap_Rate_P0 = 10.8
FPD4_Strap_Rate_P1 = 10.8
print "MODE Strapped for Dual Mode"
TX_MODE_STRAP = "Dual"
if TX_MODE_STS & 0x0F == 0x09:
print "MODE Strapped for FPD IV 10.8Gbps"
FPD4_Strap_Rate_P0 = 10.8
FPD4_Strap_Rate_P1 = 10.8
print "MODE Strapped for Independent Mode"
TX_MODE_STRAP = "Independent"
if TX_MODE_STS & 0x0F == 0x0A:
print "MODE Strapped for FPD IV 13.5Gbps"
FPD4_Strap_Rate_P0 = 13.5
FPD4_Strap_Rate_P1 = 13.5
print "MODE Strapped for Dual Mode"
TX_MODE_STRAP = "Dual"
if TX_MODE_STS & 0x0F == 0x0B:
print "MODE Strapped for FPD IV 13.5Gbps"
FPD4_Strap_Rate_P0 = 13.5
FPD4_Strap_Rate_P1 = 13.5
print "MODE Strapped for Independent Mode"
TX_MODE_STRAP = "Independent"
if TX_MODE_STS & 0x0F == 0x0C:
print "MODE Strapped for FPD IV 6.75Gbps"
FPD4_Strap_Rate_P0 = 6.75
FPD4_Strap_Rate_P1 = 6.75
print "MODE Strapped for Dual Mode"
TX_MODE_STRAP = "Dual"
if TX_MODE_STS & 0x0F == 0x0D:
print "MODE Strapped for FPD IV 6.75Gbps"
FPD4_Strap_Rate_P0 = 6.75
FPD4_Strap_Rate_P1 = 6.75
print "MODE Strapped for Independent Mode"
TX_MODE_STRAP = "Independent"
if TX_MODE_STS & 0x0F == 0x0E:
print "MODE Strapped for FPD IV 3.375Gbps"
FPD4_Strap_Rate_P0 = 3.375
FPD4_Strap_Rate_P1 = 3.375
print "MODE Strapped for Independent Mode"
TX_MODE_STRAP = "Independent"## *********************************************
## Program SER to FPD-Link IV mode
## *********************************************
TX_MODE = "Mixed"
board.WriteI2C(serAddr,0x59,0x2) #Enable FPD III mode on port 1
if TX_MODE != TX_MODE_STRAP:
print "Override to Mixed FPD III/IV Mode"
board.WriteI2C(serAddr,0x5,0xc) #Force FPD4 mode on port 0, FPD III mode on port 1
board.WriteI2C(serAddr,0x1,0x1) #Soft Reset SER
time.sleep(0.04)## *********************************************
## Set up FPD IV PLL Settings
## *********************************************
FPD0_Rate = 6.75
FPD1_Rate = 0
SSCG_FDEV_0 = 0
SSCG_FMOD_0 = 0
SSCG_TYPE_0 = "none"
if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):
print "FPD IV script rate mismatched with strapped rate for FPD Port 0 – Overriding Port 0 PLL settings"
board.WriteI2C(serAddr,0x40,0x8) #Select PLL reg page
board.WriteI2C(serAddr,0x41,0x1b)
board.WriteI2C(serAddr,0x42,0x8) #Disable PLL0
if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):
board.WriteI2C(serAddr,0x40,0x8) #Select PLL page
board.WriteI2C(serAddr,0x41,0x5) #Select Ncount Reg
board.WriteI2C(serAddr,0x42,0x7d) #Set Ncount
board.WriteI2C(serAddr,0x41,0x13) #Select post div reg
board.WriteI2C(serAddr,0x42,0x90) #Set post div for 6.75 Gbps
board.WriteI2C(serAddr,0x2d,0x1) #Select write reg to port 0
board.WriteI2C(serAddr,0x6a,0xa) #set BC sampling rate
board.WriteI2C(serAddr,0x6e,0x80) #set BC fractional sampling
board.WriteI2C(serAddr,0x40,0x4) #Select FPD page and set BC settings for FPD IV port 0
board.WriteI2C(serAddr,0x41,0x6)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0xd)
board.WriteI2C(serAddr,0x42,0x34)
board.WriteI2C(serAddr,0x41,0xe)
board.WriteI2C(serAddr,0x42,0x53)
if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):
board.WriteI2C(serAddr,0x2,0x11) #Set HALFRATE_MODE Override
board.WriteI2C(serAddr,0x2,0xd1) #Set HALFRATE_MODE
board.WriteI2C(serAddr,0x2,0xd0) #Unset HALFRATE_MODE Overrideif (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):
board.WriteI2C(serAddr,0x40,0x8) #Zero out fractional PLL for port 0
board.WriteI2C(serAddr,0x41,0x4)
board.WriteI2C(serAddr,0x42,0x1)
board.WriteI2C(serAddr,0x41,0x14)
board.WriteI2C(serAddr,0x42,0x80)
board.WriteI2C(serAddr,0x41,0x15)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x16)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x17)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x18)
board.WriteI2C(serAddr,0x42,0xf6)
board.WriteI2C(serAddr,0x41,0x19)
board.WriteI2C(serAddr,0x42,0xff)
board.WriteI2C(serAddr,0x41,0x1a)
board.WriteI2C(serAddr,0x42,0xff)
board.WriteI2C(serAddr,0x41,0x1e)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x1f)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x20)
board.WriteI2C(serAddr,0x42,0x0)## *********************************************
## Configure and Enable PLLs
## *********************************************
if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):
board.WriteI2C(serAddr,0x40,0x8) #Select PLL page
board.WriteI2C(serAddr,0x41,0xe) #Select VCO reg
board.WriteI2C(serAddr,0x42,0xc7) #Set VCO
if (FPD1_Rate != FPD4_Strap_Rate_P1) or (SSCG_FDEV_STRAP != SSCG_FDEV_1) or (SSCG_FMOD_STRAP != SSCG_FMOD_1) or (SSCG_TYPE_STRAP != SSCG_TYPE_1):
board.WriteI2C(serAddr,0x40,0x8) #Select PLL page
board.WriteI2C(serAddr,0x41,0x4e) #Select VCO reg
board.WriteI2C(serAddr,0x42,0xc7) #Set VCO
if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):
board.WriteI2C(serAddr,0x1,0x30) #soft reset PLL
if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):
board.WriteI2C(serAddr,0x40,0x8) #Select PLL page
board.WriteI2C(serAddr,0x41,0x1b)
board.WriteI2C(serAddr,0x42,0x0) #Enable PLL0
if (FPD1_Rate != FPD4_Strap_Rate_P1) or (SSCG_FDEV_STRAP != SSCG_FDEV_1) or (SSCG_FMOD_STRAP != SSCG_FMOD_1) or (SSCG_TYPE_STRAP != SSCG_TYPE_1):
board.WriteI2C(serAddr,0x40,0x8) #Select PLL page
board.WriteI2C(serAddr,0x41,0x5b)
board.WriteI2C(serAddr,0x42,0x0) #Enable PLL1
if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):
board.WriteI2C(serAddr,0x1,0x1) #soft reset Ser
time.sleep(0.04)
print("Enable I2C Passthrough")
I2C_PASS_THROUGH = board.ReadI2C(serAddr,0x7,1)
I2C_PASS_THROUGH_MASK = 0x08
I2C_PASS_THROUGH_REG = I2C_PASS_THROUGH | I2C_PASS_THROUGH_MASK
board.WriteI2C(serAddr,0x07,I2C_PASS_THROUGH_REG) #Enable I2C Passthrough
board.WriteI2C(desAlias0,0x1,0x1) #Soft reset Des
time.sleep(0.04)
else:
print("Enable I2C Passthrough")
I2C_PASS_THROUGH = board.ReadI2C(serAddr,0x7,1)
I2C_PASS_THROUGH_MASK = 0x08
I2C_PASS_THROUGH_REG = I2C_PASS_THROUGH | I2C_PASS_THROUGH_MASK
board.WriteI2C(serAddr,0x07,I2C_PASS_THROUGH_REG) #Enable I2C Passthrough
board.WriteI2C(serAddr,0x2d,0x1) #Select write to port0 reg## *********************************************
## Set DP Config
## *********************************************
board.WriteI2C(serAddr,0x40,0x24) #Force HPD Low to configure 983 DP Settings
board.WriteI2C(serAddr,0x41,0x1)
board.WriteI2C(serAddr,0x42,0x2)board.WriteI2C(serAddr,0x48,0x1) #Enable APB Interface
board.WriteI2C(serAddr,0x49,0x74) #Set max advertised link rate = 8.1Gbps
board.WriteI2C(serAddr,0x4a,0x0)
board.WriteI2C(serAddr,0x4b,0x1e)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x70) #Set max advertised lane count = 2
board.WriteI2C(serAddr,0x4a,0x0)
board.WriteI2C(serAddr,0x4b,0x2)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x14) #Request min VOD swing of 0x02
board.WriteI2C(serAddr,0x4a,0x2)
board.WriteI2C(serAddr,0x4b,0x2)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)#Lane Rate Optimizations for 8.1Gbps No SSC
board.WriteI2C(serAddr,0x40,0x10)
board.WriteI2C(serAddr,0x41,0x30)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x4c)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x50)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x56)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x40,0x10)
board.WriteI2C(serAddr,0x41,0xb0)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0xcc)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0xd0)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0xd6)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x40,0x14)
board.WriteI2C(serAddr,0x41,0x30)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x4c)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x50)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0x56)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x40,0x14)
board.WriteI2C(serAddr,0x41,0xb0)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0xcc)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0xd0)
board.WriteI2C(serAddr,0x42,0x0)
board.WriteI2C(serAddr,0x41,0xd6)
board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x49,0x18) #Set SST/MST mode, DP/eDP Mode, and Yes/No SSC Downspread Support
board.WriteI2C(serAddr,0x4a,0x0)
board.WriteI2C(serAddr,0x4b,0x4)
board.WriteI2C(serAddr,0x4c,0x1)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x4) #Set MST_PAYLOAD_ID
board.WriteI2C(serAddr,0x4a,0x9)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x8) #Set MST_PAYLOAD_ID
board.WriteI2C(serAddr,0x4a,0x9)
board.WriteI2C(serAddr,0x4b,0x2)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x0) #Set DP Virtual Sink 0 Settings
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x4) #Set DP Virtual Sink 0 Settings
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x4)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x18) #Set DP Virtual Sink 0 Settings
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x14) #Set DP Virtual Sink 0 Settings
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x0) #Set DP Virtual Sink 1 Settings
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x4) #Set DP Virtual Sink 1 Settings
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x4)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x18) #Set DP Virtual Sink 1 Settings
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x14) #Set DP Virtual Sink 1 Settings
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x40,0x24) #Force HPD high to trigger link training
board.WriteI2C(serAddr,0x41,0x1)
board.WriteI2C(serAddr,0x42,0x0)#time.sleep(0.5) # Allow time after HPD is pulled high for the source to train and provide video (may need to adjust based on source properties)
## *********************************************
## Program PLLs
## *********************************************
# Program PLL for Port 1: FPD III Mode 3171.0Mbps
board.WriteI2C(serAddr,0x40,0x8)
board.WriteI2C(serAddr,0x41,0x44)
board.WriteI2C(serAddr,0x42,0x9) #Set fractional mash order
board.WriteI2C(serAddr,0x41,0x53)
board.WriteI2C(serAddr,0x42,0xe0) #Set VCO Post Div = 4, VCO Auto Sel for CS2.0
board.WriteI2C(serAddr,0x40,0xa) #Set auto increment
board.WriteI2C(serAddr,0x41,0x45)
board.WriteI2C(serAddr,0x42,0x75) #Set Ndiv = 117
board.WriteI2C(serAddr,0x42,0x0) #Set Ndiv = 117
board.WriteI2C(serAddr,0x41,0x58)
board.WriteI2C(serAddr,0x42,0xf6) #Set denominator = 16777206
board.WriteI2C(serAddr,0x42,0xff) #Set denominator = 16777206
board.WriteI2C(serAddr,0x42,0xff) #Set denominator = 16777206
board.WriteI2C(serAddr,0x41,0x5e)
board.WriteI2C(serAddr,0x42,0x18) #Set numerator = 7456536
board.WriteI2C(serAddr,0x42,0xc7) #Set numerator = 7456536
board.WriteI2C(serAddr,0x42,0x71) #Set numerator = 7456536if FPD4_Strap_Rate_P1 != 0:
board.WriteI2C(serAddr,0x40,0x4) #Set FPD Page to configure BC Settings for Port 1
board.WriteI2C(serAddr,0x41,0x26)
board.WriteI2C(serAddr,0x42,0xff)
board.WriteI2C(serAddr,0x41,0x2d)
board.WriteI2C(serAddr,0x42,0x70)
board.WriteI2C(serAddr,0x41,0x2e)
board.WriteI2C(serAddr,0x42,0x70)
board.WriteI2C(serAddr,0x1,0x10) #Reset PLL 1
time.sleep(0.1)## *********************************************
## Program VP Configs
## *********************************************
print("Configure Video Processors")
# Configure VP 0
board.WriteI2C(serAddr,0x40,0x32)
board.WriteI2C(serAddr,0x41,0x1)
board.WriteI2C(serAddr,0x42,0xa8) #Set VP Source to MST0
board.WriteI2C(serAddr,0x41,0x2)
board.WriteI2C(serAddr,0x42,0x0) #VID H Active
board.WriteI2C(serAddr,0x42,0xa) #VID H Active
board.WriteI2C(serAddr,0x41,0x10)
board.WriteI2C(serAddr,0x42,0x0) #Horizontal Active
board.WriteI2C(serAddr,0x42,0xa) #Horizontal Active
board.WriteI2C(serAddr,0x42,0x3c) #Horizontal Back Porch
board.WriteI2C(serAddr,0x42,0x0) #Horizontal Back Porch
board.WriteI2C(serAddr,0x42,0x3c) #Horizontal Sync
board.WriteI2C(serAddr,0x42,0x0) #Horizontal Sync
board.WriteI2C(serAddr,0x42,0xd0) #Horizontal Total
board.WriteI2C(serAddr,0x42,0xa) #Horizontal Total
board.WriteI2C(serAddr,0x42,0xa0) #Vertical Active
board.WriteI2C(serAddr,0x42,0x5) #Vertical Active
board.WriteI2C(serAddr,0x42,0x14) #Vertical Back Porch
board.WriteI2C(serAddr,0x42,0x0) #Vertical Back Porch
board.WriteI2C(serAddr,0x42,0x2) #Vertical Sync
board.WriteI2C(serAddr,0x42,0x0) #Vertical Sync
board.WriteI2C(serAddr,0x42,0x1c) #Vertical Front Porch
board.WriteI2C(serAddr,0x42,0x0) #Vertical Front Porch
board.WriteI2C(serAddr,0x41,0x27)
board.WriteI2C(serAddr,0x42,0x0) #HSYNC Polarity = +, VSYNC Polarity = +
board.WriteI2C(serAddr,0x41,0x23) #M/N Register
board.WriteI2C(serAddr,0x42,0xed) #M value
board.WriteI2C(serAddr,0x42,0x2e) #M value
board.WriteI2C(serAddr,0x42,0xf) #N value# Configure VP 1
board.WriteI2C(serAddr,0x40,0x32)
board.WriteI2C(serAddr,0x41,0x41)
board.WriteI2C(serAddr,0x42,0xa9) #Set VP Source to MST1
board.WriteI2C(serAddr,0x41,0x42)
board.WriteI2C(serAddr,0x42,0x80) #VID H Active
board.WriteI2C(serAddr,0x42,0x7) #VID H Active
board.WriteI2C(serAddr,0x41,0x50)
board.WriteI2C(serAddr,0x42,0x80) #Horizontal Active
board.WriteI2C(serAddr,0x42,0x7) #Horizontal Active
board.WriteI2C(serAddr,0x42,0x20) #Horizontal Back Porch
board.WriteI2C(serAddr,0x42,0x0) #Horizontal Back Porch
board.WriteI2C(serAddr,0x42,0x1c) #Horizontal Sync
board.WriteI2C(serAddr,0x42,0x0) #Horizontal Sync
board.WriteI2C(serAddr,0x42,0x4) #Horizontal Total
board.WriteI2C(serAddr,0x42,0x8) #Horizontal Total
board.WriteI2C(serAddr,0x42,0xd0) #Vertical Active
board.WriteI2C(serAddr,0x42,0x2) #Vertical Active
board.WriteI2C(serAddr,0x42,0x6) #Vertical Back Porch
board.WriteI2C(serAddr,0x42,0x0) #Vertical Back Porch
board.WriteI2C(serAddr,0x42,0x5) #Vertical Sync
board.WriteI2C(serAddr,0x42,0x0) #Vertical Sync
board.WriteI2C(serAddr,0x42,0x1e) #Vertical Front Porch
board.WriteI2C(serAddr,0x42,0x0) #Vertical Front Porch
board.WriteI2C(serAddr,0x41,0x67)
board.WriteI2C(serAddr,0x42,0x6) #HSYNC Polarity = -, VSYNC Polarity = –
board.WriteI2C(serAddr,0x41,0x63) #M/N Register
board.WriteI2C(serAddr,0x42,0x2e) #M value
board.WriteI2C(serAddr,0x42,0x11) #M value
board.WriteI2C(serAddr,0x42,0xf) #N value## *********************************************
## Disable Frame Reset
## *********************************************
board.WriteI2C(serAddr,0x48,0x1) #Enable APB Interface
board.WriteI2C(serAddr,0x49,0x18) #Check for Video
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x48,0x3)
apbData0 = board.ReadI2C(serAddr,0x4b,1)
apbData1 = board.ReadI2C(serAddr,0x4c,1)
apbData2 = board.ReadI2C(serAddr,0x4d,1)
apbData3 = board.ReadI2C(serAddr,0x4e,1)
apbData = (apbData3<<24) | (apbData2<<16) | (apbData1<<8) | (apbData0<<0)
if apbData & 0x01 != 0x01:
print("Warning! Video is not available from the DP source yet. Disable frame reset command will not be applied!")
else:
print("Disable Frame Reset")
board.WriteI2C(serAddr,0x49,0x18) #Disable Frame Reset for VS0
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x5)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x18) #Disable Frame Reset for VS1
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x5)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x14) #Disable DTG for VS0
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x0)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x14) #Disable DTG for VS1
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x0)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
time.sleep(0.02) # Delay > 1/FPS (example is 20ms for 60FPS)
board.WriteI2C(serAddr,0x49,0x0) #Disable VS0
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x0)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x0) #Disable VS1
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x0)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x14) #Enable DTG for VS0
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x14) #Enable DTG for VS1
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x0) #Enable VS0
board.WriteI2C(serAddr,0x4a,0xa)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)
board.WriteI2C(serAddr,0x49,0x0) #Enable VS1
board.WriteI2C(serAddr,0x4a,0xb)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)## *********************************************
## Enable VPs
## *********************************************
print("Enable Video Processors")
board.WriteI2C(serAddr,0x43,0x1) #Set number of VPs used = 2
board.WriteI2C(serAddr,0x44,0x3) #Enable video processors## *********************************************
## Check if VP is synchronized to DP input
## *********************************************
time.sleep(0.1) # Delay for VPs to sync to DP sourceretry = 0
board.WriteI2C(serAddr,0x40,0x31) #Select VP Page
board.WriteI2C(serAddr,0x41,0x28)
PATGEN_VP0 = board.ReadI2C(serAddr,0x42,1)
if ((PATGEN_VP0 & 0x01) == 1):
print "VP0 sync status bypassed since PATGEN is enabled"
VP0sts = 1
else:
board.WriteI2C(serAddr,0x41,0x30)
VP0sts = board.ReadI2C(serAddr,0x42,1)
print "VP0sts =",(VP0sts & 0x01)
while ((VP0sts & 0x01) == 0) and retry < 10:
print "VP0 Not Synced – Delaying 100ms. Retry =", retry
time.sleep(0.1)
board.WriteI2C(serAddr,0x41,0x30)
VP0sts = board.ReadI2C(serAddr,0x42,1)
retry = retry + 1
if ((VP0sts & 0x01) == 1) and retry < 10:
print "VP0 Syned"
else:
print "Unable to achieve VP0 sync"
board.WriteI2C(serAddr,0x41,0x68)
PATGEN_VP1 = board.ReadI2C(serAddr,0x42,1)
if ((PATGEN_VP1 & 0x01) == 1):
print "VP1 sync status bypassed since PATGEN is enabled"
VP1sts = 1
else:
board.WriteI2C(serAddr,0x41,0x70)
VP1sts = board.ReadI2C(serAddr,0x42,1)
print "VP1sts =",(VP1sts & 0x01)
while ((VP1sts & 0x01) == 0) and retry < 10:
print "VP1 Not Synced – Delaying 100ms. Retry =", retry
time.sleep(0.1)
board.WriteI2C(serAddr,0x41,0x70)
VP1sts = board.ReadI2C(serAddr,0x42,1)
retry = retry + 1
if ((VP1sts & 0x01) == 1) and retry < 10:
print "VP1 Syned"
else:
print "Unable to achieve VP1 sync"if (VP0sts & 0x01 == 0) or (VP1sts & 0x01 == 0):
print("VPs not synchronized – performing video input reset")
board.WriteI2C(serAddr,0x49,0x54) # Video Input Reset if VP is not syncronized
board.WriteI2C(serAddr,0x4a,0x0)
board.WriteI2C(serAddr,0x4b,0x1)
board.WriteI2C(serAddr,0x4c,0x0)
board.WriteI2C(serAddr,0x4d,0x0)
board.WriteI2C(serAddr,0x4e,0x0)## *********************************************
## Set FPD3 Stream Mapping
## *********************************************
board.WriteI2C(serAddr,0x2d,0x12) #Select FPD TX Port 1
board.WriteI2C(serAddr,0x57,0x1) #Set FPD TX Port 1 Stream Source = VP1board.WriteI2C(serAddr,0x5b,0x2b) #Enable FPD III FIFO
## *********************************************
## Configure Serializer TX Link Layer
## *********************************************
print("Configure serializer TX link layer")
board.WriteI2C(serAddr,0x40,0x2e) #Link layer Reg page
board.WriteI2C(serAddr,0x41,0x1) #Select LINK0_STREAM_EN
board.WriteI2C(serAddr,0x42,0x1) #Enable Link Layer 0 Streams
board.WriteI2C(serAddr,0x41,0x6) #Select LINK0_SLOT_REQ0
board.WriteI2C(serAddr,0x42,0x41) #Set number of time slots
board.WriteI2C(serAddr,0x41,0x20) #Set Link layer vp bpp
board.WriteI2C(serAddr,0x42,0x55) #Set Link layer vp bpp according to VP Bit per pixel
board.WriteI2C(serAddr,0x41,0x0) #Link layer enable
board.WriteI2C(serAddr,0x42,0xf) #Link layer enable## *********************************************
## Check for DES0 Communication
## *********************************************
DES_READBACK = board.ReadI2C(desAlias0,0x0,1)
if DES_READBACK == 0:
print "Error – no DES detected"
else:
print "Deserializer detected successfully"
## *********************************************
## Override DES0 eFuse
## *********************************************
board.WriteI2C(desAlias0,0x49,0xc)
board.WriteI2C(desAlias0,0x4a,0x0)
board.WriteI2C(desAlias0,0x48,0x1b)
UNIQUEID_Reg0xC = board.ReadI2C(desAlias0,0x4b,1)
if UNIQUEID_Reg0xC != 0x19 and DES_READBACK != 0:
print "Non-Final DES Silicon Detected – Overriding DES eFuse"
board.WriteI2C(desAlias0,0xe,0x3)
board.WriteI2C(desAlias0,0x61,0x0)
board.WriteI2C(desAlias0,0x5a,0x74)
board.WriteI2C(desAlias0,0x5f,0x4)
board.WriteI2C(desAlias0,0x40,0x3c)
board.WriteI2C(desAlias0,0x41,0xf5)
board.WriteI2C(desAlias0,0x42,0x21)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0x43)
board.WriteI2C(desAlias0,0x42,0x3)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0x43)
board.WriteI2C(desAlias0,0x42,0x3)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0x5)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0x5)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0x6)
board.WriteI2C(desAlias0,0x42,0x1)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0x6)
board.WriteI2C(desAlias0,0x42,0x1)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0x37)
board.WriteI2C(desAlias0,0x42,0x32)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0x37)
board.WriteI2C(desAlias0,0x42,0x32)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0x8d)
board.WriteI2C(desAlias0,0x42,0xff)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0x8d)
board.WriteI2C(desAlias0,0x42,0xff)
board.WriteI2C(desAlias0,0x40,0x5c)
board.WriteI2C(desAlias0,0x41,0x20)
board.WriteI2C(desAlias0,0x42,0x3c)
board.WriteI2C(desAlias0,0x41,0xa0)
board.WriteI2C(desAlias0,0x42,0x3c)
board.WriteI2C(desAlias0,0x40,0x38)
board.WriteI2C(desAlias0,0x41,0x24)
board.WriteI2C(desAlias0,0x42,0x61)
board.WriteI2C(desAlias0,0x41,0x54)
board.WriteI2C(desAlias0,0x42,0x61)
board.WriteI2C(desAlias0,0x41,0x2c)
board.WriteI2C(desAlias0,0x42,0x19)
board.WriteI2C(desAlias0,0x41,0x5c)
board.WriteI2C(desAlias0,0x42,0x19)
board.WriteI2C(desAlias0,0x41,0x2e)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x41,0x5e)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x40,0x10)
board.WriteI2C(desAlias0,0x41,0x18)
board.WriteI2C(desAlias0,0x42,0x4b)
board.WriteI2C(desAlias0,0x41,0x38)
board.WriteI2C(desAlias0,0x42,0x4b)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0x15)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0x15)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0x4a)
board.WriteI2C(desAlias0,0x42,0x1)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0x4a)
board.WriteI2C(desAlias0,0x42,0x1)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0xaa)
board.WriteI2C(desAlias0,0x42,0x2c)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0xaa)
board.WriteI2C(desAlias0,0x42,0x2c)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0xab)
board.WriteI2C(desAlias0,0x42,0x2c)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0xab)
board.WriteI2C(desAlias0,0x42,0x2c)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0xac)
board.WriteI2C(desAlias0,0x42,0x4c)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0xac)
board.WriteI2C(desAlias0,0x42,0x4c)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0xad)
board.WriteI2C(desAlias0,0x42,0x4c)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0xad)
board.WriteI2C(desAlias0,0x42,0x4c)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0xae)
board.WriteI2C(desAlias0,0x42,0xac)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0xae)
board.WriteI2C(desAlias0,0x42,0xac)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0xaf)
board.WriteI2C(desAlias0,0x42,0xac)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0xaf)
board.WriteI2C(desAlias0,0x42,0xac)
board.WriteI2C(desAlias0,0x40,0x10)
board.WriteI2C(desAlias0,0x41,0x5)
board.WriteI2C(desAlias0,0x42,0xa)
board.WriteI2C(desAlias0,0x41,0x25)
board.WriteI2C(desAlias0,0x42,0xa)
board.WriteI2C(desAlias0,0x40,0x54)
board.WriteI2C(desAlias0,0x41,0x89)
board.WriteI2C(desAlias0,0x42,0x38)
board.WriteI2C(desAlias0,0x40,0x58)
board.WriteI2C(desAlias0,0x41,0x89)
board.WriteI2C(desAlias0,0x42,0x38)
board.WriteI2C(desAlias0,0x40,0x10)
board.WriteI2C(desAlias0,0x41,0x1a)
board.WriteI2C(desAlias0,0x42,0x8)
board.WriteI2C(desAlias0,0x41,0x3a)
board.WriteI2C(desAlias0,0x42,0x8)
board.WriteI2C(desAlias0,0x40,0x38)
board.WriteI2C(desAlias0,0x41,0x6f)
board.WriteI2C(desAlias0,0x42,0x54)
board.WriteI2C(desAlias0,0x41,0x70)
board.WriteI2C(desAlias0,0x42,0x5)
board.WriteI2C(desAlias0,0x41,0x80)
board.WriteI2C(desAlias0,0x42,0x55)
board.WriteI2C(desAlias0,0x41,0x81)
board.WriteI2C(desAlias0,0x42,0x44)
board.WriteI2C(desAlias0,0x41,0x82)
board.WriteI2C(desAlias0,0x42,0x3)
board.WriteI2C(desAlias0,0x41,0x86)
board.WriteI2C(desAlias0,0x42,0x2c)
board.WriteI2C(desAlias0,0x41,0x87)
board.WriteI2C(desAlias0,0x42,0x6)
board.WriteI2C(desAlias0,0x41,0x18)
board.WriteI2C(desAlias0,0x42,0x32)
board.WriteI2C(desAlias0,0x41,0x48)
board.WriteI2C(desAlias0,0x42,0x32)
board.WriteI2C(desAlias0,0x41,0x19)
board.WriteI2C(desAlias0,0x42,0xe)
board.WriteI2C(desAlias0,0x41,0x49)
board.WriteI2C(desAlias0,0x42,0xe)
board.WriteI2C(desAlias0,0x41,0x17)
board.WriteI2C(desAlias0,0x42,0x72)
board.WriteI2C(desAlias0,0x41,0x47)
board.WriteI2C(desAlias0,0x42,0x72)
board.WriteI2C(desAlias0,0x41,0x26)
board.WriteI2C(desAlias0,0x42,0x87)
board.WriteI2C(desAlias0,0x41,0x56)
board.WriteI2C(desAlias0,0x42,0x87)
board.WriteI2C(desAlias0,0x40,0x2c)
board.WriteI2C(desAlias0,0x41,0x3d)
board.WriteI2C(desAlias0,0x42,0xd5)
board.WriteI2C(desAlias0,0x41,0x3e)
board.WriteI2C(desAlias0,0x42,0x15)
board.WriteI2C(desAlias0,0x41,0x7d)
board.WriteI2C(desAlias0,0x42,0xd5)
board.WriteI2C(desAlias0,0x41,0x7e)
board.WriteI2C(desAlias0,0x42,0x15)
board.WriteI2C(desAlias0,0x41,0x82)
board.WriteI2C(desAlias0,0x42,0x1)
board.WriteI2C(desAlias0,0x41,0x29)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x40,0x10)
board.WriteI2C(desAlias0,0x41,0x41)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x41,0x42)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x40,0x24)
board.WriteI2C(desAlias0,0x41,0x20)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x41,0x21)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x41,0x23)
board.WriteI2C(desAlias0,0x42,0x30)
board.WriteI2C(desAlias0,0x40,0x10)
board.WriteI2C(desAlias0,0x41,0x14)
board.WriteI2C(desAlias0,0x42,0x78)
board.WriteI2C(desAlias0,0x41,0x35)
board.WriteI2C(desAlias0,0x42,0x7e)
board.WriteI2C(desAlias0,0x40,0x6c)
board.WriteI2C(desAlias0,0x41,0xd)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x40,0x1c)
board.WriteI2C(desAlias0,0x41,0x8)
board.WriteI2C(desAlias0,0x42,0x13)
board.WriteI2C(desAlias0,0x41,0x28)
board.WriteI2C(desAlias0,0x42,0x13)
board.WriteI2C(desAlias0,0x40,0x14)
board.WriteI2C(desAlias0,0x41,0x62)
board.WriteI2C(desAlias0,0x42,0x31)
board.WriteI2C(desAlias0,0x41,0x72)
board.WriteI2C(desAlias0,0x42,0x31)
board.WriteI2C(desAlias0,0x41,0x61)
board.WriteI2C(desAlias0,0x42,0x26)
board.WriteI2C(desAlias0,0x41,0x71)
board.WriteI2C(desAlias0,0x42,0x26)
board.WriteI2C(desAlias0,0x1,0x1) #Soft Reset DES
time.sleep(0.04)## *********************************************
## Read Deserializer 0 Temp
## *********************************************
print("Configure deserializer 0 temp ramp optimizations")
board.WriteI2C(desAlias0,0x40,0x6c)
board.WriteI2C(desAlias0,0x41,0xd)
board.WriteI2C(desAlias0,0x42,0x0)
board.WriteI2C(desAlias0,0x41,0x13)
TEMP_FINAL = board.ReadI2C(desAlias0,0x42,1)
if TEMP_FINAL != 0:
TEMP_FINAL_C = 2*TEMP_FINAL – 273
print "Deserializer 0 starting temp =", TEMP_FINAL_C, "C"
else:
print "DES Temp Invalid"
## *********************************************
## Set up Deserializer 0 Temp Ramp Optimizations
## *********************************************
Efuse_TS_CODE = 2
Ramp_UP_Range_CODES_Needed = int((150-TEMP_FINAL_C)/(190/11)) + 1
Ramp_DN_Range_CODES_Needed = int((TEMP_FINAL_C-30)/(190/11)) + 1
Ramp_UP_CAP_DELTA = Ramp_UP_Range_CODES_Needed – 4
Ramp_DN_CAP_DELTA = Ramp_DN_Range_CODES_Needed – 7board.WriteI2C(desAlias0,0x40,0x3c)
board.WriteI2C(desAlias0,0x41,0xf5)
board.WriteI2C(desAlias0,0x42,(Efuse_TS_CODE<<4)+1) # Override TS_CODE Efuse Code
if Ramp_UP_CAP_DELTA > 0:
print("Adjusting ramp up and resetting DES")
TS_CODE_UP = Efuse_TS_CODE – Ramp_UP_CAP_DELTA
if TS_CODE_UP < 0:
TS_CODE_UP = 0
board.WriteI2C(desAlias0,0x41,0xf5)
rb = board.ReadI2C(desAlias0,0x42,1)
rb &= 0x8F
rb |= (TS_CODE_UP << 4)
board.WriteI2C(desAlias0,0x42,rb)
rb = board.ReadI2C(desAlias0,0x42,1)
rb &= 0xFE
rb |= 0x01
board.WriteI2C(desAlias0,0x42,rb)
board.WriteI2C(desAlias0,0x1,0x1)
time.sleep(0.04)
if Ramp_DN_CAP_DELTA > 0:
print("Adjusting ramp down and resetting DES")
TS_CODE_DN = Efuse_TS_CODE + Ramp_DN_CAP_DELTA
if TS_CODE_DN >= 7:
TS_CODE_DN = 7
board.WriteI2C(desAlias0,0x41,0xf5)
rb = board.ReadI2C(desAlias0,0x42,1)
rb &= 0x8F
rb |= (TS_CODE_DN << 4)
board.WriteI2C(desAlias0,0x42,rb)
rb = board.ReadI2C(desAlias0,0x42,1)
rb &= 0xFE
rb |= 0x01
board.WriteI2C(desAlias0,0x42,rb)
board.WriteI2C(desAlias0,0x1,0x1)
time.sleep(0.04)## *********************************************
## Clear CRC errors from initial link process
## *********************************************
print("Clear CRC errors from initial link process")Reg_value = board.ReadI2C(serAddr,0x2,1)
Reg_value = Reg_value | 0x20
board.WriteI2C(serAddr,0x2,Reg_value) #CRC Error ResetReg_value = board.ReadI2C(serAddr,0x2,1)
Reg_value = Reg_value & 0xdf
board.WriteI2C(serAddr,0x2,Reg_value) #CRC Error Reset Clearboard.WriteI2C(serAddr,0x2d,0x1)
## *********************************************
## Hold Des DTG in reset
## *********************************************
print("Hold Des 0 DTG in reset and configure video settings")
board.WriteI2C(desAlias0,0x40,0x50) #Select DTG Page
board.WriteI2C(desAlias0,0x41,0x32)
board.WriteI2C(desAlias0,0x42,0x6) #Hold Local Display Output Port 0 DTG in Reset
board.WriteI2C(desAlias0,0x41,0x62)
board.WriteI2C(desAlias0,0x42,0x6) #Hold Local Display Output Port 1 DTG in Reset## *********************************************
## Disable Stream Mapping
## *********************************************
board.WriteI2C(desAlias0,0xe,0x3) #Select both Output Ports
board.WriteI2C(desAlias0,0xd0,0x0) #Disable FPD4 video forward to Output Port
board.WriteI2C(desAlias0,0xd7,0x0) #Disable FPD3 video forward to Output Port## *********************************************
## Force DP Rate
## *********************************************
board.WriteI2C(desAlias0,0x40,0x2c) #Select DP Page
board.WriteI2C(desAlias0,0x41,0x81)
board.WriteI2C(desAlias0,0x42,0x60) #Set DP Rate to 2.7Gbps
board.WriteI2C(desAlias0,0x41,0x82)
board.WriteI2C(desAlias0,0x42,0x3) #Enable force DP rate with calibration disabled
board.WriteI2C(desAlias0,0x41,0x91)
board.WriteI2C(desAlias0,0x42,0xc) #Force 4 lanes on DP port 0
board.WriteI2C(desAlias0,0x40,0x30) #Disable DP SSCG
board.WriteI2C(desAlias0,0x41,0xf)
board.WriteI2C(desAlias0,0x42,0x1)
board.WriteI2C(desAlias0,0x1,0x40)## *********************************************
## Setup DP ports
## *********************************************
board.WriteI2C(desAlias0,0xe,0x12) #Select Port 1 registers
board.WriteI2C(desAlias0,0x46,0x0) #Disable DP Port 1
board.WriteI2C(desAlias0,0xe,0x1) #Select Port 0 registers
board.WriteI2C(desAlias0,0x1,0x40) #DP-TX-PLL RESET Applied## *********************************************
## Map video to display output
## *********************************************
board.WriteI2C(desAlias0,0xe,0x3) #Select both Output Ports
board.WriteI2C(desAlias0,0xd0,0xc) #Enable FPD_RX video forward to Output Port
board.WriteI2C(desAlias0,0xd1,0xf) #Every stream forwarded on DC
board.WriteI2C(desAlias0,0xd6,0x8) #Send Stream 0 to Output Port 0 and Send Stream 1 to Output Port 1
board.WriteI2C(desAlias0,0xd7,0x0) #FPD3 to local display output mapping disabled
board.WriteI2C(desAlias0,0xe,0x1) #Select Port 0## *********************************************
## Program quad pixel clock for DP port 0
## *********************************************
board.WriteI2C(desAlias0,0xe,0x1) #Select Port0 registers
board.WriteI2C(desAlias0,0xb1,0x1) #Enable clock divider
board.WriteI2C(desAlias0,0xb2,0xa4) #Program M value lower byte
board.WriteI2C(desAlias0,0xb3,0xc6) #Program M value middle byte
board.WriteI2C(desAlias0,0xb4,0x3) #Program M value upper byte
board.WriteI2C(desAlias0,0xb5,0xc0) #Program N value lower byte
board.WriteI2C(desAlias0,0xb6,0x7a) #Program N value middle byte
board.WriteI2C(desAlias0,0xb7,0x10) #Program N value upper byte
board.WriteI2C(desAlias0,0xe,0x1) #Select Port 0 registers## *********************************************
## Setup DTG for port 0
## *********************************************
board.WriteI2C(desAlias0,0x40,0x50) #Select DTG Page
board.WriteI2C(desAlias0,0x41,0x20)
board.WriteI2C(desAlias0,0x42,0x93) #Set up Local Display DTG BPP, Sync Polarities, and Measurement Type
board.WriteI2C(desAlias0,0x41,0x29) #Set Hstart
board.WriteI2C(desAlias0,0x42,0x80) #Hstart upper byte
board.WriteI2C(desAlias0,0x41,0x2a)
board.WriteI2C(desAlias0,0x42,0x78) #Hstart lower byte
board.WriteI2C(desAlias0,0x41,0x2f) #Set HSW
board.WriteI2C(desAlias0,0x42,0x40) #HSW upper byte
board.WriteI2C(desAlias0,0x41,0x30)
board.WriteI2C(desAlias0,0x42,0x3c) #HSW lower byte## *********************************************
## Program DPTX for DP port 0
## *********************************************
board.WriteI2C(desAlias0,0x48,0x1) #Enable APB interface
board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xa4) #Set bit per color
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0x20)
board.WriteI2C(desAlias0,0x4c,0x0)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xb8) #Set pixel width
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0x4)
board.WriteI2C(desAlias0,0x4c,0x0)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xac) #Set DP Mvid
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0x50)
board.WriteI2C(desAlias0,0x4c,0x75)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xb4) #Set DP Nvid
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0x0)
board.WriteI2C(desAlias0,0x4c,0x80)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xc8) #Set TU Mode
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0x0)
board.WriteI2C(desAlias0,0x4c,0x0)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xb0) #Set TU Size
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0x40)
board.WriteI2C(desAlias0,0x4c,0x0)
board.WriteI2C(desAlias0,0x4d,0x2c)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xc8) #Set FIFO Size
board.WriteI2C(desAlias0,0x4a,0x0)
board.WriteI2C(desAlias0,0x4b,0x6)
board.WriteI2C(desAlias0,0x4c,0x40)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xbc) #Set data count
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0x80)
board.WriteI2C(desAlias0,0x4c,0x7)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xc0) #Disable STREAM INTERLACED
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0x0)
board.WriteI2C(desAlias0,0x4c,0x0)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0xc4) #Set SYNC polarity
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0xc)
board.WriteI2C(desAlias0,0x4c,0x0)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)## *********************************************
## Release Des DTG reset
## *********************************************
print("Release Des 0 DTG reset and enable video output")
board.WriteI2C(desAlias0,0x40,0x50) #Select DTG Page
board.WriteI2C(desAlias0,0x41,0x32)
board.WriteI2C(desAlias0,0x42,0x5) #Release Local Display Output Port 0 DTG with WDT Enabled
board.WriteI2C(desAlias0,0x41,0x62)
board.WriteI2C(desAlias0,0x42,0x5) #Release Local Display Output Port 1 DTG with WDT Enabledboard.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0x80) #Set Htotal
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0xd0)
board.WriteI2C(desAlias0,0x4c,0xa)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)## *********************************************
## Enable DP 0 output
## *********************************************
board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0x84) #Enable DP output
board.WriteI2C(desAlias0,0x4a,0x0)
board.WriteI2C(desAlias0,0x4b,0x1)
board.WriteI2C(desAlias0,0x4c,0x0)
board.WriteI2C(desAlias0,0x4d,0x0)
board.WriteI2C(desAlias0,0x4e,0x0)
,
Alice:
您好,
没有在端口1上看到948的中断的原因是983主页面寄存器0xC6是端口特定的。983数据表中有一张表显示哪些寄存器适用某些端口。
对您的脚本做了一些更改,以便在GPIO4上设置REM_INTB。
/***********************************************remote interrupt config *********************************************/ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x02); //Enable writes to TX port 1 onlyti983_write_byte(ti_bridge->ti983_i2c, 0xc6, 0x21);ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x01); //Change back to defaultti983_write_byte(ti_bridge->ti983_i2c, 0x1b, 0x98);// to port1ti983_write_byte(ti_bridge->ti983_i2c, 0x3F, 0xEF); //GPIO input disableti983_write_byte(ti_bridge->ti983_i2c, 0x51, 0x83);
,
yingdong ou:
您好,按照上一个note操作,示波器测量INTB一直是低电平,正常应该和GPIO4一样高电平,有中断后有被拉低的操作
,
Alice:
您好,
能否读取 983 MainPage 0x52 寄存器以查看 INTB 变低的原因?INTB 是全局中断信号,因此可能有另一个中断将其拉低。
,
yingdong ou:
您好,上电不进行上述操作,该中断脚为高电平,而且0x52的值为0x00,做完上述操作0x52的值为0x82是否正常,而且发现在输完i2cset -y -f 1 0x0c 0xc6 0x21 b后就会被拉低为低电平
,
Alice:
您好,
当寄存器0x51 = 0x82时,这是预期的行为。这意味着FPD TX 1上的中断将传播到全局中断引脚(INTB)。
为了防止这种行为,您可以将983寄存器0x51写为0x81。
您仍将在寄存器0x52中看到REM_INTB已切换的指示,但由于被屏蔽,它不会影响INTB。请参见我测试的脚本和截图。
ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x02); //Enable writes to TX port 1 onlyti983_write_byte(ti_bridge->ti983_i2c, 0xc6, 0x21);ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x01); //Change back to defaultti983_write_byte(ti_bridge->ti983_i2c, 0x1b, 0x98);// to port1ti983_write_byte(ti_bridge->ti983_i2c, 0x3F, 0xEF); //GPIO input disableti983_write_byte(ti_bridge->ti983_i2c, 0x51, 0x81); //Enable interrupts for FPD TX 0 only
,
yingdong ou:
您好,
目前我们的板子设计的983的INTB和gpio4来处理两个不同解串器的中断,目前也只有INTB的中断可以传过来,将gpio4配置为REM_INTB的始终传不过来,我们使用过你们datasheet里的配置也不行,是否对不同解串器需要有特殊配置?能否发一份参考的中断配置我们试一下;
抱歉,之前同步的信息有误,另外更正一下,目前也只有gpio4/REM_INTB的中断可以传过来,配置为INTB的始终传不过来
,
Alice:
您好,
是否可以提供983配置脚本?
,
yingdong ou:
HI Aiice
之前生成的配置脚本参考上面之前提供的配置,目前配置脚本没有更改过,只是之前同步的信息有误
,
Alice:
您好,
为方便查看,请重新提供一下,最好是文件。
,
yingdong ou:
您好,
抱歉,延迟回复,目前上传不了文件,“不允许文件类型:983Conf.py”,能否直接复制之前发的,粘贴到文本上看呢
,
Alice:
您好,
为避免混淆,请重新引用一下之前回帖中的哪个配置。
,
yingdong ou:
HI Alice
最开始的983的配置如附件所示
.code-editor .code-editor-heading{border-top:1px solid #e9e9ea;border-left:1px solid #e9e9ea;border-right:1px solid #e9e9ea;background-color:#fbfbfb;border-radius:3px 3px 0 0;font-size:12.6px;display:flex;justify-content:space-between;align-items:center;overflow:hidden}.code-editor .code-editor-heading .icon{width:32px;height:32px;display:block;overflow:hidden;text-indent:-3000em;background-repeat:no-repeat;background-size:80%;background-position:center}.code-editor .code-editor-heading .fs{background-image:url(‘https://e2echina.ti.com/cfs-filesystemfile/__key/defaultwidgets/547b4cbb4efb4c3d83533f8f35fb4b7b-1a84591e31034fac832d29ed8584666c/fullscreen.svg?_=638842936957578030’)}.code-editor .code-editor-heading .dl{background-image:url(‘https://e2echina.ti.com/cfs-filesystemfile/__key/defaultwidgets/547b4cbb4efb4c3d83533f8f35fb4b7b-1a84591e31034fac832d29ed8584666c/download.svg?_=638842936957567810’)}.code-editor .code-editor-heading .filename{padding:10px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.code-editor .code-editor-heading a{color:#383b41}.code-editor .code-editor-heading a:hover{color:#007c8c}全屏983Conf.txt下载
## TI Confidential - NDA Restrictions## ## Copyright 2018 Texas Instruments Incorporated. All rights reserved.## ## IMPORTANT: Your use of this Software is limited to those specific rights## granted under the terms of a software license agreement between the user who## downloaded the software, his/her employer (which must be your employer) and## Texas Instruments Incorporated (the License). You may not use this Software## unless you agree to abide by the terms of the License. The License limits your## use, and you acknowledge, that the Software may not be modified, copied or## distributed unless embedded on a Texas Instruments microcontroller which is## integrated into your product. Other than for the foregoing purpose, you may## not use, reproduce, copy, prepare derivative works of, modify, distribute,## perform, display or sell this Software and/or its documentation for any## purpose.## ## YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE## PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,## INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,## NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL TEXAS## INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,## NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL## EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT## LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL## DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS,## TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT## LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.## ## Should you have any questions regarding your right to use this Software,## contact Texas Instruments Incorporated at www.TI.com.## ## DS90xx98x-Q1 Auto Script Generation Output## Tool Version 5.4import time ## Serializer: DS90Ux983-Q1## User Inputs:## Serializer I2C Address= 0x18## Max DP Lane Count = 2## Max DP Lane Rate = 8.1Gbps## DPRX no SSC Mode Enabled## DP MST Mode Enabled## DP Mode Enabled## FPD-Link Configuration: FPD-Link IV Port 0, FPD-Link III Port 1 - 6.75Gbps Port 0## Number of Displays = 2## Video Processor 0 (Stream 0) Properties:## Total Horizontal Pixels = 2768## Total Vertical Lines = 1490## Active Horizontal Pixels = 2560## Active Vertical Lines = 1440## Horizontal Back Porch = 60## Vertical Back Porch = 20## Horizontal Sync = 60## Vertical Sync = 2## Horizontal Front Porch = 88## Vertical Front Porch = 28## Horizontal Sync Polarity = Positive## Vertical Sync Polarity = Positive## Bits per pixel = 24## Pixel Clock = 247.46MHz## PATGEN Disabled## Video Processor 1 (Stream 1) Properties:## Total Horizontal Pixels = 2052## Total Vertical Lines = 761## Active Horizontal Pixels = 1920## Active Vertical Lines = 720## Horizontal Back Porch = 32## Vertical Back Porch = 6## Horizontal Sync = 28## Vertical Sync = 5## Horizontal Front Porch = 72## Vertical Front Porch = 30## Horizontal Sync Polarity = Negative## Vertical Sync Polarity = Negative## Bits per pixel = 24## Pixel Clock = 90.6MHz## PATGEN Disabled## Deserializer 0: DS90UH984-Q1## User Inputs:## Deserializer I2C Address = 0x70## Deserializer I2C Alias = 0x70## Override of DES eFuse enabled## DP Port 0 Enabled## DP0 Video Source = Serializer Stream 0## DP Port 0 PatGen Disabled## DP Port 1 Disabled## DP Port 1 PatGen Disabled## DP Rate set to 2.7 Gbps## DP lane number set to 4 lanes## *********************************************## Set up Variables## *********************************************serAddr = 0x18desAddr0 = 0x70desAlias0 = 0x70desAddr1 = 0x70desAlias1 = 0x72board.WriteI2C(serAddr,0x70,desAddr0)board.WriteI2C(serAddr,0x78,desAlias0)board.WriteI2C(serAddr,0x88,0x0)board.WriteI2C(serAddr,0x71,desAddr1)board.WriteI2C(serAddr,0x79,desAlias1+1)board.WriteI2C(serAddr,0x89,0x0)board.WriteI2C(serAddr,0x3a,0x88) #Disable remote contorller on FPD port 0 and port 1 - comment out if there is an I2C controller on the remote side## *********************************************## Check MODE Strapping## *********************************************FPD4_Strap_Rate_P0 = 0FPD4_Strap_Rate_P1 = 0SSCG_FDEV_STRAP = 0SSCG_FMOD_STRAP = 0SSCG_TYPE_STRAP = "none"TX_MODE_STS = board.ReadI2C(serAddr,0x27,1)if TX_MODE_STS == 0:print "Error: No Serializer Detected" GENERAL_CFG = board.ReadI2C(serAddr,0x7,1)if GENERAL_CFG & 0x01 == 1:print "MODE Strapped for FPD III Mode"FPD4_Strap_Rate_P0 = 0FPD4_Strap_Rate_P1 = 0TX_MODE_STRAP = "FPD3"else:if TX_MODE_STS & 0x0F == 0x0F:print "MODE Strapped for FPD III Mode"FPD4_Strap_Rate_P0 = 0FPD4_Strap_Rate_P1 = 0print "MODE Strapped for Independent Mode"TX_MODE_STRAP = "Independent"if TX_MODE_STS & 0x0F == 0x08:print "MODE Strapped for FPD IV 10.8Gbps"FPD4_Strap_Rate_P0 = 10.8FPD4_Strap_Rate_P1 = 10.8print "MODE Strapped for Dual Mode"TX_MODE_STRAP = "Dual"if TX_MODE_STS & 0x0F == 0x09:print "MODE Strapped for FPD IV 10.8Gbps"FPD4_Strap_Rate_P0 = 10.8FPD4_Strap_Rate_P1 = 10.8print "MODE Strapped for Independent Mode"TX_MODE_STRAP = "Independent"if TX_MODE_STS & 0x0F == 0x0A:print "MODE Strapped for FPD IV 13.5Gbps"FPD4_Strap_Rate_P0 = 13.5FPD4_Strap_Rate_P1 = 13.5print "MODE Strapped for Dual Mode"TX_MODE_STRAP = "Dual"if TX_MODE_STS & 0x0F == 0x0B:print "MODE Strapped for FPD IV 13.5Gbps"FPD4_Strap_Rate_P0 = 13.5FPD4_Strap_Rate_P1 = 13.5print "MODE Strapped for Independent Mode"TX_MODE_STRAP = "Independent"if TX_MODE_STS & 0x0F == 0x0C:print "MODE Strapped for FPD IV 6.75Gbps"FPD4_Strap_Rate_P0 = 6.75FPD4_Strap_Rate_P1 = 6.75print "MODE Strapped for Dual Mode"TX_MODE_STRAP = "Dual"if TX_MODE_STS & 0x0F == 0x0D:print "MODE Strapped for FPD IV 6.75Gbps"FPD4_Strap_Rate_P0 = 6.75FPD4_Strap_Rate_P1 = 6.75print "MODE Strapped for Independent Mode"TX_MODE_STRAP = "Independent"if TX_MODE_STS & 0x0F == 0x0E:print "MODE Strapped for FPD IV 3.375Gbps"FPD4_Strap_Rate_P0 = 3.375FPD4_Strap_Rate_P1 = 3.375print "MODE Strapped for Independent Mode"TX_MODE_STRAP = "Independent"## *********************************************## Program SER to FPD-Link IV mode## *********************************************TX_MODE = "Mixed"board.WriteI2C(serAddr,0x59,0x2) #Enable FPD III mode on port 1if TX_MODE != TX_MODE_STRAP:print "Override to Mixed FPD III/IV Mode"board.WriteI2C(serAddr,0x5,0xc) #Force FPD4 mode on port 0, FPD III mode on port 1board.WriteI2C(serAddr,0x1,0x1) #Soft Reset SERtime.sleep(0.04)## *********************************************## Set up FPD IV PLL Settings## *********************************************FPD0_Rate = 6.75FPD1_Rate = 0SSCG_FDEV_0 = 0SSCG_FMOD_0 = 0SSCG_TYPE_0 = "none"if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):print "FPD IV script rate mismatched with strapped rate for FPD Port 0 - Overriding Port 0 PLL settings"board.WriteI2C(serAddr,0x40,0x8) #Select PLL reg pageboard.WriteI2C(serAddr,0x41,0x1b)board.WriteI2C(serAddr,0x42,0x8) #Disable PLL0if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):board.WriteI2C(serAddr,0x40,0x8) #Select PLL pageboard.WriteI2C(serAddr,0x41,0x5) #Select Ncount Regboard.WriteI2C(serAddr,0x42,0x7d) #Set Ncountboard.WriteI2C(serAddr,0x41,0x13) #Select post div regboard.WriteI2C(serAddr,0x42,0x90) #Set post div for 6.75 Gbpsboard.WriteI2C(serAddr,0x2d,0x1) #Select write reg to port 0board.WriteI2C(serAddr,0x6a,0xa) #set BC sampling rateboard.WriteI2C(serAddr,0x6e,0x80) #set BC fractional samplingboard.WriteI2C(serAddr,0x40,0x4) #Select FPD page and set BC settings for FPD IV port 0board.WriteI2C(serAddr,0x41,0x6)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0xd)board.WriteI2C(serAddr,0x42,0x34)board.WriteI2C(serAddr,0x41,0xe)board.WriteI2C(serAddr,0x42,0x53)if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):board.WriteI2C(serAddr,0x2,0x11) #Set HALFRATE_MODE Overrideboard.WriteI2C(serAddr,0x2,0xd1) #Set HALFRATE_MODEboard.WriteI2C(serAddr,0x2,0xd0) #Unset HALFRATE_MODE Overrideif (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):board.WriteI2C(serAddr,0x40,0x8) #Zero out fractional PLL for port 0board.WriteI2C(serAddr,0x41,0x4)board.WriteI2C(serAddr,0x42,0x1)board.WriteI2C(serAddr,0x41,0x14)board.WriteI2C(serAddr,0x42,0x80)board.WriteI2C(serAddr,0x41,0x15)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x16)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x17)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x18)board.WriteI2C(serAddr,0x42,0xf6)board.WriteI2C(serAddr,0x41,0x19)board.WriteI2C(serAddr,0x42,0xff)board.WriteI2C(serAddr,0x41,0x1a)board.WriteI2C(serAddr,0x42,0xff)board.WriteI2C(serAddr,0x41,0x1e)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x1f)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x20)board.WriteI2C(serAddr,0x42,0x0)## *********************************************## Configure and Enable PLLs## *********************************************if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):board.WriteI2C(serAddr,0x40,0x8) #Select PLL pageboard.WriteI2C(serAddr,0x41,0xe) #Select VCO regboard.WriteI2C(serAddr,0x42,0xc7) #Set VCOif (FPD1_Rate != FPD4_Strap_Rate_P1) or (SSCG_FDEV_STRAP != SSCG_FDEV_1) or (SSCG_FMOD_STRAP != SSCG_FMOD_1) or (SSCG_TYPE_STRAP != SSCG_TYPE_1):board.WriteI2C(serAddr,0x40,0x8) #Select PLL pageboard.WriteI2C(serAddr,0x41,0x4e) #Select VCO regboard.WriteI2C(serAddr,0x42,0xc7) #Set VCOif (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):board.WriteI2C(serAddr,0x1,0x30) #soft reset PLLif (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):board.WriteI2C(serAddr,0x40,0x8) #Select PLL pageboard.WriteI2C(serAddr,0x41,0x1b)board.WriteI2C(serAddr,0x42,0x0) #Enable PLL0if (FPD1_Rate != FPD4_Strap_Rate_P1) or (SSCG_FDEV_STRAP != SSCG_FDEV_1) or (SSCG_FMOD_STRAP != SSCG_FMOD_1) or (SSCG_TYPE_STRAP != SSCG_TYPE_1):board.WriteI2C(serAddr,0x40,0x8) #Select PLL pageboard.WriteI2C(serAddr,0x41,0x5b)board.WriteI2C(serAddr,0x42,0x0) #Enable PLL1if (FPD0_Rate != FPD4_Strap_Rate_P0) or (SSCG_FDEV_STRAP != SSCG_FDEV_0) or (SSCG_FMOD_STRAP != SSCG_FMOD_0) or (SSCG_TYPE_STRAP != SSCG_TYPE_0):board.WriteI2C(serAddr,0x1,0x1) #soft reset Sertime.sleep(0.04)print("Enable I2C Passthrough")I2C_PASS_THROUGH = board.ReadI2C(serAddr,0x7,1)I2C_PASS_THROUGH_MASK = 0x08I2C_PASS_THROUGH_REG = I2C_PASS_THROUGH | I2C_PASS_THROUGH_MASKboard.WriteI2C(serAddr,0x07,I2C_PASS_THROUGH_REG) #Enable I2C Passthroughboard.WriteI2C(desAlias0,0x1,0x1) #Soft reset Destime.sleep(0.04)else:print("Enable I2C Passthrough")I2C_PASS_THROUGH = board.ReadI2C(serAddr,0x7,1)I2C_PASS_THROUGH_MASK = 0x08I2C_PASS_THROUGH_REG = I2C_PASS_THROUGH | I2C_PASS_THROUGH_MASKboard.WriteI2C(serAddr,0x07,I2C_PASS_THROUGH_REG) #Enable I2C Passthroughboard.WriteI2C(serAddr,0x2d,0x1) #Select write to port0 reg## *********************************************## Set DP Config## *********************************************board.WriteI2C(serAddr,0x40,0x24) #Force HPD Low to configure 983 DP Settingsboard.WriteI2C(serAddr,0x41,0x1)board.WriteI2C(serAddr,0x42,0x2)board.WriteI2C(serAddr,0x48,0x1) #Enable APB Interfaceboard.WriteI2C(serAddr,0x49,0x74) #Set max advertised link rate = 8.1Gbpsboard.WriteI2C(serAddr,0x4a,0x0)board.WriteI2C(serAddr,0x4b,0x1e)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x70) #Set max advertised lane count = 2board.WriteI2C(serAddr,0x4a,0x0)board.WriteI2C(serAddr,0x4b,0x2)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x14) #Request min VOD swing of 0x02board.WriteI2C(serAddr,0x4a,0x2)board.WriteI2C(serAddr,0x4b,0x2)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)#Lane Rate Optimizations for 8.1Gbps No SSCboard.WriteI2C(serAddr,0x40,0x10)board.WriteI2C(serAddr,0x41,0x30)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x4c)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x50)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x56)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x40,0x10)board.WriteI2C(serAddr,0x41,0xb0)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0xcc)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0xd0)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0xd6)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x40,0x14)board.WriteI2C(serAddr,0x41,0x30)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x4c)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x50)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0x56)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x40,0x14)board.WriteI2C(serAddr,0x41,0xb0)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0xcc)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0xd0)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x41,0xd6)board.WriteI2C(serAddr,0x42,0x0)board.WriteI2C(serAddr,0x49,0x18) #Set SST/MST mode, DP/eDP Mode, and Yes/No SSC Downspread Supportboard.WriteI2C(serAddr,0x4a,0x0)board.WriteI2C(serAddr,0x4b,0x4)board.WriteI2C(serAddr,0x4c,0x1)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x4) #Set MST_PAYLOAD_IDboard.WriteI2C(serAddr,0x4a,0x9)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x8) #Set MST_PAYLOAD_IDboard.WriteI2C(serAddr,0x4a,0x9)board.WriteI2C(serAddr,0x4b,0x2)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x0) #Set DP Virtual Sink 0 Settingsboard.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x4) #Set DP Virtual Sink 0 Settingsboard.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x4)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x18) #Set DP Virtual Sink 0 Settingsboard.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x14) #Set DP Virtual Sink 0 Settingsboard.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x0) #Set DP Virtual Sink 1 Settingsboard.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x4) #Set DP Virtual Sink 1 Settingsboard.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x4)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x18) #Set DP Virtual Sink 1 Settingsboard.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x14) #Set DP Virtual Sink 1 Settingsboard.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x40,0x24) #Force HPD high to trigger link trainingboard.WriteI2C(serAddr,0x41,0x1)board.WriteI2C(serAddr,0x42,0x0)#time.sleep(0.5) # Allow time after HPD is pulled high for the source to train and provide video (may need to adjust based on source properties)## *********************************************## Program PLLs## *********************************************# Program PLL for Port 1: FPD III Mode 3171.0Mbpsboard.WriteI2C(serAddr,0x40,0x8)board.WriteI2C(serAddr,0x41,0x44)board.WriteI2C(serAddr,0x42,0x9) #Set fractional mash orderboard.WriteI2C(serAddr,0x41,0x53)board.WriteI2C(serAddr,0x42,0xe0) #Set VCO Post Div = 4, VCO Auto Sel for CS2.0board.WriteI2C(serAddr,0x40,0xa) #Set auto incrementboard.WriteI2C(serAddr,0x41,0x45)board.WriteI2C(serAddr,0x42,0x75) #Set Ndiv = 117board.WriteI2C(serAddr,0x42,0x0) #Set Ndiv = 117board.WriteI2C(serAddr,0x41,0x58)board.WriteI2C(serAddr,0x42,0xf6) #Set denominator = 16777206board.WriteI2C(serAddr,0x42,0xff) #Set denominator = 16777206board.WriteI2C(serAddr,0x42,0xff) #Set denominator = 16777206board.WriteI2C(serAddr,0x41,0x5e)board.WriteI2C(serAddr,0x42,0x18) #Set numerator = 7456536board.WriteI2C(serAddr,0x42,0xc7) #Set numerator = 7456536board.WriteI2C(serAddr,0x42,0x71) #Set numerator = 7456536if FPD4_Strap_Rate_P1 != 0:board.WriteI2C(serAddr,0x40,0x4) #Set FPD Page to configure BC Settings for Port 1board.WriteI2C(serAddr,0x41,0x26)board.WriteI2C(serAddr,0x42,0xff)board.WriteI2C(serAddr,0x41,0x2d)board.WriteI2C(serAddr,0x42,0x70)board.WriteI2C(serAddr,0x41,0x2e)board.WriteI2C(serAddr,0x42,0x70)board.WriteI2C(serAddr,0x1,0x10) #Reset PLL 1time.sleep(0.1)## *********************************************## Program VP Configs## *********************************************print("Configure Video Processors")# Configure VP 0board.WriteI2C(serAddr,0x40,0x32)board.WriteI2C(serAddr,0x41,0x1)board.WriteI2C(serAddr,0x42,0xa8) #Set VP Source to MST0board.WriteI2C(serAddr,0x41,0x2)board.WriteI2C(serAddr,0x42,0x0) #VID H Activeboard.WriteI2C(serAddr,0x42,0xa) #VID H Activeboard.WriteI2C(serAddr,0x41,0x10)board.WriteI2C(serAddr,0x42,0x0) #Horizontal Activeboard.WriteI2C(serAddr,0x42,0xa) #Horizontal Activeboard.WriteI2C(serAddr,0x42,0x3c) #Horizontal Back Porchboard.WriteI2C(serAddr,0x42,0x0) #Horizontal Back Porchboard.WriteI2C(serAddr,0x42,0x3c) #Horizontal Syncboard.WriteI2C(serAddr,0x42,0x0) #Horizontal Syncboard.WriteI2C(serAddr,0x42,0xd0) #Horizontal Totalboard.WriteI2C(serAddr,0x42,0xa) #Horizontal Totalboard.WriteI2C(serAddr,0x42,0xa0) #Vertical Activeboard.WriteI2C(serAddr,0x42,0x5) #Vertical Activeboard.WriteI2C(serAddr,0x42,0x14) #Vertical Back Porchboard.WriteI2C(serAddr,0x42,0x0) #Vertical Back Porchboard.WriteI2C(serAddr,0x42,0x2) #Vertical Syncboard.WriteI2C(serAddr,0x42,0x0) #Vertical Syncboard.WriteI2C(serAddr,0x42,0x1c) #Vertical Front Porchboard.WriteI2C(serAddr,0x42,0x0) #Vertical Front Porchboard.WriteI2C(serAddr,0x41,0x27)board.WriteI2C(serAddr,0x42,0x0) #HSYNC Polarity = +, VSYNC Polarity = +board.WriteI2C(serAddr,0x41,0x23) #M/N Registerboard.WriteI2C(serAddr,0x42,0xed) #M valueboard.WriteI2C(serAddr,0x42,0x2e) #M valueboard.WriteI2C(serAddr,0x42,0xf) #N value# Configure VP 1board.WriteI2C(serAddr,0x40,0x32)board.WriteI2C(serAddr,0x41,0x41)board.WriteI2C(serAddr,0x42,0xa9) #Set VP Source to MST1board.WriteI2C(serAddr,0x41,0x42)board.WriteI2C(serAddr,0x42,0x80) #VID H Activeboard.WriteI2C(serAddr,0x42,0x7) #VID H Activeboard.WriteI2C(serAddr,0x41,0x50)board.WriteI2C(serAddr,0x42,0x80) #Horizontal Activeboard.WriteI2C(serAddr,0x42,0x7) #Horizontal Activeboard.WriteI2C(serAddr,0x42,0x20) #Horizontal Back Porchboard.WriteI2C(serAddr,0x42,0x0) #Horizontal Back Porchboard.WriteI2C(serAddr,0x42,0x1c) #Horizontal Syncboard.WriteI2C(serAddr,0x42,0x0) #Horizontal Syncboard.WriteI2C(serAddr,0x42,0x4) #Horizontal Totalboard.WriteI2C(serAddr,0x42,0x8) #Horizontal Totalboard.WriteI2C(serAddr,0x42,0xd0) #Vertical Activeboard.WriteI2C(serAddr,0x42,0x2) #Vertical Activeboard.WriteI2C(serAddr,0x42,0x6) #Vertical Back Porchboard.WriteI2C(serAddr,0x42,0x0) #Vertical Back Porchboard.WriteI2C(serAddr,0x42,0x5) #Vertical Syncboard.WriteI2C(serAddr,0x42,0x0) #Vertical Syncboard.WriteI2C(serAddr,0x42,0x1e) #Vertical Front Porchboard.WriteI2C(serAddr,0x42,0x0) #Vertical Front Porchboard.WriteI2C(serAddr,0x41,0x67)board.WriteI2C(serAddr,0x42,0x6) #HSYNC Polarity = -, VSYNC Polarity = -board.WriteI2C(serAddr,0x41,0x63) #M/N Registerboard.WriteI2C(serAddr,0x42,0x2e) #M valueboard.WriteI2C(serAddr,0x42,0x11) #M valueboard.WriteI2C(serAddr,0x42,0xf) #N value## *********************************************## Disable Frame Reset## *********************************************board.WriteI2C(serAddr,0x48,0x1) #Enable APB Interfaceboard.WriteI2C(serAddr,0x49,0x18) #Check for Videoboard.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x48,0x3)apbData0 = board.ReadI2C(serAddr,0x4b,1)apbData1 = board.ReadI2C(serAddr,0x4c,1)apbData2 = board.ReadI2C(serAddr,0x4d,1)apbData3 = board.ReadI2C(serAddr,0x4e,1)apbData = (apbData3<<24) | (apbData2<<16) | (apbData1<<8) | (apbData0<<0)if apbData & 0x01 != 0x01:print("Warning! Video is not available from the DP source yet. Disable frame reset command will not be applied!")else:print("Disable Frame Reset")board.WriteI2C(serAddr,0x49,0x18) #Disable Frame Reset for VS0board.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x5)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x18) #Disable Frame Reset for VS1board.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x5)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x14) #Disable DTG for VS0board.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x0)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x14) #Disable DTG for VS1board.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x0)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)time.sleep(0.02) # Delay > 1/FPS (example is 20ms for 60FPS)board.WriteI2C(serAddr,0x49,0x0) #Disable VS0board.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x0)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x0) #Disable VS1board.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x0)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x14) #Enable DTG for VS0board.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x14) #Enable DTG for VS1board.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x0) #Enable VS0board.WriteI2C(serAddr,0x4a,0xa)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)board.WriteI2C(serAddr,0x49,0x0) #Enable VS1board.WriteI2C(serAddr,0x4a,0xb)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)## *********************************************## Enable VPs## *********************************************print("Enable Video Processors")board.WriteI2C(serAddr,0x43,0x1) #Set number of VPs used = 2board.WriteI2C(serAddr,0x44,0x3) #Enable video processors## *********************************************## Check if VP is synchronized to DP input## *********************************************time.sleep(0.1) # Delay for VPs to sync to DP sourceretry = 0board.WriteI2C(serAddr,0x40,0x31) #Select VP Pageboard.WriteI2C(serAddr,0x41,0x28)PATGEN_VP0 = board.ReadI2C(serAddr,0x42,1)if ((PATGEN_VP0 & 0x01) == 1):print "VP0 sync status bypassed since PATGEN is enabled"VP0sts = 1else:board.WriteI2C(serAddr,0x41,0x30)VP0sts = board.ReadI2C(serAddr,0x42,1)print "VP0sts =",(VP0sts & 0x01)while ((VP0sts & 0x01) == 0) and retry < 10:print "VP0 Not Synced - Delaying 100ms. Retry =", retrytime.sleep(0.1)board.WriteI2C(serAddr,0x41,0x30)VP0sts = board.ReadI2C(serAddr,0x42,1)retry = retry + 1if ((VP0sts & 0x01) == 1) and retry < 10:print "VP0 Syned"else:print "Unable to achieve VP0 sync"board.WriteI2C(serAddr,0x41,0x68)PATGEN_VP1 = board.ReadI2C(serAddr,0x42,1)if ((PATGEN_VP1 & 0x01) == 1):print "VP1 sync status bypassed since PATGEN is enabled"VP1sts = 1else:board.WriteI2C(serAddr,0x41,0x70)VP1sts = board.ReadI2C(serAddr,0x42,1)print "VP1sts =",(VP1sts & 0x01)while ((VP1sts & 0x01) == 0) and retry < 10:print "VP1 Not Synced - Delaying 100ms. Retry =", retrytime.sleep(0.1)board.WriteI2C(serAddr,0x41,0x70)VP1sts = board.ReadI2C(serAddr,0x42,1)retry = retry + 1if ((VP1sts & 0x01) == 1) and retry < 10:print "VP1 Syned"else:print "Unable to achieve VP1 sync"if (VP0sts & 0x01 == 0) or (VP1sts & 0x01 == 0):print("VPs not synchronized - performing video input reset")board.WriteI2C(serAddr,0x49,0x54) # Video Input Reset if VP is not syncronizedboard.WriteI2C(serAddr,0x4a,0x0)board.WriteI2C(serAddr,0x4b,0x1)board.WriteI2C(serAddr,0x4c,0x0)board.WriteI2C(serAddr,0x4d,0x0)board.WriteI2C(serAddr,0x4e,0x0)## *********************************************## Set FPD3 Stream Mapping## *********************************************board.WriteI2C(serAddr,0x2d,0x12) #Select FPD TX Port 1board.WriteI2C(serAddr,0x57,0x1) #Set FPD TX Port 1 Stream Source = VP1board.WriteI2C(serAddr,0x5b,0x2b) #Enable FPD III FIFO## *********************************************## Configure Serializer TX Link Layer## *********************************************print("Configure serializer TX link layer")board.WriteI2C(serAddr,0x40,0x2e) #Link layer Reg pageboard.WriteI2C(serAddr,0x41,0x1) #Select LINK0_STREAM_ENboard.WriteI2C(serAddr,0x42,0x1) #Enable Link Layer 0 Streamsboard.WriteI2C(serAddr,0x41,0x6) #Select LINK0_SLOT_REQ0board.WriteI2C(serAddr,0x42,0x41) #Set number of time slotsboard.WriteI2C(serAddr,0x41,0x20) #Set Link layer vp bppboard.WriteI2C(serAddr,0x42,0x55) #Set Link layer vp bpp according to VP Bit per pixelboard.WriteI2C(serAddr,0x41,0x0) #Link layer enableboard.WriteI2C(serAddr,0x42,0xf) #Link layer enable## *********************************************## Check for DES0 Communication## *********************************************DES_READBACK = board.ReadI2C(desAlias0,0x0,1)if DES_READBACK == 0:print "Error - no DES detected"else:print "Deserializer detected successfully"## *********************************************## Override DES0 eFuse## *********************************************board.WriteI2C(desAlias0,0x49,0xc)board.WriteI2C(desAlias0,0x4a,0x0)board.WriteI2C(desAlias0,0x48,0x1b)UNIQUEID_Reg0xC = board.ReadI2C(desAlias0,0x4b,1)if UNIQUEID_Reg0xC != 0x19 and DES_READBACK != 0:print "Non-Final DES Silicon Detected - Overriding DES eFuse"board.WriteI2C(desAlias0,0xe,0x3)board.WriteI2C(desAlias0,0x61,0x0)board.WriteI2C(desAlias0,0x5a,0x74)board.WriteI2C(desAlias0,0x5f,0x4)board.WriteI2C(desAlias0,0x40,0x3c)board.WriteI2C(desAlias0,0x41,0xf5)board.WriteI2C(desAlias0,0x42,0x21)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0x43)board.WriteI2C(desAlias0,0x42,0x3)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0x43)board.WriteI2C(desAlias0,0x42,0x3)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0x5)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0x5)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0x6)board.WriteI2C(desAlias0,0x42,0x1)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0x6)board.WriteI2C(desAlias0,0x42,0x1)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0x37)board.WriteI2C(desAlias0,0x42,0x32)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0x37)board.WriteI2C(desAlias0,0x42,0x32)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0x8d)board.WriteI2C(desAlias0,0x42,0xff)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0x8d)board.WriteI2C(desAlias0,0x42,0xff)board.WriteI2C(desAlias0,0x40,0x5c)board.WriteI2C(desAlias0,0x41,0x20)board.WriteI2C(desAlias0,0x42,0x3c)board.WriteI2C(desAlias0,0x41,0xa0)board.WriteI2C(desAlias0,0x42,0x3c)board.WriteI2C(desAlias0,0x40,0x38)board.WriteI2C(desAlias0,0x41,0x24)board.WriteI2C(desAlias0,0x42,0x61)board.WriteI2C(desAlias0,0x41,0x54)board.WriteI2C(desAlias0,0x42,0x61)board.WriteI2C(desAlias0,0x41,0x2c)board.WriteI2C(desAlias0,0x42,0x19)board.WriteI2C(desAlias0,0x41,0x5c)board.WriteI2C(desAlias0,0x42,0x19)board.WriteI2C(desAlias0,0x41,0x2e)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x41,0x5e)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x40,0x10)board.WriteI2C(desAlias0,0x41,0x18)board.WriteI2C(desAlias0,0x42,0x4b)board.WriteI2C(desAlias0,0x41,0x38)board.WriteI2C(desAlias0,0x42,0x4b)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0x15)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0x15)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0x4a)board.WriteI2C(desAlias0,0x42,0x1)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0x4a)board.WriteI2C(desAlias0,0x42,0x1)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0xaa)board.WriteI2C(desAlias0,0x42,0x2c)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0xaa)board.WriteI2C(desAlias0,0x42,0x2c)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0xab)board.WriteI2C(desAlias0,0x42,0x2c)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0xab)board.WriteI2C(desAlias0,0x42,0x2c)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0xac)board.WriteI2C(desAlias0,0x42,0x4c)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0xac)board.WriteI2C(desAlias0,0x42,0x4c)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0xad)board.WriteI2C(desAlias0,0x42,0x4c)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0xad)board.WriteI2C(desAlias0,0x42,0x4c)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0xae)board.WriteI2C(desAlias0,0x42,0xac)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0xae)board.WriteI2C(desAlias0,0x42,0xac)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0xaf)board.WriteI2C(desAlias0,0x42,0xac)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0xaf)board.WriteI2C(desAlias0,0x42,0xac)board.WriteI2C(desAlias0,0x40,0x10)board.WriteI2C(desAlias0,0x41,0x5)board.WriteI2C(desAlias0,0x42,0xa)board.WriteI2C(desAlias0,0x41,0x25)board.WriteI2C(desAlias0,0x42,0xa)board.WriteI2C(desAlias0,0x40,0x54)board.WriteI2C(desAlias0,0x41,0x89)board.WriteI2C(desAlias0,0x42,0x38)board.WriteI2C(desAlias0,0x40,0x58)board.WriteI2C(desAlias0,0x41,0x89)board.WriteI2C(desAlias0,0x42,0x38)board.WriteI2C(desAlias0,0x40,0x10)board.WriteI2C(desAlias0,0x41,0x1a)board.WriteI2C(desAlias0,0x42,0x8)board.WriteI2C(desAlias0,0x41,0x3a)board.WriteI2C(desAlias0,0x42,0x8)board.WriteI2C(desAlias0,0x40,0x38)board.WriteI2C(desAlias0,0x41,0x6f)board.WriteI2C(desAlias0,0x42,0x54)board.WriteI2C(desAlias0,0x41,0x70)board.WriteI2C(desAlias0,0x42,0x5)board.WriteI2C(desAlias0,0x41,0x80)board.WriteI2C(desAlias0,0x42,0x55)board.WriteI2C(desAlias0,0x41,0x81)board.WriteI2C(desAlias0,0x42,0x44)board.WriteI2C(desAlias0,0x41,0x82)board.WriteI2C(desAlias0,0x42,0x3)board.WriteI2C(desAlias0,0x41,0x86)board.WriteI2C(desAlias0,0x42,0x2c)board.WriteI2C(desAlias0,0x41,0x87)board.WriteI2C(desAlias0,0x42,0x6)board.WriteI2C(desAlias0,0x41,0x18)board.WriteI2C(desAlias0,0x42,0x32)board.WriteI2C(desAlias0,0x41,0x48)board.WriteI2C(desAlias0,0x42,0x32)board.WriteI2C(desAlias0,0x41,0x19)board.WriteI2C(desAlias0,0x42,0xe)board.WriteI2C(desAlias0,0x41,0x49)board.WriteI2C(desAlias0,0x42,0xe)board.WriteI2C(desAlias0,0x41,0x17)board.WriteI2C(desAlias0,0x42,0x72)board.WriteI2C(desAlias0,0x41,0x47)board.WriteI2C(desAlias0,0x42,0x72)board.WriteI2C(desAlias0,0x41,0x26)board.WriteI2C(desAlias0,0x42,0x87)board.WriteI2C(desAlias0,0x41,0x56)board.WriteI2C(desAlias0,0x42,0x87)board.WriteI2C(desAlias0,0x40,0x2c)board.WriteI2C(desAlias0,0x41,0x3d)board.WriteI2C(desAlias0,0x42,0xd5)board.WriteI2C(desAlias0,0x41,0x3e)board.WriteI2C(desAlias0,0x42,0x15)board.WriteI2C(desAlias0,0x41,0x7d)board.WriteI2C(desAlias0,0x42,0xd5)board.WriteI2C(desAlias0,0x41,0x7e)board.WriteI2C(desAlias0,0x42,0x15)board.WriteI2C(desAlias0,0x41,0x82)board.WriteI2C(desAlias0,0x42,0x1)board.WriteI2C(desAlias0,0x41,0x29)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x40,0x10)board.WriteI2C(desAlias0,0x41,0x41)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x41,0x42)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x40,0x24)board.WriteI2C(desAlias0,0x41,0x20)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x41,0x21)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x41,0x23)board.WriteI2C(desAlias0,0x42,0x30)board.WriteI2C(desAlias0,0x40,0x10)board.WriteI2C(desAlias0,0x41,0x14)board.WriteI2C(desAlias0,0x42,0x78)board.WriteI2C(desAlias0,0x41,0x35)board.WriteI2C(desAlias0,0x42,0x7e)board.WriteI2C(desAlias0,0x40,0x6c)board.WriteI2C(desAlias0,0x41,0xd)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x40,0x1c)board.WriteI2C(desAlias0,0x41,0x8)board.WriteI2C(desAlias0,0x42,0x13)board.WriteI2C(desAlias0,0x41,0x28)board.WriteI2C(desAlias0,0x42,0x13)board.WriteI2C(desAlias0,0x40,0x14)board.WriteI2C(desAlias0,0x41,0x62)board.WriteI2C(desAlias0,0x42,0x31)board.WriteI2C(desAlias0,0x41,0x72)board.WriteI2C(desAlias0,0x42,0x31)board.WriteI2C(desAlias0,0x41,0x61)board.WriteI2C(desAlias0,0x42,0x26)board.WriteI2C(desAlias0,0x41,0x71)board.WriteI2C(desAlias0,0x42,0x26)board.WriteI2C(desAlias0,0x1,0x1) #Soft Reset DEStime.sleep(0.04)## *********************************************## Read Deserializer 0 Temp## *********************************************print("Configure deserializer 0 temp ramp optimizations")board.WriteI2C(desAlias0,0x40,0x6c)board.WriteI2C(desAlias0,0x41,0xd)board.WriteI2C(desAlias0,0x42,0x0)board.WriteI2C(desAlias0,0x41,0x13)TEMP_FINAL = board.ReadI2C(desAlias0,0x42,1)if TEMP_FINAL != 0:TEMP_FINAL_C = 2*TEMP_FINAL - 273print "Deserializer 0 starting temp =", TEMP_FINAL_C, "C"else:print "DES Temp Invalid"## *********************************************## Set up Deserializer 0 Temp Ramp Optimizations## *********************************************Efuse_TS_CODE = 2Ramp_UP_Range_CODES_Needed = int((150-TEMP_FINAL_C)/(190/11)) + 1Ramp_DN_Range_CODES_Needed = int((TEMP_FINAL_C-30)/(190/11)) + 1Ramp_UP_CAP_DELTA = Ramp_UP_Range_CODES_Needed - 4Ramp_DN_CAP_DELTA = Ramp_DN_Range_CODES_Needed - 7board.WriteI2C(desAlias0,0x40,0x3c)board.WriteI2C(desAlias0,0x41,0xf5)board.WriteI2C(desAlias0,0x42,(Efuse_TS_CODE<<4)+1) # Override TS_CODE Efuse Codeif Ramp_UP_CAP_DELTA > 0:print("Adjusting ramp up and resetting DES")TS_CODE_UP = Efuse_TS_CODE - Ramp_UP_CAP_DELTAif TS_CODE_UP < 0:TS_CODE_UP = 0board.WriteI2C(desAlias0,0x41,0xf5)rb = board.ReadI2C(desAlias0,0x42,1)rb &= 0x8Frb |= (TS_CODE_UP << 4)board.WriteI2C(desAlias0,0x42,rb)rb = board.ReadI2C(desAlias0,0x42,1)rb &= 0xFErb |= 0x01board.WriteI2C(desAlias0,0x42,rb)board.WriteI2C(desAlias0,0x1,0x1)time.sleep(0.04)if Ramp_DN_CAP_DELTA > 0:print("Adjusting ramp down and resetting DES")TS_CODE_DN = Efuse_TS_CODE + Ramp_DN_CAP_DELTAif TS_CODE_DN >= 7:TS_CODE_DN = 7board.WriteI2C(desAlias0,0x41,0xf5)rb = board.ReadI2C(desAlias0,0x42,1)rb &= 0x8Frb |= (TS_CODE_DN << 4)board.WriteI2C(desAlias0,0x42,rb)rb = board.ReadI2C(desAlias0,0x42,1)rb &= 0xFErb |= 0x01board.WriteI2C(desAlias0,0x42,rb)board.WriteI2C(desAlias0,0x1,0x1)time.sleep(0.04)## *********************************************## Clear CRC errors from initial link process## *********************************************print("Clear CRC errors from initial link process")Reg_value = board.ReadI2C(serAddr,0x2,1)Reg_value = Reg_value | 0x20board.WriteI2C(serAddr,0x2,Reg_value) #CRC Error ResetReg_value = board.ReadI2C(serAddr,0x2,1)Reg_value = Reg_value & 0xdfboard.WriteI2C(serAddr,0x2,Reg_value) #CRC Error Reset Clear board.WriteI2C(serAddr,0x2d,0x1)## *********************************************## Hold Des DTG in reset## *********************************************print("Hold Des 0 DTG in reset and configure video settings")board.WriteI2C(desAlias0,0x40,0x50) #Select DTG Pageboard.WriteI2C(desAlias0,0x41,0x32)board.WriteI2C(desAlias0,0x42,0x6) #Hold Local Display Output Port 0 DTG in Resetboard.WriteI2C(desAlias0,0x41,0x62)board.WriteI2C(desAlias0,0x42,0x6) #Hold Local Display Output Port 1 DTG in Reset## *********************************************## Disable Stream Mapping## *********************************************board.WriteI2C(desAlias0,0xe,0x3) #Select both Output Portsboard.WriteI2C(desAlias0,0xd0,0x0) #Disable FPD4 video forward to Output Portboard.WriteI2C(desAlias0,0xd7,0x0) #Disable FPD3 video forward to Output Port## *********************************************## Force DP Rate## *********************************************board.WriteI2C(desAlias0,0x40,0x2c) #Select DP Pageboard.WriteI2C(desAlias0,0x41,0x81)board.WriteI2C(desAlias0,0x42,0x60) #Set DP Rate to 2.7Gbpsboard.WriteI2C(desAlias0,0x41,0x82)board.WriteI2C(desAlias0,0x42,0x3) #Enable force DP rate with calibration disabledboard.WriteI2C(desAlias0,0x41,0x91)board.WriteI2C(desAlias0,0x42,0xc) #Force 4 lanes on DP port 0board.WriteI2C(desAlias0,0x40,0x30) #Disable DP SSCGboard.WriteI2C(desAlias0,0x41,0xf)board.WriteI2C(desAlias0,0x42,0x1)board.WriteI2C(desAlias0,0x1,0x40)## *********************************************## Setup DP ports## *********************************************board.WriteI2C(desAlias0,0xe,0x12) #Select Port 1 registersboard.WriteI2C(desAlias0,0x46,0x0) #Disable DP Port 1board.WriteI2C(desAlias0,0xe,0x1) #Select Port 0 registersboard.WriteI2C(desAlias0,0x1,0x40) #DP-TX-PLL RESET Applied## *********************************************## Map video to display output## *********************************************board.WriteI2C(desAlias0,0xe,0x3) #Select both Output Portsboard.WriteI2C(desAlias0,0xd0,0xc) #Enable FPD_RX video forward to Output Portboard.WriteI2C(desAlias0,0xd1,0xf) #Every stream forwarded on DCboard.WriteI2C(desAlias0,0xd6,0x8) #Send Stream 0 to Output Port 0 and Send Stream 1 to Output Port 1board.WriteI2C(desAlias0,0xd7,0x0) #FPD3 to local display output mapping disabledboard.WriteI2C(desAlias0,0xe,0x1) #Select Port 0 ## *********************************************## Program quad pixel clock for DP port 0## *********************************************board.WriteI2C(desAlias0,0xe,0x1) #Select Port0 registersboard.WriteI2C(desAlias0,0xb1,0x1) #Enable clock dividerboard.WriteI2C(desAlias0,0xb2,0xa4) #Program M value lower byteboard.WriteI2C(desAlias0,0xb3,0xc6) #Program M value middle byteboard.WriteI2C(desAlias0,0xb4,0x3) #Program M value upper byteboard.WriteI2C(desAlias0,0xb5,0xc0) #Program N value lower byteboard.WriteI2C(desAlias0,0xb6,0x7a) #Program N value middle byteboard.WriteI2C(desAlias0,0xb7,0x10) #Program N value upper byteboard.WriteI2C(desAlias0,0xe,0x1) #Select Port 0 registers## *********************************************## Setup DTG for port 0## *********************************************board.WriteI2C(desAlias0,0x40,0x50) #Select DTG Pageboard.WriteI2C(desAlias0,0x41,0x20)board.WriteI2C(desAlias0,0x42,0x93) #Set up Local Display DTG BPP, Sync Polarities, and Measurement Typeboard.WriteI2C(desAlias0,0x41,0x29) #Set Hstartboard.WriteI2C(desAlias0,0x42,0x80) #Hstart upper byteboard.WriteI2C(desAlias0,0x41,0x2a)board.WriteI2C(desAlias0,0x42,0x78) #Hstart lower byteboard.WriteI2C(desAlias0,0x41,0x2f) #Set HSWboard.WriteI2C(desAlias0,0x42,0x40) #HSW upper byteboard.WriteI2C(desAlias0,0x41,0x30)board.WriteI2C(desAlias0,0x42,0x3c) #HSW lower byte## *********************************************## Program DPTX for DP port 0## *********************************************board.WriteI2C(desAlias0,0x48,0x1) #Enable APB interfaceboard.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xa4) #Set bit per colorboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0x20)board.WriteI2C(desAlias0,0x4c,0x0)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xb8) #Set pixel widthboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0x4)board.WriteI2C(desAlias0,0x4c,0x0)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xac) #Set DP Mvidboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0x50)board.WriteI2C(desAlias0,0x4c,0x75)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xb4) #Set DP Nvidboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0x0)board.WriteI2C(desAlias0,0x4c,0x80)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xc8) #Set TU Modeboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0x0)board.WriteI2C(desAlias0,0x4c,0x0)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xb0) #Set TU Sizeboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0x40)board.WriteI2C(desAlias0,0x4c,0x0)board.WriteI2C(desAlias0,0x4d,0x2c)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xc8) #Set FIFO Sizeboard.WriteI2C(desAlias0,0x4a,0x0)board.WriteI2C(desAlias0,0x4b,0x6)board.WriteI2C(desAlias0,0x4c,0x40)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xbc) #Set data countboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0x80)board.WriteI2C(desAlias0,0x4c,0x7)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xc0) #Disable STREAM INTERLACEDboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0x0)board.WriteI2C(desAlias0,0x4c,0x0)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0xc4) #Set SYNC polarityboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0xc)board.WriteI2C(desAlias0,0x4c,0x0)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)## *********************************************## Release Des DTG reset## *********************************************print("Release Des 0 DTG reset and enable video output")board.WriteI2C(desAlias0,0x40,0x50) #Select DTG Pageboard.WriteI2C(desAlias0,0x41,0x32)board.WriteI2C(desAlias0,0x42,0x5) #Release Local Display Output Port 0 DTG with WDT Enabledboard.WriteI2C(desAlias0,0x41,0x62)board.WriteI2C(desAlias0,0x42,0x5) #Release Local Display Output Port 1 DTG with WDT Enabledboard.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0x80) #Set Htotalboard.WriteI2C(desAlias0,0x4a,0x1)board.WriteI2C(desAlias0,0x4b,0xd0)board.WriteI2C(desAlias0,0x4c,0xa)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)## *********************************************## Enable DP 0 output## *********************************************board.WriteI2C(desAlias0,0x48,0x1)board.WriteI2C(desAlias0,0x49,0x84) #Enable DP outputboard.WriteI2C(desAlias0,0x4a,0x0)board.WriteI2C(desAlias0,0x4b,0x1)board.WriteI2C(desAlias0,0x4c,0x0)board.WriteI2C(desAlias0,0x4d,0x0)board.WriteI2C(desAlias0,0x4e,0x0)jQuery(function(j){var fullScreenToggle = j(‘#fragment-1a84591e31034fac832d29ed8584666c307589314_code-editor-fs’);var codeEditor = j(‘#fragment-1a84591e31034fac832d29ed8584666c307589314_code-editor’);fullScreenToggle.on(‘click’, function(){if (codeEditor.evolutionCodeEditor(‘fullscreen’)) {codeEditor.evolutionCodeEditor(‘fullscreen’, false);} else {codeEditor.evolutionCodeEditor(‘fullscreen’, true);}return false;});
});
,
yingdong ou:
Hi Alice
配置看最新回复,INTB对应port0,REM_INTB对应prot1该如何配置
,
Alice:
您好,
根据之前的说明,示波器将INTB测量为一个持续的低电平,而它通常应该像GPIO4一样处于高电平,在中断后被拉低。
在中断后,INTB持续为低电平是预期的行为。
我们在数据手册中指出,必须读取寄存器0xC7以允许INTB返回高电平。
REM_INTB在GPIO4(983端口0 -> 944A),INTB来自943A端口1 -> 948
/***********************************************remote interrupt config *********************************************/ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x02); //Enable writes to TX port 1 onlyti983_write_byte(ti_bridge->ti983_i2c, 0xc6, 0x21);ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x01); //Change back to defaultti983_write_byte(ti_bridge->ti983_i2c, 0x1b, 0x98);// to port1ti983_write_byte(ti_bridge->ti983_i2c, 0x3F, 0xEF); //GPIO input disableti983_write_byte(ti_bridge->ti983_i2c, 0x51, 0x83);如果您仍然有问题,请提供983主页面的寄存器设置。
,
yingdong ou:
修改后intb会变成低电平,读取寄存器0xC7也依然是低电平,983主页面的寄存器设置如下,请参考,谢谢!
,
Alice:
您好,
您还需要读取全局中断状态(983 主页面 0x52)。
从您的寄存器转储中,我们可以看到 0x52 = 0x82。如果第七位被设置,则表明全局中断已被触发。
,
Dennis Duncan:
您好,十分抱歉我们这边因为其它事情耽搁导致回复晚了;
根据上条note,我们这边尝试了触发中断后去读取寄存器0x52和0xc7,但intb依然为低电平,rem_intb/gpio4就一直为高电平,麻烦再帮忙看下是否有其它措施
,
Alice:
您好,
在983主页面注册0x52时,它指出在中断触发后需要读取两个状态寄存器。
请确认已经在读取FPD-Link III_PORT_STS1寄存器(983主页面0xC7)。
还需要读取FPD-Link IV_PORT_STS1,该寄存器位于间接页面9寄存器0x9D。
,
Dennis Duncan:
您好,Alice,按照您上面的回复,我们又读完0x52和0xc7后,再去读了page9的0x9d,读出来的值为0x60,但实际测量INTB脚还是低电平,没有恢复高电平
,
Alice:
您好,
由于中断触发在SER的REM_INTB上显示,这可能是由于在设置FPD4连接之前没有正确设置FPD端口选择。
您能否只分享脚本的GPIO编程部分?您是如何触发944A的中断的?
,
yingdong ou:
Hi,Alice
我看了下我们这边配置的code
对gpio的配置仅有如下几行代码,其余的是您上边note里给的配置,没有其它地方有配置gpio了; ti983_write_byte(ti_bridge->ti944_linka_i2c, 0x16, 0x90); //944 gpio 1 ti983_write_byte(ti_bridge->ti944_linka_i2c, 0x1f, 0x90); //944 gpio 10 ti983_write_byte(ti_bridge->ti944_linka_i2c, 0x44, 0x81); // set TP INT gpio config ti983_write_byte(ti_bridge->ti944_linka_i2c, 0x13, 0xdf); // set TP INT gpio config
我们是通过点击带有944a的触摸屏来触发中断的;
thanks!
,
Alice:
您好,
由于这个问题发生在端口1,您能否按顺序分享GPIO和中断设置脚本。可能与端口选择相关,并且要检查SER GPIO设置是否与FPD 3模式相匹配。您是否仍在运行下面的序列?/***********************************************remote interrupt config*********************************************/ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x02); //Enable writes to TX port 1 onlyti983_write_byte(ti_bridge->ti983_i2c, 0xc6, 0x21);ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x01); //Change back to defaultti983_write_byte(ti_bridge->ti983_i2c, 0x1b, 0x98); // to port1ti983_write_byte(ti_bridge->ti983_i2c, 0x3F, 0xEF); //GPIO input disableti983_write_byte(ti_bridge->ti983_i2c, 0x51, 0x83);
,
Dennis Duncan:
您好,
如上面所说,gpio的配置只有下面这两处,是给944配置的,完整的配置脚本上面也是有发过的,可以参考上面完整的配置脚本,其它地方就没配置过gpio了;
ti983_write_byte(ti_bridge->ti944_linka_i2c, 0x16, 0x90); //944 gpio 1 ti983_write_byte(ti_bridge->ti944_linka_i2c, 0x1f, 0x90); //944 gpio 10ti983_write_byte(ti_bridge->ti944_linka_i2c, 0x44, 0x81); // set TP INT gpio config ti983_write_byte(ti_bridge->ti944_linka_i2c, 0x13, 0xdf); // set TP INT gpio config你之前发的配置我们是有加紧code里一直在运行的
/***********************************************remote interrupt config*********************************************/ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x02); //Enable writes to TX port 1 onlyti983_write_byte(ti_bridge->ti983_i2c, 0xc6, 0x21);ti983_write_byte(ti_bridge->ti983_i2c, 0x2d, 0x01); //Change back to defaultti983_write_byte(ti_bridge->ti983_i2c, 0x1b, 0x98); // to port1ti983_write_byte(ti_bridge->ti983_i2c, 0x3F, 0xEF); //GPIO input disableti983_write_byte(ti_bridge->ti983_i2c, 0x51, 0x83);
thanks!
TI中文支持网















