This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DS90UB983-Q1: 983 + 984 I2C透传失败

Part Number: DS90UB983-Q1

## 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.3


import time 
## Serializer: DS90Ux983-Q1
## User Inputs:
## Serializer I2C Address= 0x18
## Max DP Lane Count = 4
## Max DP Lane Rate = 8.1Gbps
## DPRX no SSC Mode Enabled
## DP SST Mode Enabled
## DP Mode Enabled
## FPD-Link Configuration: FPD-Link IV Single Port 0 - 10.8Gbps


## Number of Displays = 1

## Video Processor 0 (Stream 0) Properties:
## Total Horizontal Pixels = 3084
## Total Vertical Lines = 1662
## Active Horizontal Pixels = 2880
## Active Vertical Lines = 1620
## Horizontal Back Porch = 60
## Vertical Back Porch = 8
## Horizontal Sync = 60
## Vertical Sync = 2
## Horizontal Front Porch = 84
## Vertical Front Porch = 32
## Horizontal Sync Polarity = Positive
## Vertical Sync Polarity = Positive
## Bits per pixel = 24
## Pixel Clock = 307.53MHz
## PATGEN Enabled

## Deserializer 0: DS90uH984-Q1
## User Inputs:
## Deserializer I2C Address = 0x58
## Deserializer I2C Alias = 0x58
## 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 8.1 Gbps
## DP lane number set to 4 lanes

## *********************************************
## Set up Variables
## *********************************************
serAddr = 0x18
desAddr0 = 0x58
desAlias0 = 0x5A
board.WriteI2C(serAddr,0x70,desAddr0)
board.WriteI2C(serAddr,0x78,desAlias0)
board.WriteI2C(serAddr,0x88,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 = "Single Port 0"
board.WriteI2C(serAddr,0x5b,0x23) #Disable FPD3 FIFO pass through
if TX_MODE != TX_MODE_STRAP:
  print "Override to Single Port 0 Mode"
  board.WriteI2C(serAddr,0x5,0x2c) #Force FPD4_TX single port 0 mode
  board.WriteI2C(serAddr,0x1,0x1) #Soft Reset SER
  time.sleep(0.04)

## *********************************************
## Set up FPD IV PLL Settings
## *********************************************
FPD0_Rate = 10.8
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
board.WriteI2C(serAddr,0x40,0x8) #Select PLL reg page
board.WriteI2C(serAddr,0x41,0x5b)
board.WriteI2C(serAddr,0x42,0x8) #Disable 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,0x40,0x8) #Select PLL page
  board.WriteI2C(serAddr,0x41,0x5) #Select Ncount Reg
  board.WriteI2C(serAddr,0x42,0x64) #Set Ncount
  board.WriteI2C(serAddr,0x41,0x13) #Select post div reg
  board.WriteI2C(serAddr,0x42,0x80) #Set post div for 10.8 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,0x86) #Additional BC sampling rate for 10.8Gbps
  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,0x51) #Set HALFRATE_MODE
  board.WriteI2C(serAddr,0x2,0x50) #Unset HALFRATE_MODE Override

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) #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 (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 (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 = 4
board.WriteI2C(serAddr,0x4a,0x0)
board.WriteI2C(serAddr,0x4b,0x4)
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 CS2.0 with 8155 at 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 and DP/eDP Mode
board.WriteI2C(serAddr,0x4a,0x0)
board.WriteI2C(serAddr,0x4b,0x14)
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 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_SRC_SELECT to Stream 0 for SST Mode
board.WriteI2C(serAddr,0x41,0x2)
board.WriteI2C(serAddr,0x42,0x40) #VID H Active
board.WriteI2C(serAddr,0x42,0xb) #VID H Active
board.WriteI2C(serAddr,0x41,0x10)
board.WriteI2C(serAddr,0x42,0x40) #Horizontal Active
board.WriteI2C(serAddr,0x42,0xb) #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,0xc) #Horizontal Total
board.WriteI2C(serAddr,0x42,0xc) #Horizontal Total
board.WriteI2C(serAddr,0x42,0x54) #Vertical Active
board.WriteI2C(serAddr,0x42,0x6) #Vertical Active
board.WriteI2C(serAddr,0x42,0x8) #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,0x20) #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,0x73) #M value
board.WriteI2C(serAddr,0x42,0x24) #M value
board.WriteI2C(serAddr,0x42,0xf) #N value


## *********************************************
## Enable PATGEN
## *********************************************
board.WriteI2C(serAddr,0x40,0x30)
board.WriteI2C(serAddr,0x41,0x29)
board.WriteI2C(serAddr,0x42,0x8) #Set PATGEN Color Depth to 24bpp for VP0
board.WriteI2C(serAddr,0x41,0x28)
print("Enable PATGEN on VP0")
board.WriteI2C(serAddr,0x42,0x95) #Enable PATGEN on VP0 - Comment out this line to disable PATGEN and enable end to end video

## *********************************************
## 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,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)
time.sleep(0.02) # Delay > 1/FPS (example is 20ms for 60FPS)
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)

## *********************************************
## 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) #Link layer 0 stream enable
board.WriteI2C(serAddr,0x42,0x1) #Link layer 0 stream enable
board.WriteI2C(serAddr,0x41,0x6) #Link layer 0 time slot 0
board.WriteI2C(serAddr,0x42,0x41) #Link layer 0 time slot
board.WriteI2C(serAddr,0x41,0x20) #Set Link layer vp bpp
board.WriteI2C(serAddr,0x42,0x95) #Set Link layer vp bpp according to VP Bit per pixel
board.WriteI2C(serAddr,0x41,0x0) #Link layer 0 enable
board.WriteI2C(serAddr,0x42,0x3) #Link layer 0 enable

