################################################################################### UB954 = 0x60 # 8-bit for second port LED_IR_R = 0xC0 # 8-bit LED_G_B = 0xC2 # 8-bit ISPA = 0x78 # 8 bit ISPB = 0x7A # 8 bit ACCEL = 0x32 # 8 bit TMP_HUM = 0x80 # 8 bit ################################################################################### UB953A_alias = 0x18 # 8-bit UB953B_alias = 0x1A # 8-bit LED_IR_R_alias = 0x36 # 8-bit LED_G_B_alias = 0x38 # 8-bit ISPA_alias = 0x3A # 8-bit ISPB_alias = 0x3C # 8-bit ACCEL_alias = 0x3E # 8 bit TMP_HUM_alias = 0x42 # 8 bit #################################################################################### # setup the 954 to be csi/ and 50MHz ################################################################################### board.WriteI2C (UB954,0x4c,0x01) # RX_PORT 0 read / write board.WriteI2C (UB954,0x6d,0x78) # port config csi mode and stp cable board.WriteI2C (UB954,0x4c,0x12) # RX_PORT 1 read / write board.WriteI2C (UB954,0x6d,0x78) # port config csi mode and stp cable # Setup DeviceID and associated Aliases board.WriteI2C (UB954,0x4c,0x01) # RX_PORT 0 read / write board.WriteI2C (UB954,0x5d,LED_IR_R) # SlaveID[0] print "Port 0 SlaveID[0] LED driver Red,IR ",hex(board.ReadI2C(UB954,0x5d,0x01)) board.WriteI2C (UB954,0x5e,LED_G_B) # SlaveID[1] print "Port 0 SlaveID[1] LED driver GRN, BLU ",hex(board.ReadI2C(UB954,0x5e,0x01)) board.WriteI2C (UB954,0x5f,ISPA) # SlaveID[2] print "Port 0 SlaveID[2] ISPA ",hex(board.ReadI2C(UB954,0x5f,0x01)) board.WriteI2C (UB954,0x60,ACCEL) # SlaveID[3] print "Port 0 SlaveID[3] ACCEL ",hex(board.ReadI2C(UB954,0x60,0x01)) board.WriteI2C (UB954,0x61,TMP_HUM) # SlaveID[4] print "Port 0 SlaveID[4] TMP_HUM ",hex(board.ReadI2C(UB954,0x61,0x01)) board.WriteI2C (UB954,0x5c,UB953A_alias) # SerAlias print "Port 0 SerAlias ",hex(board.ReadI2C(UB954,0x5c,0x01)) board.WriteI2C (UB954,0x65,LED_IR_R_alias) # SlaveAlias[0] print "Port 0 SlaveAlias[0] LED driver Red,IR ",hex(board.ReadI2C(UB954,0x65,0x01)) board.WriteI2C (UB954,0x66,LED_G_B_alias) # SlaveAlias[1] print "Port 0 SlaveAlias[1] LED driver GRN, BLU ",hex(board.ReadI2C(UB954,0x66,0x01)) board.WriteI2C (UB954,0x67,ISPA_alias) # SlaveAlias[2] print "Port 0 SlaveAlias[2] ISPA ",hex(board.ReadI2C(UB954,0x67,0x01)) board.WriteI2C (UB954,0x68,ACCEL_alias) # SlaveAlias[3] print "Port 0 SlaveAlias[3] ACCEL ",hex(board.ReadI2C(UB954,0x68,0x01)) board.WriteI2C (UB954,0x69,TMP_HUM_alias) # SlaveAlias[4] print "Port 0 SlaveAlias[4] TMP_HUM ",hex(board.ReadI2C(UB954,0x69,0x01)) board.WriteI2C (UB954,0x4c,0x12) # RX_PORT 1 read / write board.WriteI2C (UB954,0x5d,ISPB) # SlaveID[0] print "Port 1 SlaveID[0] ISPB ",hex(board.ReadI2C(UB954,0x5d,0x01)) board.WriteI2C (UB954,0x5c,UB953B_alias) # SerAlias print "Port 1 SerAlias ",hex(board.ReadI2C(UB954,0x5c,0x01)) board.WriteI2C (UB954,0x65,ISPB_alias) # SlaveAlias[0] print "Port 1 SlaveAlias[0] ISPB ",hex(board.ReadI2C(UB954,0x65,0x01)) ############################################################################################### # Setup both ports ############################################################################################### board.WriteI2C (UB954,0x4c,0x01) # RX_PORT 0 read / write board.WriteI2C(UB954,0x58,0x5e) # BC to 25 Mbps, I2C pass thru and pass thru all - seems to be required board.WriteI2C(UB954,0x72,0xe4) # csi vc map to 0x2c for raw12 board.WriteI2C (UB954,0x4c,0x12) # RX_PORT 1 read / write board.WriteI2C(UB954,0x58,0x5e) # BC to 25 Mbps : to set to 50 use 0x5e board.WriteI2C(UB954,0x72,0xe1) # csi vc map to 0x2c for raw12 board.WriteI2C (UB954,0x4c,0x01) # RX_PORT 0 read / write # Toggle UB953A GPIO pins #UB953A_alias = 0x18 board.WriteI2C (UB953A_alias,0x0e,0xf0) # sets all GPIO as outputs print "Read USB953A GPIO pin status - 0xF0 means set as outputs ",hex(board.ReadI2C(UB953A_alias,0x0e,0x01)) board.WriteI2C (UB953A_alias,0x0d,0x0f) # sets logical outputs to '1' on all GPIO print "Read USB953A GPIO pin level - 0x0F means '1', 0x00 means '0' ",hex(board.ReadI2C(UB953A_alias,0x0d,0x01)) board.WriteI2C (UB953A_alias,0x0d,0x00) # sets logical outputs to '0' on all GPIO print "Read USB953A GPIO pin level - 0x0F means '1', 0x00 means '0' ",hex(board.ReadI2C(UB953A_alias,0x0d,0x01)) board.WriteI2C (UB953A_alias,0x0d,0x0f) # sets logical outputs to '1' on all GPIO print "Read USB953A GPIO pin level - 0x0F means '1', 0x00 means '0' ",hex(board.ReadI2C(UB953A_alias,0x0d,0x01)) board.WriteI2C (UB954,0x4c,0x12) # RX_PORT 0 read / write # Toggle UB953B GPIO pins - leave as '1' to keep ISP out of reset board.WriteI2C (UB953B_alias,0x0e,0xf0) # sets all GPIO as outputs print "Read USB953B GPIO pin status - 0xF0 means set as outputs ",hex(board.ReadI2C(UB953B_alias,0x0e,0x01)) board.WriteI2C (UB953B_alias,0x0d,0x0f) # sets logical outputs to '1' on all GPIO print "Read USB953B GPIO pin level - 0x0F means '1', 0x00 means '0' ",hex(board.ReadI2C(UB953B_alias,0x0d,0x01)) board.WriteI2C (UB953B_alias,0x0d,0x00) # sets logical outputs to '0' on all GPIO print "Read USB953B GPIO pin level - 0x0F means '1', 0x00 means '0' ",hex(board.ReadI2C(UB953B_alias,0x0d,0x01)) board.WriteI2C (UB953B_alias,0x0d,0x0f) # sets logical outputs to '1' on all GPIO print "Read USB953B GPIO pin level - 0x0F means '1', 0x00 means '0' ",hex(board.ReadI2C(UB953B_alias,0x0d,0x01)) board.WriteI2C (UB954,0x4c,0x01) # RX_PORT 0 read / write print "Read first 6 registers of ISPA ",board.ReadI2C(ISPA_alias,0x00,0x06) print "Read WHO AM I reg of ACCEL expect 0x33 ",hex(board.ReadI2C(ACCEL_alias,0x0F,0x01)) print "Read ID Reg of TMP_HUM expect [1,77] ",board.ReadI2C(TMP_HUM_alias,0xFB,0x02) board.WriteI2C (UB954,0x4c,0x12) # RX_PORT 0 read / write print "Read first 6 registers of ISPB ",board.ReadI2C(ISPB_alias,0x00,0x06) board.WriteI2C (UB954,0x4c,0x01) # RX_PORT 0 read / write ######################################################################################################### # set clock to 72 Mhz for CX3 aptina10 compatablity : later need 48MHz for the AP1302 ISP ######################################################################################################### board.WriteI2C (UB953B_alias,0x06, 0x2c) # set prescalar : div FC by 1=000,2=001,4=010,8 16 and M =1-31 board.WriteI2C (UB953B_alias,0x07, 0xfa) # Set N value , 0--255 range , default is 28 board.WriteI2C (UB953A_alias,0x06, 0x2c) # set prescalar : div FC by 1=000,2=001,4=010,8 16 and M =1-31 board.WriteI2C (UB953A_alias,0x07, 0xfa) # Set N value , 0--255 range , default is 28 # for 72MHZ use M=9 , N=250 and div =1 # for 48MHZ use M=6 , N=250 and div =1 , SO WE ARE AT 48MHz ############################################################################# # setup 400MHz CSI clock ############################################################################# # Enable 400Mbps CSI in UB954 # # Set CSI_TX_SPEED to select 400Mbps board.WriteI2C(UB954, 0x1F, 0x02) """ # Set PLL Clock divider to 32 #board.Ind_Acc_Write(7, 0xA, 0x80) board.WriteI2C(UB954, 0xB0, (0x7 << 2)) board.WriteI2C(UB954, 0xB1, 0xA) board.WriteI2C(UB954, 0xB2, 0x80) # Set PLL CP current #board.Ind_Acc_Write(0x7, 0x7, 0xE2) board.WriteI2C(UB954, 0xB0, (0x7 << 2)) board.WriteI2C(UB954, 0xB1, 0x7) board.WriteI2C(UB954, 0xB2, 0xE2) # Set CSI Timing parameters #board.Ind_Acc_Write(0x0, 0x40, [0x83, 0x8D, 0x87, 0x87, 0x83, 0x86, 0x84, 0x86, 0x84]]) board.WriteI2C(UB954, 0xB0, 0x2) # set auto-increment, page 0 board.WriteI2C(UB954, 0xB1, 0x40) # CSI Port 0 board.WriteI2C(UB954, 0xB2, 0x83) # TCK Prep board.WriteI2C(UB954, 0xB2, 0x8D) # TCK Zero board.WriteI2C(UB954, 0xB2, 0x87) # TCK Trail board.WriteI2C(UB954, 0xB2, 0x87) # TCK Post board.WriteI2C(UB954, 0xB2, 0x83) # THS Prep board.WriteI2C(UB954, 0xB2, 0x86) # THS Zero board.WriteI2C(UB954, 0xB2, 0x84) # THS Trail board.WriteI2C(UB954, 0xB2, 0x86) # THS Exit board.WriteI2C(UB954, 0xB2, 0x84) # TLPX # Set CSI Timing parameters #board.Ind_Acc_Write(0x0, 0x60, [0x83, 0x8D, 0x87, 0x87, 0x83, 0x86, 0x84, 0x86, 0x84]]) board.WriteI2C(UB954, 0xB0, 0x2) # set auto-increment, page 0 board.WriteI2C(UB954, 0xB1, 0x60) # CSI Port 1 board.WriteI2C(UB954, 0xB2, 0x83) # TCK Prep board.WriteI2C(UB954, 0xB2, 0x8D) # TCK Zero board.WriteI2C(UB954, 0xB2, 0x87) # TCK Trail board.WriteI2C(UB954, 0xB2, 0x87) # TCK Post board.WriteI2C(UB954, 0xB2, 0x83) # THS Prep board.WriteI2C(UB954, 0xB2, 0x86) # THS Zero board.WriteI2C(UB954, 0xB2, 0x84) # THS Trail board.WriteI2C(UB954, 0xB2, 0x86) # THS Exit board.WriteI2C(UB954, 0xB2, 0x84) # TLPX """ ######################################################################################################### board.WriteI2C(UB954,0x33,0x00) # disable CSI port , before issuing a command board.WriteI2C(UB954,0x33,0x01) # ENABLE CSI port , continous clock disabled. print " ENABLE CSI pass through and contious clock and periodic calibration " print " Forward RX1 to CSI 0 " board.WriteI2C(UB954,0x20,0x10) #CSI FORWARDING enable for port 1 AND PORT 0 : 0x10 > port 1 , 0x20 port 0 , 0x00 both ports ######################################################################################################### # 953 config : yuv 422 720p : 24 ips #runTime = 3 #board.devAddr = 0x18 # # CSI sel and CSI enable # board.WriteReg(0x32, 0x01) # time.sleep(0.5) # board.WriteReg(0x33, 0x01) # time.sleep(0.5) # enable pat generator for portB : as port A on board 2 is bust : here portb is 1080p board.WriteI2C (UB953B_alias,0xB0, 0x00) board.WriteI2C (UB953B_alias,0xB1, 0x01) board.WriteI2C (UB953B_alias,0xB2, 0x01) #enable pattern generator board.WriteI2C (UB953B_alias,0xB1, 0x02) board.WriteI2C (UB953B_alias,0xB2, 0x23) #fixed color pattern, 8 color bars, block size of 5 board.WriteI2C (UB953B_alias,0xB1, 0x03) board.WriteI2C (UB953B_alias,0xB2, 0x1e) #CSI Data Identifier (0x24 = RGB888, 0x2C = RAW12, 0x2B = RAW10) board.WriteI2C (UB953B_alias,0xB1, 0x04) board.WriteI2C (UB953B_alias,0xB2, 0x0f) #line size (15:8) board.WriteI2C (UB953B_alias,0xB1, 0x05) board.WriteI2C (UB953B_alias,0xB2, 0x00) #line size (7:0) board.WriteI2C (UB953B_alias,0xB1, 0x06) board.WriteI2C (UB953B_alias,0xB2, 0x01) #bar size (15:8) board.WriteI2C (UB953B_alias,0xB1, 0x07) board.WriteI2C (UB953B_alias,0xB2, 0xe0) #bar size (7:0) board.WriteI2C (UB953B_alias,0xB1, 0x08) board.WriteI2C (UB953B_alias,0xB2, 0x04) #active lines per frame (15:8) board.WriteI2C (UB953B_alias,0xB1, 0x09) board.WriteI2C (UB953B_alias,0xB2, 0x38) #active lines per frame (7:0) board.WriteI2C (UB953B_alias,0xB1, 0x0a) board.WriteI2C (UB953B_alias,0xB2, 0x04) #total lines per frame (15:8) board.WriteI2C (UB953B_alias,0xB1, 0x0b) board.WriteI2C (UB953B_alias,0xB2, 0x65) #total lines per frame (7:0) board.WriteI2C (UB953B_alias,0xB1, 0x0C) board.WriteI2C (UB953B_alias,0xB2, 0x0b) #line period (15:8) board.WriteI2C (UB953B_alias,0xB1, 0x0d) board.WriteI2C (UB953B_alias,0xB2, 0x93) #line period (7:0) board.WriteI2C (UB953B_alias,0xB1, 0x0e) board.WriteI2C (UB953B_alias,0xB2, 0x21) #vertical back porch board.WriteI2C (UB953B_alias,0xB1, 0x0f) board.WriteI2C (UB953B_alias,0xB2, 0x0a) #vertical front porch # board.WriteI2C (UB953B_alias,0xB1, 0x10) board.WriteI2C (UB953B_alias,0xB2, 0xaa) #1st byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x11) board.WriteI2C (UB953B_alias,0xB2, 0x33) #2nd byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x12) board.WriteI2C (UB953B_alias,0xB2, 0xf0) #3rd byte of fixed color""" board.WriteI2C (UB953B_alias,0xB1, 0x13) board.WriteI2C (UB953B_alias,0xB2, 0x7f) #4th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x14) board.WriteI2C (UB953B_alias,0xB2, 0x55) #5th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x15) board.WriteI2C (UB953B_alias,0xB2, 0xcc) #6th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x16) board.WriteI2C (UB953B_alias,0xB2, 0x0f) #7th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x17) board.WriteI2C (UB953B_alias,0xB2, 0x80) #8th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x18) board.WriteI2C (UB953B_alias,0xB2, 0x00) #9th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x19) board.WriteI2C (UB953B_alias,0xB2, 0x00) #10th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x1A) board.WriteI2C (UB953B_alias,0xB2, 0x00) #11th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x1B) board.WriteI2C (UB953B_alias,0xB1, 0x00) #12th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x1C) board.WriteI2C (UB953B_alias,0xB2, 0x00) #13th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x1D) board.WriteI2C (UB953B_alias,0xB2, 0x00) #14th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x1e) board.WriteI2C (UB953B_alias,0xB2, 0x00) #15th byte of fixed color board.WriteI2C (UB953B_alias,0xB1, 0x1F) board.WriteI2C (UB953B_alias,0xB2, 0x00) #16th byte of fixed color ######################################################################################################### # 953 config : yuv 422 720p : 24 ips #runTime = 3 #board.devAddr = 0x18 # # CSI sel and CSI enable # board.WriteReg(0x32, 0x01) # time.sleep(0.5) # board.WriteReg(0x33, 0x01) # time.sleep(0.5) # enable pat generator for portB : as port A on board 2 is bust : port a now 1080p board.WriteI2C (UB953A_alias,0xB0, 0x00) board.WriteI2C (UB953A_alias,0xB1, 0x01) board.WriteI2C (UB953A_alias,0xB2, 0x01) #enable pattern generator board.WriteI2C (UB953A_alias,0xB1, 0x02) board.WriteI2C (UB953A_alias,0xB2, 0x33) #fixed color pattern, 8 color bars, block size of 5 board.WriteI2C (UB953A_alias,0xB1, 0x03) board.WriteI2C (UB953A_alias,0xB2, 0x1e) #CSI Data Identifier (0x24 = RGB888, 0x2C = RAW12, 0x2B = RAW10) board.WriteI2C (UB953A_alias,0xB1, 0x04) board.WriteI2C (UB953A_alias,0xB2, 0x0f) #line size (15:8) board.WriteI2C (UB953A_alias,0xB1, 0x05) board.WriteI2C (UB953A_alias,0xB2, 0x00) #line size (7:0) board.WriteI2C (UB953A_alias,0xB1, 0x06) board.WriteI2C (UB953A_alias,0xB2, 0x01) #bar size (15:8) board.WriteI2C (UB953A_alias,0xB1, 0x07) board.WriteI2C (UB953A_alias,0xB2, 0xe0) #bar size (7:0) board.WriteI2C (UB953A_alias,0xB1, 0x08) board.WriteI2C (UB953A_alias,0xB2, 0x04) #active lines per frame (15:8) board.WriteI2C (UB953A_alias,0xB1, 0x09) board.WriteI2C (UB953A_alias,0xB2, 0x38) #active lines per frame (7:0) board.WriteI2C (UB953A_alias,0xB1, 0x0a) board.WriteI2C (UB953A_alias,0xB2, 0x04) #total lines per frame (15:8) board.WriteI2C (UB953A_alias,0xB1, 0x0b) board.WriteI2C (UB953A_alias,0xB2, 0x65) #total lines per frame (7:0) board.WriteI2C (UB953A_alias,0xB1, 0x0c) board.WriteI2C (UB953A_alias,0xB2, 0x0b) #line period (15:8) board.WriteI2C (UB953A_alias,0xB1, 0x0d) board.WriteI2C (UB953A_alias,0xB2, 0x93) #line period (7:0) board.WriteI2C (UB953A_alias,0xB1, 0x0e) board.WriteI2C (UB953A_alias,0xB2, 0x21) #vertical back porch board.WriteI2C (UB953A_alias,0xB1, 0x0f) board.WriteI2C (UB953A_alias,0xB2, 0x0a) #vertical front porch # board.WriteI2C (UB953A_alias,0xB1, 0x10) board.WriteI2C (UB953A_alias,0xB2, 0x00) #1st byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x11) board.WriteI2C (UB953A_alias,0xB2, 0x00) #2nd byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x12) board.WriteI2C (UB953A_alias,0xB2, 0xFf) #3rd byte of fixed color """ board.WriteI2C (UB953A_alias,0xB1, 0x13) board.WriteI2C (UB953A_alias,0xB2, 0x7f) #4th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x14) board.WriteI2C (UB953A_alias,0xB2, 0x55) #5th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x15) board.WriteI2C (UB953A_alias,0xB2, 0xcc) #6th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x16) board.WriteI2C (UB953A_alias,0xB2, 0x0f) #7th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x17) board.WriteI2C (UB953A_alias,0xB2, 0x80) #8th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x18) board.WriteI2C (UB953A_alias,0xB2, 0x00) #9th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x19) board.WriteI2C (UB953A_alias,0xB2, 0x00) #10th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x1A) board.WriteI2C (UB953A_alias,0xB2, 0x00) #11th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x1B) board.WriteI2C (UB953A_alias,0xB1, 0x00) #12th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x1C) board.WriteI2C (UB953A_alias,0xB2, 0x00) #13th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x1D) board.WriteI2C (UB953A_alias,0xB2, 0x00) #14th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x1E) board.WriteI2C (UB953A_alias,0xB2, 0x00) #15th byte of fixed color board.WriteI2C (UB953A_alias,0xB1, 0x1F) board.WriteI2C (UB953A_alias,0xB2, 0x00) #16th byte of fixed color """ ###################################################################################################### # read sensor ID ###################################################################################################### ######################################################################################################### board.WriteI2C(UB954,0x33,0x00) # disable CSI port , before issuing a command board.WriteI2C(UB954,0x4c,0x01) board.WriteI2C(UB954,0x72,0xe4) # vc-id re-map board.WriteI2C(UB954,0x4c,0x12) board.WriteI2C(UB954,0x72,0xe1) # vc - id re map board.WriteI2C(UB954,0x33,0x03) # ENABLE CSI port , continous clock disabled. print " ENABLE CSI pass through and contious clock and periodic calibration " print " Forward RX1 to CSI 0 " board.WriteI2C(UB954,0x21,0x3c) # line concat board.WriteI2C(UB954,0x20,0x10) #CSI FORWARDING enable for port 1 AND PORT 0 : 0x10 > port 1 , 0x20 port 0 , 0x00 both ports # hit the clock board.WriteI2C(UB954, 0x1F, 0x02) # 800 again print " hit the clock " board.WriteI2C(UB954, 0x1F, 0x03) # Set PLL Clock divider to 32 #board.Ind_Acc_Write(7, 0xA, 0x80) board.WriteI2C(UB954, 0xB0, (0x7 << 2)) board.WriteI2C(UB954, 0xB1, 0xA) board.WriteI2C(UB954, 0xB2, 0x80) # Set PLL CP current #board.Ind_Acc_Write(0x7, 0x7, 0xE2) board.WriteI2C(UB954, 0xB0, (0x7 << 2)) board.WriteI2C(UB954, 0xB1, 0x7) board.WriteI2C(UB954, 0xB2, 0xE2) # Set CSI Timing parameters #board.Ind_Acc_Write(0x0, 0x40, [0x83, 0x8D, 0x87, 0x87, 0x83, 0x86, 0x84, 0x86, 0x84]]) board.WriteI2C(UB954, 0xB0, 0x2) # set auto-increment, page 0 board.WriteI2C(UB954, 0xB1, 0x40) # CSI Port 0 board.WriteI2C(UB954, 0xB2, 0x83) # TCK Prep board.WriteI2C(UB954, 0xB2, 0x8D) # TCK Zero board.WriteI2C(UB954, 0xB2, 0x87) # TCK Trail board.WriteI2C(UB954, 0xB2, 0x87) # TCK Post board.WriteI2C(UB954, 0xB2, 0x83) # THS Prep board.WriteI2C(UB954, 0xB2, 0x86) # THS Zero board.WriteI2C(UB954, 0xB2, 0x84) # THS Trail board.WriteI2C(UB954, 0xB2, 0x86) # THS Exit board.WriteI2C(UB954, 0xB2, 0x84) # TLPX # Set CSI Timing parameters #board.Ind_Acc_Write(0x0, 0x60, [0x83, 0x8D, 0x87, 0x87, 0x83, 0x86, 0x84, 0x86, 0x84]]) board.WriteI2C(UB954, 0xB0, 0x2) # set auto-increment, page 0 board.WriteI2C(UB954, 0xB1, 0x60) # CSI Port 1 board.WriteI2C(UB954, 0xB2, 0x83) # TCK Prep board.WriteI2C(UB954, 0xB2, 0x8D) # TCK Zero board.WriteI2C(UB954, 0xB2, 0x87) # TCK Trail board.WriteI2C(UB954, 0xB2, 0x87) # TCK Post board.WriteI2C(UB954, 0xB2, 0x83) # THS Prep board.WriteI2C(UB954, 0xB2, 0x86) # THS Zero board.WriteI2C(UB954, 0xB2, 0x84) # THS Trail board.WriteI2C(UB954, 0xB2, 0x86) # THS Exit board.WriteI2C(UB954, 0xB2, 0x84) # TLPX