1,拓扑图
2.sensor 输出图像:
格式:1080P 25fps 27MHz GRBG 12bit
输出:接口MIPI CSI-2 lanes: 2lanes
MIPI CSI-2 Clock Lane Configuration:Continuous Clock
3,图像数据总体传输设计
sensor/953/954控制通道:在A12上通过I2c 发送命令配置
图像传输:ar0233 的数据(1080P 25fps 27MHz GRBG 12bit ) 通过MIPI CS口传输给DS90UB953,然后DS90UB953通过同轴电缆传输给DS90UB954,然后DS90UB954通过MIPI CSI-2接口传输给A12.
4.配置
DS90UB954与A12之间统一配置,即954输出数据的格式配置与A12上接收数据接口配置的格式必须一致;
DS90UB953 与 DS90UB954模式必须一致 ;
AR0233 与 DS90UB953 传输必须都设置为MIPI CSI-2 2lanes 接口
1) 在A12上配置 MIPI CSI-2的数据格式:
CSI-2接口格式:
由于硬件设计为2lanes,所以,A12上接收数据的CSI-2接口必须为2lanes
2)在954上配置, 如下 i2cw 0x74 0x6d 0x7C, 0x74是954的i2c设备地址, 0x6d是954的地址为0x6d的寄存器, 7C是设置寄存器的值
i2cw 0x74 0x6d 0x7C // CSI MODE,
这个设置非常重要,决定953与954之间的传输mode,954与953的mode可以通过硬件PIN来配置,也可以通过设置该寄存器配置。
如果953与954的mode配置不一致, 不然无法通信。我们采用CSI-2模式
i2cw 0x74 0x4C 0x01 // select port 0,依赖与硬件设计
i2cw 0x74 0x0C 0x01 // enable port0
i2cw 0x74 0x58 0x5E //i2c PASS-THROUGH 该寄存器直接导致I2c是否能通过954透传给953或者sensor
i2cw 0x74 0x5C 0x30 //953 i2c addr
i2cw 0x74 0x5D 0x20 // sensor AR0233 i2c addr
i2cw 0x74 0x65 0x20 // sensor i2c addr
i2cw 0x74 0x20 0x20 //FWD_CTL1 很重要,Forwarding enabled for RX Port 0
i2cw 0x74 0x33 0x23 //2 lanes
3)953 配置
//GPIO3 这个管脚是控制sensor的 reset管脚
i2cw 0x30 0x0E 0xF0 //enable gpio3 out
i2cw 0x30 0x0D 0x00 //gpio3 out LOW
//CLK_OUT 27MHZ 这个clock是953给ar0233 sensor的clock,由于硬件设计的953的输入时钟是48MHZ,所以是f1
CLK_OUT = 48MHZ *80 *1/(16*9)=26.6MHZ
i2cw 0x30 0x06 0x81 //HS 16 M=1
i2cw 0x30 0x07 0x9 //N=9
i2cw 0x30 0x03 0x5a //很重要,异步模式CSI-2 Non-synchronous external clock Mode
i2cw 0x30 0x02 0x53 //continues clock ,2 lane
i2cw 0x30 0x0D 0x08 // gpio3 HIGH ar0233 sensor 使能
4)ar0233 sensor 配置 1080P 25fps 27MHz GRBG 12bit
REG= 0x302A, 0x0006 // VT_PIX_CLK_DIV
REG= 0x302C, 0x0702 // VT_SYS_CLK_DIV
REG= 0x302E, 0x0003 // PRE_PLL_CLK_DIV
REG= 0x3030, 0x0063 // PLL_MULTIPLIER
REG= 0x3036, 0x0006 // OP_WORD_CLK_DIV
REG= 0x3038, 0x0002 // OP_SYS_CLK_DIV
REG= 0x31DC, 0x1FA0 // PLL_CONTROL
REG= 0x30B0, 0x8800 // DIGITAL_TEST
REG= 0x30B0, 0x8800 // DIGITAL_TEST
REG= 0x31B0, 0x006B // FRAME_PREAMBLE
REG= 0x31B2, 0x004A // LINE_PREAMBLE
REG= 0x31B4, 0x51C7 // MIPI_TIMING_0
REG= 0x31B6, 0x3247 // MIPI_TIMING_1
REG= 0x31B8, 0x60C9 // MIPI_TIMING_2
REG= 0x31BA, 0x028A // MIPI_TIMING_3
REG= 0x31BC, 0x0B88 // MIPI_TIMING_4
REG= 0x3342, 0x122C // MIPI_F1_PDT_EDT
REG= 0x3344, 0x0011 // MIPI_F1_VDT_VC
REG= 0x3346, 0x122C // MIPI_F2_PDT_EDT
REG= 0x3348, 0x0011 // MIPI_F2_VDT_VC
REG= 0x334A, 0x122C // MIPI_F3_PDT_EDT
REG= 0x334C, 0x0011 // MIPI_F3_VDT_VC
REG= 0x334E, 0x122C // MIPI_F4_PDT_EDT
REG= 0x3350, 0x0011 // MIPI_F4_VDT_VC
REG= 0x336E, 0x0147 // DATAPATH_SELECT2
REG= 0x3004, 0x004A // X_ADDR_START_
REG= 0x3008, 0x07C9 // X_ADDR_END_
REG= 0x3002, 0x0068 // Y_ADDR_START_
REG= 0x3006, 0x049F // Y_ADDR_END_
REG= 0x30A2, 0x0001 // X_ODD_INC_
REG= 0x30A6, 0x0001 // Y_ODD_INC_
REG= 0x3402, 0x0780 // X_OUTPUT_CONTROL
REG= 0x3404, 0x0438 // Y_OUTPUT_CONTROL
REG= 0x3040, 0x0005 // READ_MODE
REG= 0x3040, 0x0005 // READ_MODE
REG= 0x3040, 0x0005 // READ_MODE
REG= 0x3040, 0x0005 // READ_MODE
REG= 0x3044, 0x0400 // DARK_CONTROL
REG= 0x3044, 0x0400 // DARK_CONTROL
REG= 0x3044, 0x0400 // DARK_CONTROL
REG= 0x3044, 0x0400 // DARK_CONTROL
REG= 0x3082, 0x0008 // OPERATION_MODE_CTRL
REG= 0x3082, 0x0008 // OPERATION_MODE_CTRL
REG= 0x3082, 0x0008 // OPERATION_MODE_CTRL
REG= 0x3082, 0x0008 // OPERATION_MODE_CTRL
REG= 0x3082, 0x0008 // OPERATION_MODE_CTRL
REG= 0x30BA, 0x1122 // DIGITAL_CTRL
REG= 0x33E0, 0x0F80 // TEST_ASIL_ROWS
REG= 0x3180, 0x1001 // DELTA_DK_CONTROL
REG= 0x31D0, 0x0001 // COMPANDING
REG= 0x31AE, 0x0202 // SERIAL_FORMAT
REG= 0x31AC, 0x140C // DATA_FORMAT_BITS
REG= 0x300A, 0x06B2 // FRAME_LENGTH_LINES_
REG= 0x300C, 0x06C4 // LINE_LENGTH_PCK_
REG= 0x3012, 0x0164 // COARSE_INTEGRATION_TIME_
REG= 0x3212, 0x002C // COARSE_INTEGRATION_TIME2
REG= 0x3216, 0x0002 // COARSE_INTEGRATION_TIME3
REG= 0x321A, 0x0001 // COARSE_INTEGRATION_TIME4
REG= 0x3238, 0x0443 // EXPOSURE_RATIO
REG= 0x32EC, 0x72A0 // SHUT_CTRL2
REG= 0x31C6, 0x0000 // HISPI_CONTROL
REG= 0x301A, 0x001C // RESET_REGISTER
REG= 0x301A, 0x001C // RESET_REGISTER
REG= 0x301A, 0x001C // RESET_REGISTER
REG= 0x301A, 0x001C // RESET_REGISTER