您的位置:首页 > 移动开发 > Android开发

Android车载camera的调试-Bring up(1)

2017-03-19 11:02 2987 查看
来到新公司,各种不适应。跟老大和hr沟通后,最终决定留下。里边各中原因就不说了,留下后就得开始干活啦:拿到的第一个case是车载环视camera的点亮,算是入门后的第一个小考验吧:

我们认识实物的一个过程通常是从现象到本质,那第一个问题来了:

什么是车载环视camera?各位看官们参考下图:



简单来说:车载环视体统需要4颗camera分别安装在汽车的前后左右采集图像,再将采集的图像传输到系统主机,主机通过算法对4路图像进行同步、合成、拼接等,最终将处理好的图像送到汽车中控的液晶上。让驾驶者可以在行进或者倒车过程中无盲区的观察周围情况,避免事故发生。

要求完成时间:

老大给2周。作为一个老兵,我给自己的时间是一周以内,不过最终3天搞定。

目标:

1.Bringup ti96x+isx016

2.ti96x+isx016 four channel ok

3.实现isx016寄存器读写,eeprom地址读写

手头上资源:

硬件:

高通820a EVB板

820a 板载ti96x解串芯片x2

(ti913Q串口编码芯片+ov10635)x1

(ti913A串口编码芯片+isx016)x4

软件:

针对820a android 平车载项目台源码

ti96x_ov10635(1 channel)据说ok的源码

QCarCam Linux用户区应用源码

参考文档(除TI文档其他的只能通过各自关系看看啦,都有版权:():

s820am_peripheral_module_reference_schematic.pdf

multimedia_driver_development_and_bringup_guide_-_camera.pdf

ISX016_ApplicationNote_ver1.5_E.pdf

ISX016_RegisterMap_V2.2.xlsx

OV10635-OV10135-Product-Specification-aCSP_Version-2-4_thundersoft.pdf

ds90ub964-q1.pdf

ds90ub913a-q1.pdf

TI_i2c_over_DS90UB913-4_FPD_Link_III_with_bidirectional_ctrl_channel.pdf

概念说明:

1.ti96x、ti913是TI开发的一套配套使用的,用于长距离视频数据传输的芯片。有过camera调试经验的都知道不管是dvp接口还是mipi接口。传输距离只限于板载的距离,并且还不能太长,否则受到干扰。该套片就是为车载设计的,使用该套片在汽车内部布线传输视频是没有问题的。

2.ti96x类似于hub,支持同时4 channel camera video input。

3.ti913和camera是封装在一起的,具体之后说明。

4.ov10635,ixs016分别是OV 和Sony公司为车载设计的Camera sensor。

原理说明:

框图:



1.Bring up camera:

这个case和以往bring up camera不同,不同之处在于注册到host端的不是camera而是ti96x。这个是调试的一个关键点。所以调试步骤:

1.针对ti96x在*.dtsi中设置相应的pin config

2.将ti96x作为Camera设置到系统当中,包括:

sensor_lib_ptr{

sensor_slave_info、power_setting_array、sensor_output、…

}//注意slave address是ti96x的,而不是isx016的,上电时序也是针对ti96x的….

3.初始化ti96x相关寄存器,包括:

配置gpio口,设置串口速率,配置端口及相应RX、TX,设置Camera上电,设置传输模式,remote slave ID及别名slave ID….

4.通过ti96x对camera 进行上电,reset

5.通过别名slave address对各路camera进行寄存器初始化(isx016不需要,原因:有eeprom,上电reset后自动将eeprom初始化参数,load到camera寄存器中)

由于之前有base项目ov10635据说是ok的,试了一下不行。原因是我们打开camera的apk是不对的,而是要用一个叫QCarCam Linux用户区应用。之后踏踏实实照着ov10635的驱动改了一份儿ixs016的驱动。不亮!!!困惑的时候需要大胆的假设,和小心的论证!

假设:

1.既然ov10635可以亮说明,ti96x和host端的pin config,slave address,ti96x上电,reset没问题

2.问题可能出在ixs016输出和isp的匹配,或者是isx016上电、reset。

3.问题可能出在ti96x与isx016的匹配。

论证:

1.不管

2.问题可能出在ixs016输出和isp的匹配,或者是isx016上电、reset。

isx016输出和isp输出匹配,通过同事得到了:



和程序里边setting对了一下,完全匹配。ov10635也是这个配置。

对于ixs016的上电reset一直比较困惑,因为我们这边没有模组那边具体的原理图。最终在网上找了一张图,仅供参考:



camera和ti913是通过对12v进行电压转换进行供电的,查了下手册,isx016三路是可以同时供电的。所以包括供电 reset 怀疑是模组内部,或者ti96x完成的。

所以最终,焦点定格在ti96x的寄存器配置。

3.问题可能出在ti96x与isx016的匹配

ti96x涉及到的寄存器大概有30-40个,在TI网上有完整的手册和一些关键点说明手册。这里赞一下TI的document!不管从文档水平和开放程度都很好。

之后比照代码,仔细阅读的文档的相关寄存器说明。发现最终问题是出现在涉及到帧同步的一个寄存器。最终改了一笔,解决问题。

如果公司都以代码量来计算KPI的话,驱动绝对是特别吃亏的

Bring up ok了,之后有实现了一下四路视频流显示,和读写eeprom。这块儿就是工作量的事儿,就不说了。

另外各位看官可能还会有一下疑问:

Q1.针对具有相同i2c slave id 的camera&serializer,host端是如何实现通信的?

答案: 通过别名slave id,具体可参考TI_i2c_over_DS90UB913-4_FPD_Link_III_with_bidirectional_ctrl_channel.pdf,TI网站可以下到,说的很详细。

Q2.four channels camera video 如何传输并且合成一路?

这个内容比较多,我现在也就知道个大概,之后有时间仔细研究下,再撸一篇了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: