外设适配-TI954 记录
1. 外设适配-TI954 记录
1.1 问题描述
项目需要支持[email protected]摄像头输入,针对于这种分辨率的摄像头一般都采用FPD link方式传输,这里采用TI 953、954作为摄像头输入的媒介,整体path如下:
Camera(IMX290) -> ISP(5700) -> TI953 -> TI954 -> SOC
项目反馈的状态是:可以在TI954测量到标准mipi波形输出,但是SOC无图像显示;
1.2 检查思路
基本参照上图逐步check,这个过程中还是遇到了一些非预期的问题,导致排查过程不是那么的顺利
1.3 实验分析
1.3.1 SOC内部状态确认
-
检查log
[ 29.624154]<0>I[videoin][drv_if] [info]data_path_start(line:545)device_type(14)) is started successfully.
[ 29.624158]<0>I[videoin][drv_if] [info]mipi_kthread(line:876)enter
[ 29.624164]<0>I[videoin][drv_if] [info]mipi_kthread(line:880)mipi_kthread before wait
[ 29.627268]<0>I[videoin][v4l2_if] [info]videoin_start_streaming(line:668)leave, device_type(14), buffer num(1) state(3)
[ 29.629010]<0>I[videoin][v4l2_if] [info]videoin_set_fd_buffer_ext(line:1221)buf_fd is 67, buf_idx is 0, stream_id is 0
[ 29.630513]<2>I[zh_ti954_mipi1_yuv] [info]zh_ti954_mipi1_vendor_ch_signal_plug_detect(line:663)value=0xdf,signal_status = 1 0x6d:0x7f
[ 29.631434]<2>I[videoin][v4l2_if] [info]videoin_set_fd_buffer_ext(line:1240)device_type(14), out_width(1280), out_height(720), data_fmt(3), plane(3), y(0xfe800000), cb(0xfeb84000), cr(0xfec65000)
[ 29.631440]<2>Ivss_vis [info]vis_buffer_queue(line:1967)dp(1) ch_id(4) queue count(0)!这里vss控制器一直没有取到buffer数据,需要确认mipi是否有拿到数据抑或是解析异常
-
查看中断状态
则说明确实是mipi控制器没有给出来数据,则进一步确认mipi控制器中具体是没有接收到数据还是接收到数据后解析异常 -
dump寄存器
这里dump出来为控制寄存器,与demo平台完全一致,所以这里其实没有看出什么内容,但是这里也没有进一步确认的方法;
则这里其实留下了一个坑:
- 无法确认当前SOC内部是否有接收到数据还是数据解析错误;
- 后续check其他部分时,如果实验有遗漏或者异常,结合此部分则会得出错误的结论;
1.3.2 检查硬件
-
检查原理图
这里主要检查data、clk、电源是否与参考设计保持一致,确认无异常;
这里对比所有pin基本正常连接到954,只是存在一组电感,这个专门跟HW确认差分信号是可以添加共模电感的; -
检查PCB走线
担心是否存在layout时走线与原理图不一致,特别找到此板子的PCB,检查一遍走线,确认线序以及对应mipi模块无异常
至此,HW第一轮检查完成,由于检查原理图和PCB均无异常,则初步认为该板子硬件设计没有问题:
- 接下来测量mipi波形确认是否符合标准;
- 由于这里没有实际测量板子的电压值是否与设计一致,导致后续思考方向完全偏离;
1.3.3 波形确认
上述实验做完后,得到的结论是:
- 硬件基本无问题;
- SOC内部信号没有解析出来;
所以接下来主要怀疑SOC与TI954之间mipi信号时序不匹配问题,这里由于前边埋下的雷,以及一些其他的环境问题导致这里block了3天;
1.3.3.1 mipi标准
这里需要满足的条件是:
- data波形符合上述形状;
- 时序满足:TX-LP00 < RX-HS-SETTLE < TX-LP00 + TX-HS-ZERO
1.3.3.2 实际测量
1.3.3.2.1 第一轮测试,波形不符合上述标准
整体看下来是多帧数据,需放大来看:
再放大:
与上述标准的波形相差比较多,则这里测量形状一直不对,此部分由于影响因子比较多,所以逐步做了如下排查:
- 默认设置为TI954出pattern测试,怀疑这里是否为此部分配置出现异常,配置为摄像头输入测试;
- Linux系统当前版本仅支持AVM功能测试,怀疑这里是否有其他干扰项,打通RVC功能测试;
- 由于Linux系统仍在开发阶段,避免软件配置异常,基于Android版本移植954测试;
- 可能为HW干扰,重新焊接测量点确认;
上述几个实验耗费了3天时间,主要是移植以及打通path过程耗费时间较多,最终请客户多带了两块板子测试确认为HW问题;
这里的经验教训:
- 调试外设需要至少提供2块到3块平台调试,避免可能存在的板子不一致性异常;
- 软件基于稳定版本测试,从初期排除其他干扰项,避免中间频繁切换版本耗时;
1.3.3.2.2 第二轮测试,时序不满足上述标准
data:
LP00为143ns,HS00为322ns,而SOC端的HS-SETTLE配置为110ns+8ul=150ns,基本处于临界值了,而TI datasheet中定义:
则这里没有符合datasheet标准:
- 调整SOC RX-HS-SETTLE端满足其时序要求,仍无数据输出;
- 寻找TI FAE支持,回复为配置400M clk时,需要配置page0,0x40~0x48寄存器调整时序,调整后波形无变化;
- 怀疑共模电感问题,去除共模电感测量,时序有很大改善,SOC仍无数据解析出来;
回过头来看,这里遇到的坑蛮多:
- 手头的板子测量存在异常,波形形状一直不对
- 测量到时序与TI标准存在差异,且根据上述时序调整了RX端的时序,仍无法接收到数据,此时应该开始怀疑其他部分了;
至此理论上我这边所有检查都无异常,则说明:
- 上述检查过程有遗漏,导致问题没有被发现;
- 存在上述知识领域之外的内容,即数据进来SOC后存在其他异常,导致无法解析出来;
则需要进一步证实;
1.3.4 飞线交叉测试确认
1.3.4.1 项目平台mipi信号输出到其他平台测试
完全相同的配置,让954输出mipi信号,输入到此前其他项目的SOC中解析,可以正常出图;
说明954配置无异常:
- 954输出波形无问题;
- 可能存在硬件问题数据没有进SOC问题;
- 可能存在时序不匹配问题;
- 可能存在SOC内部解析异常问题;
1.3.4.2 项目平台mipi信号输出到demo平台测试
完全相同配置,让954输出mipi信号,输入到demo平台测试:
- CMS 系统上954 power_off return掉,则输出不关闭;
- 对应demo平台setup软件,直接使用裸机程序测试;
测试有信号输入到demo平台,但是无法解析出来;
基于上述两个实验,说明:
- 954配置无异常;
- SOC内部对信号解析存在问题(主要还是怀疑时序不匹配)
- 项目平台硬件问题
1.3.4.3 项目平台作为954子板,其他均使用EVB板来操作
为排除两种因素:
- I2C控制954与mipi IP enable部分时序;
- 飞线后板子移动导致数据受到影响;
请客户HW将CMS底板飞线到EVB板测试,好处在于EVB板支持各种排插(各组I2C连接/以及DS-5)
依次处理如下:
-
量取mipi波形,确认符合标准(开始飞线有问题,反复处理了几次)
-
根据mipi波形调整时序,并且将所有err bypass功能都打开,即所有数据直接往后端送;
经过调整时序以及err bypass功能后,[email protected]可以出图,存在噪点、偏色问题;
1.3.5 [email protected]出图
基于上述飞线平台 + 裸机系统,720P @ 30fps可以出图;
AVM盒子 -> 954 -> SOC -> panel
由于AVM盒子 -> 954飞线到其他SOC无问题,则主要怀疑是飞线、SOC配置、上屏等几个环节的问题
- 使用DS-5 dump内存查看
- 显示OK,则说明为上屏问题;
- 首先排查硬件,替换另外的输出口测试,可以正常显示,说明该LVDS0存在异常;
- 裸机程序不存在其他软件问题;
1.3.6 项目平台[email protected]出图
上述排查完成后,软件配置基本无问题,则继续调试本项目平台
- 移植到Android os中,仍无数据显示;
- 使用裸机系统在该平台上运行,仍无数据输入;
基于此,基本确认为硬件问题,回头来看之前的硬件排查过程,clk&data波形均无问题,则确认电压:
- 1.8V电压正常;
- 0.9V core电压没有!!!
检查核心板器件:
R334这里没接,添加后运行Android软件可以正常出图,至此此问题第一步解决完成;
1.3.7 项目平台[email protected]
由于此项目使用为[email protected]帧的摄像头,采用双绞线输入,所以这里替换为项目需求HW继续调试:
- 由于720P已经pass,说明HW部分已经调通;
- 后续需要调整:
- 954配置;
- 前端配置;
1.3.7.1 pattern输出
将954配置为双绞线输入,无图像出现,为排除前端影响,设置为pattern输出:
pattern同样无数据输出,954配置需要调整,检查setting查看,clk值得怀疑,将其设置为800M测试,可以正常显示;
至此,后端配置已经pass;
1.3.7.2 摄像头输出不完整图像
替换为摄像头,可以看到有数据进来(有光暗变化),但是显示看起来像是放大了几百倍的样子,请camera厂商调试焦距,可以输出:
左侧100个像素点左右可以正常看到数据,还是蛮清晰的,每一行的后续1800个左右像素点都是维持错误的状态,同时查看SOC端log提示,data crc校验错误,则与上述现象一致,数据包中存在数据异常;
怀疑点如下:
- sensor与TI953之前配置需要调整;
- TI953与TI954之间配置需要调整;
基于此做如下实验:
- 953出pattern在后端显示:
- 配置方式与954相同;
- 可以正常显示[email protected] ,但是从log看,帧率约30的样子;
- 可以说明953端的分辨率、格式等配置正确;
- sensor飞线出来到SOC确认:
- 飞线时将摄像头拆开导致镜头无法安装;
- 效果来看可以显示出轮廓;
- 结合上述1、2可以说明sensor端分辨率格式配置无问题;
则经过上述实验,说明sensor、953、954部分配置不匹配,由于sensor部分只需要配置格式输出即可,主要怀疑953与954之间匹配问题
1.7.3.3 TI953-TI954匹配调试
- 检查硬件配置是否一致:
这个是TI953的mode select寄存器,当前被配置为CSI-2 Synchronous mode,而对应TI954被配置为Non sync mode:
首先将其配置为相同的mode,同样是硬件设置:
这里设置完成后,现象仍是一样,而理论分析该现象比较像是数据传输过程中,只有一部分数据传输完成,即开始下一次传输的样子,而对端由于数据接收未完成,则自动补足最后一个像素点,基于此咨询过往有此经验的同学,可以调试line rate尝试:
此部分配置为50M也就是4Gbps测试,可以正常显示:
也就是说明当前的line rate可以满足720P的传输要求,而无法满足1080P的传输要求;
1.4 问题处理
- mipi core 电压,硬件贴上电阻;
- TI953 小板上mode sel配置为non sync mode(硬件配置);
- TI953 软件配置,设置clk rate;
1.5 总结
1.5.1 弯路总结
- SOC需要提供关键状态寄存器的dump功能,避免有遗漏项模糊不清;
- 硬件检查时,需要检查原理图、PCB、硬件板子,对于可以测量的信号、电压一定要确保与设计一致;【大坑】
- 调试外设需要至少提供2块到3块平台调试,避免可能存在的板子不一致性异常;
- 软件基于稳定版本测试,从初期排除其他干扰项,避免中间频繁切换版本耗时,最好是提供外设2~3套小板,基于demo的条件调通;
- 调试过程中遇到问题,需要协调camera、sensor FAE支援;
- 飞线需要反复检查,确保无误;
1.5.2 知识点总结
- mipi时序要求:
-
连续clk与非连续clk的区别:
连续clk需要要求工作时序,即RX端需要先enable,然后TX端再触发clk送数据出来,保证触发到RX端;
非连续clk由于每一帧都有clk触发动作,所有不需要先后时序要求
-
Virtual Channel的概念理解:
mipi协议,用于打包和恢复的作用,即可以输入多路数据在RX端解析:
- TI IC 透传是如何操作的:
这次调试,基本上能走的弯路都走了一遍,以后当吸取教训