This thread has been locked.

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

DS90UB960-Q1: 960 registers sample code.

Part Number: DS90UB960-Q1

Hello, Ti engineers,


We are using Ti ds90ub960 chip to collect 4-channel camera image data, as shown in the figure below:


As a module, sensor + 953 can normally output uyvy 1920 * 1080 30fps image data,
How to configure 960 registers to capture images? I hope Ti can provide a 960 sample code.

  • Hi,

    Where are issues in your setup coming from?  If you have set your strap values correctly and are able to communicate with the 953s you should be able to forward the video data accordingly in the FRD_CTRL registers.

    Regards,

    Nick

  • Hi,
         At present, only the input source (sensor + 953) is known, and the data input to 960 is uyvy 1920 * 1080 30fps. We need to initialize the register of 960.
    However, since we debugged 960 for the first time, we don't know which basic registers need to be initialized to get image data?

  • Hi,

    It should be relatively simple, if you can verify that the serializers can communicate with the 960 you should just need to enable CSI forwarding in 0x20 and then configure the CSI port in register 0x33.

    So set register 0x32 to select which CSI port to turn on then enable it in register 0x33.  Also set register 0x20 to enable forwarding of all 4 ports. 

    Regards,

    Nick

  • Hi,

    At first, thinks you for your timely reply.

    1. Now I can read the following registers of 960 through I2C:
    0x5b = 0x24: indicates that a connection has been established with the serializer, and reads that the ID of 953 is 0x24
    0x4d = 0x83: indicates that bit [0] = 1, receiver is locked to incoming data
    0x73,0x74 = 0x438 = 1080: indicates that 1080 rows of data are received in a frame
    0x75,0x76 = 0xf00 = 3840 = 1920 * 2: indicates that 3840 bytes are received in a row.
    Because the transmission format is uyvy (yuv_8bit), one pixel occupies 2 bytes, so there are 1920 pixels in a row
    The RX of 960 can be determined according to the value of the above registers.The RX_2 of 960 has received 1920 * 1080 YUV data.
    I wonder if there is a corresponding register that can read the frame rate?
    log:
    # ccidbgr /dev/cci1 0x30 write 0x4c 0x24
    0x4c <- 0x24
    # ccidbgr /dev/cci1 0x30 read 0x4c
    0x4c -> 0x24
    # ccidbgr /dev/cci1 0x30 read 0x5b // Remote Serializer ID
    0x5b -> 0x32
    # ccidbgr /dev/cci1 0x30 read 0xdb
    0xdb -> 0x68
    # ccidbgr /dev/cci1 0x30 read 0x4d // Receiver is locked to incoming data
    0x4d -> 0x83
    # ccidbgr /dev/cci1 0x30 read 0xd9
    0xd9 -> 0x00
    # ccidbgr /dev/cci1 0x30 read 0x73
    0x73 -> 0x04
    # ccidbgr /dev/cci1 0x30 read 0x74 // LINE_COUNT = 0x438 = 1080
    0x74 -> 0x38
    # ccidbgr /dev/cci1 0x30 read 0x75
    0x75 -> 0x0f
    # ccidbgr /dev/cci1 0x30 read 0x76 // LINE_LEN = 0xf00 = 3840 = 1920*2 for UYVY
    0x76 -> 0x00
    #

    2. How to determine that 960 has sent data to Mipi TX port?
    I try to read the value of the following register.
    According to the read 0x35 = 0x1, can it indicate that 960 has indeed sent the data?
    # ccidbgr /dev/cci1 0x30 read 0x33 5
    0x33 -> 0x03
    0x34 -> 0x00
    0x35 -> 0x01 // [0] : TX Port Pass
    0x36 -> 0x00
    0x37 -> 0x00

    3.According to your reply above, I have set the following registers.But I can't get the image yet.

    What else need to be checked for 960?

    # ccidbgr /dev/cci1 0x30 read 0x33
    0x33 -> 0x03
    # ccidbgr /dev/cci1 0x30 read 0x20
    0x20 -> 0x00
    #

    Thinks.

  • Hi,

    Are you certain you are forwarding data to the correct CSI port you are using?  Make sure you select which port you are using in register 0x32 and set the forwarding to the correct port in 0x20.  You can share a dump of all the registers on 960 side if you are still having issues.

    Regards,

    Nick

  • Hi,

    I can now certain from CSI TX_Port0 output, and set 0x20 = 0x00, which is indeed forwarded from CSI Prt0.

    I want to know how to confirm that the CSI TX port of 960 has sent the data? Can I read some registers?

    dump reg:

    # sh read_reg.sh 
    0x00 -> 0x60
    0x01 -> 0x00
    0x02 -> 0x1e
    0x03 -> 0x40
    0x04 -> 0xd0
    0x05 -> 0x01
    0x06 -> 0x00
    0x07 -> 0xfe
    0x08 -> 0x1c
    0x09 -> 0x10
    0x0a -> 0x7a
    0x0b -> 0x7a
    0x0c -> 0x0f
    0x0d -> 0x09
    0x0e -> 0x18
    0x0f -> 0xff
    0x10 -> 0x00
    0x11 -> 0x00
    0x12 -> 0x00
    0x13 -> 0x00
    0x14 -> 0x00
    0x15 -> 0x00
    0x16 -> 0x00
    0x17 -> 0x00
    0x18 -> 0x00
    0x19 -> 0x00
    0x1a -> 0x00
    0x1b -> 0x00
    0x1c -> 0x00
    0x1d -> 0x00
    0x1e -> 0x04
    0x1f -> 0x05
    0x20 -> 0x00
    0x21 -> 0x03
    0x22 -> 0x00
    0x23 -> 0x8f
    0x24 -> 0x00
    0x25 -> 0x00
    0x26 -> 0x00
    0x27 -> 0x00
    0x28 -> 0x00
    0x29 -> 0x00
    0x2a -> 0x00
    0x2b -> 0x00
    0x2c -> 0x00
    0x2d -> 0x00
    0x2e -> 0x00
    0x2f -> 0x00
    0x30 -> 0x00
    0x31 -> 0x00
    0x32 -> 0x00
    0x33 -> 0x03
    0x34 -> 0x00
    0x35 -> 0x01
    0x36 -> 0x00
    0x37 -> 0x03
    0x38 -> 0x00
    0x39 -> 0x00
    0x3a -> 0x00
    0x3b -> 0x00
    0x3c -> 0x00
    0x3d -> 0x00
    0x3e -> 0x00
    0x3f -> 0x00
    0x40 -> 0x00
    0x41 -> 0xa9
    0x42 -> 0x71
    0x43 -> 0x01
    0x44 -> 0x00
    0x45 -> 0x00
    0x46 -> 0x20
    0x47 -> 0x00
    0x48 -> 0x00
    0x49 -> 0x00
    0x4a -> 0x00
    0x4b -> 0x12
    0x4c -> 0x00
    0x4d -> 0x03
    0x4e -> 0xcd
    0x4f -> 0x14
    0x50 -> 0x00
    0x51 -> 0x00
    0x52 -> 0x00
    0x53 -> 0x03
    0x54 -> 0x00
    0x55 -> 0x00
    0x56 -> 0x38
    0x57 -> 0x00
    0x58 -> 0x1a
    0x59 -> 0x00
    0x5a -> 0x00
    0x5b -> 0x32
    0x5c -> 0x00
    0x5d -> 0x00
    0x5e -> 0x00
    0x5f -> 0x00
    0x60 -> 0x00
    0x61 -> 0x00
    0x62 -> 0x00
    0x63 -> 0x00
    0x64 -> 0x00
    0x65 -> 0x00
    0x66 -> 0x00
    0x67 -> 0x00
    0x68 -> 0x00
    0x69 -> 0x00
    0x6a -> 0x00
    0x6b -> 0x00
    0x6c -> 0x00
    0x6d -> 0x78
    0x6e -> 0x88
    0x6f -> 0x88
    0x70 -> 0x2b
    0x71 -> 0x2c
    0x72 -> 0xe4
    0x73 -> 0x04
    0x74 -> 0x38
    0x75 -> 0x0f
    0x76 -> 0x00
    0x77 -> 0xc5
    0x78 -> 0x00
    0x79 -> 0x01
    0x7a -> 0x0f
    0x7b -> 0xff
    0x7c -> 0x20
    0x7d -> 0x00
    0x7e -> 0x00
    0x7f -> 0x00
    0x80 -> 0x00
    0x81 -> 0x00
    0x82 -> 0x00
    0x83 -> 0x00
    0x84 -> 0x00
    0x85 -> 0x00
    0x86 -> 0x00
    0x87 -> 0x00
    0x88 -> 0x00
    0x89 -> 0x00
    0x8a -> 0x00
    0x8b -> 0x00
    0x8c -> 0x00
    0x8d -> 0x00
    0x8e -> 0x00
    0x8f -> 0x00
    0x90 -> 0x36
    0x91 -> 0x73
    0x92 -> 0x36
    0x93 -> 0x73
    0x94 -> 0xff
    0x95 -> 0xff
    0x96 -> 0xff
    0x97 -> 0xff
    0x98 -> 0x00
    0x99 -> 0x00
    0x9a -> 0x00
    0x9b -> 0x00
    0x9c -> 0x00
    0x9d -> 0x00
    0x9e -> 0x00
    0x9f -> 0x00
    0xa0 -> 0x00
    0xa1 -> 0x00
    0xa2 -> 0x00
    0xa3 -> 0x00
    0xa4 -> 0x00
    0xa5 -> 0x1c
    0xa6 -> 0x00
    0xa7 -> 0x00
    0xa8 -> 0x00
    0xa9 -> 0x00
    0xaa -> 0x00
    0xab -> 0x00
    0xac -> 0x00
    0xad -> 0x00
    0xae -> 0x00
    0xaf -> 0x00
    0xb0 -> 0x1c
    0xb1 -> 0x3a
    0xb2 -> 0x15
    0xb3 -> 0x08
    0xb4 -> 0x25
    0xb5 -> 0x00
    0xb6 -> 0x18
    0xb7 -> 0x00
    0xb8 -> 0x88
    0xb9 -> 0x33
    0xba -> 0x83
    0xbb -> 0x74
    0xbc -> 0x80
    0xbd -> 0x00
    0xbe -> 0x00
    0xbf -> 0x00
    0xc0 -> 0x00
    0xc1 -> 0x00
    0xc2 -> 0x00
    0xc3 -> 0x00
    0xc4 -> 0x00
    0xc5 -> 0x00
    0xc6 -> 0x00
    0xc7 -> 0x00
    0xc8 -> 0x00
    0xc9 -> 0x00
    0xca -> 0x00
    0xcb -> 0x00
    0xcc -> 0x00
    0xcd -> 0x00
    0xce -> 0x00
    0xcf -> 0x00
    0xd0 -> 0x00
    0xd1 -> 0x43
    0xd2 -> 0x94
    0xd3 -> 0x3f
    0xd4 -> 0x60
    0xd5 -> 0xf2
    0xd6 -> 0x00
    0xd7 -> 0x02
    0xd8 -> 0x00
    0xd9 -> 0x00
    0xda -> 0x00
    0xdb -> 0x08
    0xdc -> 0x00
    0xdd -> 0x00
    0xde -> 0x00
    0xdf -> 0x00
    0xe0 -> 0x00
    0xe1 -> 0x00
    0xe2 -> 0x00
    0xe3 -> 0x00
    0xe4 -> 0x00
    0xe5 -> 0x00
    0xe6 -> 0x00
    0xe7 -> 0x00
    0xe8 -> 0x00
    0xe9 -> 0x00
    0xea -> 0x00
    0xeb -> 0x00
    0xec -> 0x00
    0xed -> 0x00
    0xee -> 0x00
    0xef -> 0x00
    0xf0 -> 0x5f
    0xf1 -> 0x55
    0xf2 -> 0x42
    0xf3 -> 0x39
    0xf4 -> 0x36
    0xf5 -> 0x30
    0xf6 -> 0x00
    0xf7 -> 0x00
    0xf8 -> 0x00
    0xf9 -> 0x00
    0xfa -> 0x00
    0xfb -> 0x00
    0xfc -> 0x00
    0xfd -> 0x00
    0xfe -> 0x00
    0xff -> 0x00
    # 

  • Hello,

    I don't think there is a register that states the data has been transmitted but you can look at 0x4E[4] to see if there is a buffer error with the assumption that if the buffer isn't overflowing then it must be being emptied.

    Regards,

    Nick