## *********************************************
## Enable VPs
## *********************************************
print("Enable Video Processors")
board.WriteI2C(serAddr,0x43,0x0) #Set number of VPs used = 1
board.WriteI2C(serAddr,0x44,0x1) #Enable video processors

## *********************************************
## Check if VP is synchronized to DP input
## *********************************************
time.sleep(0.1) # Delay for VPs to sync to DP source

retry = 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"

if VP0sts & 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)

## *********************************************
## 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 - 7

board.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 Reset

Reg_value = board.ReadI2C(serAddr,0x2,1)
Reg_value = Reg_value & 0xdf
board.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 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,0xe0) #Set DP Rate to 8.1Gbps
board.WriteI2C(desAlias0,0x41,0x82)
board.WriteI2C(desAlias0,0x42,0x2) #Enable force DP rate
board.WriteI2C(desAlias0,0x40,0x2c) #Select DP Page
board.WriteI2C(desAlias0,0x41,0x91)
board.WriteI2C(desAlias0,0x42,0xc) #Force 4 lanes
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,0x4a) #Program M value lower byte
board.WriteI2C(desAlias0,0xb3,0xb1) #Program M value middle byte
board.WriteI2C(desAlias0,0xb4,0x4) #Program M value upper byte
board.WriteI2C(desAlias0,0xb5,0x40) #Program N value lower byte
board.WriteI2C(desAlias0,0xb6,0x70) #Program N value middle byte
board.WriteI2C(desAlias0,0xb7,0x31) #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,0x98)
board.WriteI2C(desAlias0,0x4c,0x30)
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,0x12)
board.WriteI2C(desAlias0,0x4e,0x4)

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,0x70)
board.WriteI2C(desAlias0,0x4c,0x8)
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 Enabled


board.WriteI2C(desAlias0,0x48,0x1)
board.WriteI2C(desAlias0,0x49,0x80) #Set Htotal
board.WriteI2C(desAlias0,0x4a,0x1)
board.WriteI2C(desAlias0,0x4b,0xc)
board.WriteI2C(desAlias0,0x4c,0xc)
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)

我现在适应983+984,读取983寄存器0x08 = 0x58,寄存器0x0C = 0x01,可以看出已经检测到线路LINK上,使用98x Script Gen v5p3生成的配置如附件,

uint8_t serAddr = 0x18;
uint8_t desAddr0 = 0x58;
uint8_t desAlias0 = 0x5A;
uint8_t McuAddr0 = 0x60;
uint8_t McuAlias0 = 0x60;

WriteI2C(serAddr,0x70,desAddr0);
WriteI2C(serAddr,0x78,desAlias0);
WriteI2C(serAddr,0x71,McuAddr0);
WriteI2C(serAddr,0x79,McuAlias0);
WriteI2C(serAddr,0x88,0x0);
WriteI2C(serAddr,0x89,0x0);

if((FPD0_Rate != FPD4_Strap_Rate_P0)|| (SSCG_FDEV_STRAP != SSCG_FDEV_0)|| (SSCG_FMOD_STRAP != SSCG_FMOD_0)|| (SSCG_TYPE_STRAP != SSCG_TYPE_0))
{
WriteI2C(serAddr,0x1,0x1); //soft reset Ser
delay_ms(100);
printf("Enable I2C Passthrough\n");
uint8_t I2C_PASS_THROUGH = ReadI2C(serAddr,0x7,1);
uint8_t I2C_PASS_THROUGH_MASK = 0x08;
uint8_t I2C_PASS_THROUGH_REG = I2C_PASS_THROUGH | I2C_PASS_THROUGH_MASK;
WriteI2C(serAddr,0x07,I2C_PASS_THROUGH_REG); //Enable I2C Passthrough
delay_ms(1000);
WriteI2C(desAlias0,0x1,0x1); //Soft reset Des
delay_ms(100);
}
else {
printf("Enable I2C Passthrough\n");
uint8_t I2C_PASS_THROUGH = ReadI2C(serAddr,0x7,1);
uint8_t I2C_PASS_THROUGH_MASK = 0x08;
uint8_t I2C_PASS_THROUGH_REG = I2C_PASS_THROUGH | I2C_PASS_THROUGH_MASK;
WriteI2C(serAddr,0x07,I2C_PASS_THROUGH_REG); //Enable I2C Passthrough
}
WriteI2C(serAddr,0x2d,0x1); //Select write to port0 reg

使能了透传,也是设置了透传ID,但是远程读写不了 984的寄存器

984配置的10.8G  FPD-LINK IV 单Port

屏参如下
//## Total Horizontal Pixels = 3084
//## Total Vertical Lines = 1662
//## Active Horizontal Pixels = 2880
//## Active Vertical Lines = 1620
//## Horizontal Back Porch = 60
//## Vertical Back Porch = 8
//## Horizontal Sync = 60
//## Vertical Sync = 2
//## Horizontal Front Porch = 84
//## Vertical Front Porch = 32
//## Horizontal Sync Polarity = Positive
//## Vertical Sync Polarity = Positive
//## Bits per pixel = 24
//## Pixel Clock = 307.53MHz
//## PATGEN Enabled

这是什么原因造成的