## 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
这是什么原因造成的