## 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.4 import 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 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 (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 = 7456536 if 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 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" 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 = VP1 board.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 - 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,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 Enabled board.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)