SNLA267A March   2019  – June 2019 DS90UB953-Q1 , DS90UB954-Q1 , DS90UB960-Q1

 

  1.   How to Design a FPD-Link III System Using DS90UB953-Q1 and DS90UB954-Q1
    1.     Trademarks
    2. 1 Overview
      1. 1.1 System Level Functionality
    3. 2 Basic Design Rules
      1. 2.1 IDX and MODE Pin Verification
        1. 2.1.1 REF Clock, CLK IN, AON and Frequency Selection
          1. 2.1.1.1 Synchronous Mode
          2. 2.1.1.2 Non-Synchronous CLK_IN Mode
          3. 2.1.1.3 Non-Synchronous AON Mode
          4. 2.1.1.4 CSI Throughput
          5. 2.1.1.5 Clocking and Frequency Selection Example
      2. 2.2 Successful I2C Communication With 953 and 954
        1. 2.2.1 Aliasing
        2. 2.2.2 Port Selection on 954
      3. 2.3 I2C Passthrough Verification
      4. 2.4 Basic Diagnostic and Error Registers
    4. 3 Designing the Link Between SER and DES
      1. 3.1 Back Channel Configuration
      2. 3.2 BIST
        1. 3.2.1 BIST Configuration and Status
        2. 3.2.2 BIST Procedure
        3. 3.2.3 List of Registers Used in BIST Script
      3. 3.3 AEQ
      4. 3.4 CML Out
    5. 4 Designing Link Between SER and Image Sensor
      1. 4.1 Sensor Initialization Using SER GPIOs
      2. 4.2 CLKOUT
    6. 5 Designing Link Between DES and ISP
      1. 5.1 Frame Sync
        1. 5.1.1 Using SER GPIOs From the DES
        2. 5.1.2 Internal and External Frame Sync Configuration
        3. 5.1.3 Tables for Using GPIOs and Frame Sync
      2. 5.2 Port Forwarding
      3. 5.3 Pattern Generation
        1. 5.3.1 Accessing Indirect Registers
        2. 5.3.2 Pattern Generation From DES to ISP and SER to DES
    7. 6 Hardware Design
      1. 6.1 Basic I2C Connectors
        1. 6.1.1 I2C Pullups for SDA and SCL
      2. 6.2 AC Capacitor on FPD3 Link
      3. 6.3 Capacitance Used in Loop Filter
      4. 6.4 Critical Signal Routing
      5. 6.5 Time Domain Reflection
      6. 6.6 Return Loss and Insertion Loss
      7. 6.7 Power-over-Coax (PoC)
      8. 6.8 Voltage and Temperature Sensing
    8. 7 Appendix
      1. 7.1 Scripts
        1. 7.1.1  BIST Script
        2. 7.1.2  Example Sensor Initialization Script
        3. 7.1.3  CSI Enable and Port Forwarding Script
        4. 7.1.4  Enabling CMLOUT FPD3 RX Port 0 on 954
        5. 7.1.5  Remote Enabled SER GPIO Toggle Script
        6. 7.1.6  Local SER GPIO Toggle Script
        7. 7.1.7  Internal FrameSync on 953 GPIO1
        8. 7.1.8  External FrameSync on 953 GPIO0
        9. 7.1.9  SER GPIOs as Inputs and Output to DES GPIO
        10. 7.1.10 Pattern Generation on the 953 Script
        11. 7.1.11 Pattern Generation on the 954 Script
        12. 7.1.12 Monitor Errors for Predetermined Time Script
        13. 7.1.13 954 and 953 CSI Register Check Script
        14. 7.1.14 Time Till Lock Script on 953
      2. 7.2 Acknowledgments
  2.   Revision History

BIST Script

