使用max96712 解串器对应其寄存器配置的一些说明:
一:第一部分配置说明
{0x0017,0x14,max96712_delay1}, link节点唤醒使能和关闭 0xf4
{0x0019,0x94,max96712_delay1},
{0x06c2,0x10,max96712_delay1}, 手册上标注必须0x10
**********测试发现,以下几个不一定需要,主要是做性能优化的***************
{0x14D1,0x03,max96712_delay1}, 必须0x03
{0x15D1,0x03,max96712_delay1},
{0x16D1,0x03,max96712_delay1},
{0x17D1,0x03,max96712_delay1},
{0x1445,0x00,max96712_delay1},必须0x00,关掉sSC默认接收功能
{0x1545,0x00,max96712_delay1},
{0x1645,0x00,max96712_delay1},
{0x1745,0x00,max96712_delay1},
{0x1449,0x75,max96712_delay1}, 必须0x75,
设置芯片内部error channel 配置, 配置为默认常开,优化链路接收性能
{0x1549,0x75,max96712_delay1},
{0x1649,0x75,max96712_delay1},
{0x1749,0x75,max96712_delay1},
*******************************************************************
{0x0010,0x11,max96712_delay1}, 速率配置需要根据摄像头支持的速率做配置,
10-11寄存器代表的是PHYb,a, PHYd,C发送和接收数据的速率
{0x0011,0x11,max96712_delay1}, 3gpbs
{0x0006,0xFF,max96712_delay1}, gmsl2 + 1ink/gmsl1 +link
{0x0018,0x0F,max96712_delay1}, 0x0f
因为使用的是高通qnx ais camare框架,根据其驱动的流程,第一部分的初始化寄存器配置在0x18地址过,并且在max96712_sensor_detect_device_channels接口中调用
二:第三部分
在max96712_sensor_init_setting -> max96712_set_init_sequence接口内的initlink时候调用。主要是配置max96712解串器针对不同的串行器做的适配工作
{0x0003,0xFE,max96712_delay1}, //0x4通道应该要0x0???//这个有疑问
{0x00F0,0x62,max96712_delay1}, //FO/F1/F2/F3寄存器配置的是mipicsi物理上
//enable pipe 0 for link A stream 2 pipe 1 for link B stream 2
//(因为696717只有一个pipez
//对应stream 2.pipe x 对应stream 0)
//phy怎么跟video pipe link之间做映射的。
//就是设置视频通道通过csi的哪个phy通道给出去的。
//max96712有8个vide0 pipe
//以及走的是哪个视频通道pline设置,
(0x00F1,0xEA,max96712_delay1},
{0x00F4,0x0F,max96712_delay1}, //使能前4个video pipe
//MIPI PHY Setting 以下是针对mipi端的配置
// Set Des in 2x4 mode
{0x08A0,0x04,max96712_delay1}, //配置通信的1ane模式,
//phy0/1/2/3之问组合成的模式,
//bit7 关闭mipi正常模式
// Set Lane Mapping for 4-lane port A
{0x08A3,0xE4,max96712_delay1},
{0x08A4,0xE4,max96712_delay1},
// Set4 lane、D-PHY、2bit VC
{0x090A,0xC0,max96712_delay1},
{0x094A,0xC0,max96712_delay1},
//0x04,0x52,0x09,0x8A,0xC0,
//0x04,0x52,0x09,0xCA,0xC0
// Turn on MIPI PHYs
{0x08A2,0x34,max96712_delay1},
//Hold DPLL in reset (config soft rst n = O) before changing the rate
{0x1c00,0xF4,max96712_delay1},
{0x1D00,0xF4,max96712_delay1},
//0x04,0x52,0x1E,0x00,0xF4
//0x04,0x52,0x1F,0x00,0xF4,
// Set Data rate to be 16ooMbps/lane for port A and enable software override
{0x0415,0x30,max96712_delay1},
{0x0418,0x30,max96712_delay1},
//0x04,0x52,0z04,0x1B,0x26,
//0x04,0x52,0x04,0x1E,0x26,
// Release reset to DPLL (config soft rst n -1)
{0x1c00,0xF5,max96712_delay1},
{0x1D00,0xF5,max96712_delay1},
//0x04,0x52,0x1E,0x00,0xF5
// Release reset to DPLL (config soft rst n = 1)
{0x1c00,0xF5,max96712_delay1},
{0x1D00,0xF5,max96712_delay1},
//0x04,0x52,0x1E,0x00,0xF5,
//0x04,0x52,0x1F,0x00,0xF5,
{0x08A0,0x04,max96712_delay1}, //设置mipi模式和时钟使能lane模式配置
{0x08A3,0xE4,max96712_delay1}, //映射数据D0 D1默认4E
{0x08A4,0xE4,max96712_delay1}, //映射数据D0 D1默认E4
{0x090A,0xC0,max96712_delay1}, //这里为啥是c0. 4lane,dphy模式?
{0x094A,0xC0,max96712_delay1},\
//{0x098A,0xC0,max96712 de1ay1_},\
//{0x09cA,0xC0, max96712 delay1_},\ //这里为啥是c0.4lane,dphy模式?
{0x08A2,0xF0,max96712_delay1}, //使能mipi phys 怎么看到的使能mipi phyl phy
//以下配置max96712和串行器之间通信链路和数据格式
//mipi的pipe 0配置
{0x090B,0x07,max96712_delay1}, //map映射,前3个*,这个的配置,决定了
//是否需要90d及之后的寄存器配置
{0x092D,0x15,max96712_delay1}, //使能90B映射的配置3个*
//以下几个寄存器的配置说明都是一致的。不清楚为啥这么配置
{0x090D,0x1E,max96712_delay1}, //配置porta 端口通信的数据格式datatype
{0x090E,0x1E,max96712_delay1}, //配置porta 端口通信的数据格式
{0x090F,0x00,max96712_delay1}, //vc(虚拟通道)和dt(data type:yuv422(1E)
//raw10(2B)等)映射配置
/* datatype
0X1O: GENERIC8
0X11: GENERIC8
0x12: EMBEDDED
0x1E: YUV422 8-bit
0x1F: YUV422 10-bit
0x22: RGB565
0x23: RGB666
0x24: RGB888
0x2A: RAW8
0x2B: RAW10
0x2C: RAW12
0x2D: RAW14
0x2E: RAW16
0x2F: RAW20
0x30:YUV422 12-bit
0x31:UDP8
0x32:UDP8
0x33:UDP8
0x34:UDP8
0x35:UDP8
0x36:UDP8
0x37:UDP8
*/
{0x0910,0x00,max96712_delay1},
{0x0911,0x01,max96712_delay1},
{0x0912,0x01,max96712_delay1},
//mipi的pipe 1配置
{0x094B,0x07,max96712_delay1},
{0x096D,0x15,max96712_delay1},
{0x094D,0x1E,max96712_delay1}, //配置portb 端口通信的数据格式
{0x094E,0x5E,max96712_delay1},//配置portb 端口通信的数据格式
{0x094F,0x00,max96712_delay1},
{0x0950,0x40,max96712_delay1},
{0x0951,0x01,max96712_delay1},
{0x0952,0x41,max96712_delay1},
//mipi的pipe 2配置
{0x098B,0x07,max96712_delay1},
{0x09AD,0x15,max96712_delay1},
{0x098D,0x1E,max96712_delay1},
{0x098E,0x9E,max96712_delay1},
{0x098F,0x00,max96712_delay1},
{0x0990,0x80,max96712_delay1},
{0x0991,0x01,max96712_delay1},
{0x0992,0x81,max96712_delay1},
//mipi的pipe 3配置
{0x09CB,0x07,max96712_delay1},
{0x09ED,0x15,max96712_delay1},
{0x09CD,0x1E,max96712_delay1},
{0x09CE,0xDE,max96712_delay1},
{0x09CF,0x00,max96712_delay1},
{0x09D0,0xc0,max96712_delay1},
{0x09D1,0x01,max96712_delay1},
{0x09D2,0xC1,max96712_delay1},
因为4路摄像头都是同一种串行器和同一种sensor,因此其datatype都是0x1E
//默认f4
{0x1c00,0xF4,max96712_delay1},
//默认f4,默认不复位pll寄存器 //F5复位p11寄存器,但不复位config 配置寄存器
{0x1D00,0xF4,max96712_delay1},
{0x1E00,0xF4,max96712_delay1}, //默认f4
{0x1F00,0xF4,max96712_delay1}, //默认f4
{0x0415,0x34,max96712_delay1}, //疑问?★,配置通信速率,
//前后需要设置1c00等寄存器,复位dpll
{0x0418,0x34,max96712_delay1}, //疑问?
{0x1c00,0xF5,max96712_delay1}, //为啥又设置为f5, 使设置生效
//释放复位dpll,生效pll输出速率
{0x1D00,0xF5,max96712_delay1},
{0x1E00,0xF5,max96712_delay1},
{0x1F00,0xF5,max96712_delay1},
三:第二部分
是针对max96717串行器初始化配置,在max96712_sensor_init_setting
->max96712_set_init_sequence ->initlink接口中调用
{0x0002,0x03,max96712_delay1},设置bit6 video发送使能
{0x0330,0x08,max96712_delay1},开启mipi的连续时钟。使能虚拟通道,
是否复位rx
{0x0318,0x6B,max96712_delay1},bit6 是使能,5:0是data type,6B配置的就是2B(RaW10),对应解串器的90D,90E等的配置,因为上述对应的是0x1E,因此这里需要更改.
{0x0570,0x00,max96712_delay1},
提高时钟幅度
{0x03F1,0x89,max96712_delay1}
{0x03F0,0x10,max96712_delay1},
{0x0331,0x11,max96712_delay1},选择data1ane数量
{0x0330,0x00,max96712_delay1},
{0x02BE,0x00,max96712_delay1},
{0x02BE,0x10,max96712_delay1},配置gpio的引1脚驱动能力?
{0x02d6.0x10,max96712_delay1}
{0x0010,0x21,max96712_delay1}
{0x0000,0x82,max96712_delay1}
四:第四部分
就是start_link 开启max96717输出的配置,0x02 = 0x43
{0x0002,0x43,max96712_delay1}
以及开启max96712输出图像:0x8a0=0x84
{0x08a0,0x84,max96712_delay1}
五:第五部分
stop_link配置停止max96717输出0x02 = 0x03
{0x0002,0x03,max96712_delay1}
以及停止max96712输出图像:0x8a0=0x04
{0x08a0,0x04,max96712_delay1}
六:检验
上述寄存器是配置工作的。当芯片工作后,如何知道配置是否正常出图,可以读取以下寄存器熟知判断
确认max96712 0x8a0地址是否开启,如果是0x84就是开启,0x8d0是否每次读取都不一样
(如果不一样代表mipi有在增长输出),
读取解串器地址0x1dc,0x1fc,0x21c,0x23c等是否等于0x81(意味video link lock已经有输出)
读取解串器地址0x06,确认是否按硬件通信方式配置gms12/gmsl1
读取解串器地址0x10/0x11 确认配置速率(3gbps/6gbps)和连接方式(4lane/2x2lane)
gms12模式 通过0x1a 0x0a 0x0b 0x0c 检测96712是否1ink成功,如果link成功,
各值为:0xda,0xc8,0xc8,0xc8
0x40a:检测pipe0/1/2/3是否数据溢出