## BIST_953_954_WithForcedError.py ## ## revision 1.1 June 13, 2017 ## ######## ###################### ## ## This script file is used to check the link between the 953 and 954 ## ## The Built In Self Test (BIST) generates a puesdo random sequence ## and checks for CRC errors between transmitted and received sequence. ## ## Rev. 1.1 ## Added Parity Errors, restructured code ## ## ###################### print "\n\n" import time # Define 954 and 953 Addresses UB953 = 0x30 #953 SER Alias ID, check 0x5C on 954 for confirmation UB954 = 0x7A #954 Device ID, check 0x00 on 954 for confirmation # Port selection, Passthrough, and aliasing #board.WriteI2C(UB954, 0x4C, 0x01) #Enable Port 0 writes #board.WriteI2C(UB954, 0x58, 0x5E) #I2C Pass through Enabled and BC = 50Mbps #board.WriteI2C(UB954, 0x5C, 0x18) #953 Alias defined as 0x18 # Digital Reset except for registers board.WriteI2C(UB953, 0x01, 0x01) #Resets 953 time.sleep(0.5) board.WriteI2C(UB954, 0x01, 0x01) #Resets 954 time.sleep(0.5) print ("Devices Reset") # Confirm Devices can communicate with each other print ("954 Device ID (0x00):", hex(board.ReadI2C(UB954, 0x00, 1))) #954 Device ID, should be 0x7A, check 0x00 for confirmation time.sleep(0.5) print ("953 Device ID (0x00):", hex(board.ReadI2C(UB953, 0x00, 1))) #953 Device ID, should be 0x30, check 0x5B for confirmation print ("------------------------------------------------------------------") time.sleep(0.5) # Read Receiver Lock Status print ("Receiver Lock Status (0x04):", hex(board.ReadI2C(UB954, 0x04, 0x1))) #0x04 is DEVICE_STS of 954 print ("Should read 0xCF") print ("------------------------------------------------------------------") time.sleep(1) # Enable write for Port0 of FPD3_PORT_SEL board.WriteI2C(UB954, 0x4C, 0x01) #0x4C is FPD3_PORT_SEL # Clear Errors and Error Count board.WriteI2C(UB953, 0x49, 0x28) #0x49 is BC_CTRL. 0x28 selects BIST_CRC ERR CLR and CRC ERR CLR print ("Read BCC Error Status (0x79):", hex(board.ReadI2C(UB953, 0x79, 1))) #Clear possible BCC_Error by Reading BCC Error Status print ("Consult Register 0x79 on the SER for more information") print ("------------------------------------------------------------------") print ("Pre-Error Link Status of 953 (0x52):", hex(board.ReadI2C(UB953, 0x52,1))) #0x52 is GENERAL_STS of 953 print ("Should read 0x45 = RX Lock Detect, HS PLL Lock, Link Detect") print ("------------------------------------------------------------------") print ("BIST CRC Error count (0x54) on 953 before forced error.", hex(board.ReadI2C(UB953, 0x54, 1)))#0x54 is BIST ERR CNT print ("------------------------------------------------------------------") time.sleep(1) # Enabling BIST, Error, and Lock-Change Status print ("Read BIST CTL register (0xB3) Before BIST ENABlED", hex(board.ReadI2C(UB954, 0xB3, 1))) #0xB3 is BIST_CTL, bit 1 controls if enabled or not print ("Should read 0x00 or 0x08\n") board.WriteI2C(UB954, 0xB3, 0x01) #Enable BIST using BIST_CTL print ("Read BIST CTL (0xB3) register After BIST ENABLED", hex(board.ReadI2C(UB954, 0xB3, 1))) #0xB3 is BIST_CTL print ("Should read 0x01") time.sleep(0.25) print ("------------------------------------------------------------------") print ("Read BIST Lock Status Change of 954 RIGHT AFTER BIST enabled (0x4D):", hex(board.ReadI2C(UB954, 0x4D,1))) #0x4D is RX_PORT_STS1 of 954 print ("Read to clear BIST enable Lock Status Change.") board.WriteI2C(UB954, 0xD0, 0x01) #Force 1 Error, 0xD0 is PORT_DEBUG register #board.WriteI2C(UB954, 0xD0, 0x02) #Force Continuous errors, 0xD0 is PORT_DEBUG register time.sleep(10) #Can run BIST for as long as needed #board.WriteI2C(UB954, 0xD0, 0x00) #If forced continuous errors, stop forcing errors print ("Read Post-BIST Lock Status Change of 954 RIGHT BEFORE BIST disabled (0x4D):", hex(board.ReadI2C(UB954, 0x4D,1))) #0x4D is RX_PORT_STS1 of 954 print ("Should read 0x03, If lock status changed during BIST, will read 0x13") # Disable BIST and Port0 board.WriteI2C(UB954, 0xB3, 0x00) #Disable BIST, using BIST_CTL board.WriteI2C(UB954, 0x4C, 0x00) #0x4C is FPD3_PORT_SEL print ("------------------------------------------------------------------") time.sleep(1) # Check if Error(s) occurred print ("Post-Error Link Status of 953 (0x52):", hex(board.ReadI2C(UB953, 0x52,1))) #0x52 is GENERAL_STS of 953 print "Should read 0x4D = RX Lock Detect, HS PLL Lock, Link Detect, and BIST CRC Error" print ("Receiver Lock Status (0x04):", hex(board.ReadI2C(UB954, 0x04, 0x1))) #0x04 is DEVICE_STS of 954 print ("Should read 0xCF") print ("------------------------------------------------------------------") print ("BIST CRC Error count (0x54) on 953.", hex(board.ReadI2C(UB953, 0x54, 1))) #0x54 is BIST ERR CNT print ("Parity Error count MSB (0x56) on 954.", hex(board.ReadI2C(UB954, 0x56, 1))) #0x56 is number of Parity error 8 most significant bits print ("Parity Error count LSB (0x55) on 954.", hex(board.ReadI2C(UB954, 0x55, 1))) #0x55 is number of Parity error 8 least significant bits print ("------------------------------------------------------------------") #print ("953 Device ID (0x00):", hex(board.ReadI2C(UB953, 0x00, 1))) #953 Device ID, should be 0x30, check 0x5B for confirmation, #Usually use this to see if 954 is stuck in BIST mode # Clear BIST Errors on 953 board.WriteI2C(UB953, 0x49, 0x28) #0x49 is BC_CTRL. 0x28 selects BIST_CRC ERR CLR and CRC ERR CLR print "\n\n" #New line Printed