外设适配-TI954 记录

1. 外设适配-TI954 记录

1.1 问题描述

项目需要支持1080P@60fps摄像头输入,针对于这种分辨率的摄像头一般都采用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内部状态确认

  1. 检查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是否有拿到数据抑或是解析异常

  2. 查看中断状态
    在这里插入图片描述
    则说明确实是mipi控制器没有给出来数据,则进一步确认mipi控制器中具体是没有接收到数据还是接收到数据后解析异常

  3. dump寄存器
    在这里插入图片描述这里dump出来为控制寄存器,与demo平台完全一致,所以这里其实没有看出什么内容,但是这里也没有进一步确认的方法;

则这里其实留下了一个坑:

  1. 无法确认当前SOC内部是否有接收到数据还是数据解析错误;
  2. 后续check其他部分时,如果实验有遗漏或者异常,结合此部分则会得出错误的结论;

1.3.2 检查硬件

  1. 检查原理图
    在这里插入图片描述
    这里主要检查data、clk、电源是否与参考设计保持一致,确认无异常;
    在这里插入图片描述
    这里对比所有pin基本正常连接到954,只是存在一组电感,这个专门跟HW确认差分信号是可以添加共模电感的;

  2. 检查PCB走线

担心是否存在layout时走线与原理图不一致,特别找到此板子的PCB,检查一遍走线,确认线序以及对应mipi模块无异常
至此,HW第一轮检查完成,由于检查原理图和PCB均无异常,则初步认为该板子硬件设计没有问题:

  1. 接下来测量mipi波形确认是否符合标准;
  2. 由于这里没有实际测量板子的电压值是否与设计一致,导致后续思考方向完全偏离;

1.3.3 波形确认

上述实验做完后,得到的结论是:

  1. 硬件基本无问题;
  2. SOC内部信号没有解析出来;

所以接下来主要怀疑SOC与TI954之间mipi信号时序不匹配问题,这里由于前边埋下的雷,以及一些其他的环境问题导致这里block了3天;

1.3.3.1 mipi标准

在这里插入图片描述

这里需要满足的条件是:

  1. data波形符合上述形状;
  2. 时序满足:TX-LP00 < RX-HS-SETTLE < TX-LP00 + TX-HS-ZERO
1.3.3.2 实际测量
1.3.3.2.1 第一轮测试,波形不符合上述标准

在这里插入图片描述
整体看下来是多帧数据,需放大来看:
在这里插入图片描述
再放大:

在这里插入图片描述
与上述标准的波形相差比较多,则这里测量形状一直不对,此部分由于影响因子比较多,所以逐步做了如下排查:

  1. 默认设置为TI954出pattern测试,怀疑这里是否为此部分配置出现异常,配置为摄像头输入测试;
  2. Linux系统当前版本仅支持AVM功能测试,怀疑这里是否有其他干扰项,打通RVC功能测试;
  3. 由于Linux系统仍在开发阶段,避免软件配置异常,基于Android版本移植954测试;
  4. 可能为HW干扰,重新焊接测量点确认;

上述几个实验耗费了3天时间,主要是移植以及打通path过程耗费时间较多,最终请客户多带了两块板子测试确认为HW问题;

这里的经验教训:

  1. 调试外设需要至少提供2块到3块平台调试,避免可能存在的板子不一致性异常;
  2. 软件基于稳定版本测试,从初期排除其他干扰项,避免中间频繁切换版本耗时;
1.3.3.2.2 第二轮测试,时序不满足上述标准

在这里插入图片描述
data:
在这里插入图片描述
LP00为143ns,HS00为322ns,而SOC端的HS-SETTLE配置为110ns+8ul=150ns,基本处于临界值了,而TI datasheet中定义:
在这里插入图片描述
则这里没有符合datasheet标准:

  1. 调整SOC RX-HS-SETTLE端满足其时序要求,仍无数据输出;
  2. 寻找TI FAE支持,回复为配置400M clk时,需要配置page0,0x40~0x48寄存器调整时序,调整后波形无变化;
  3. 怀疑共模电感问题,去除共模电感测量,时序有很大改善,SOC仍无数据解析出来;

回过头来看,这里遇到的坑蛮多:

  1. 手头的板子测量存在异常,波形形状一直不对
  2. 测量到时序与TI标准存在差异,且根据上述时序调整了RX端的时序,仍无法接收到数据,此时应该开始怀疑其他部分了;

至此理论上我这边所有检查都无异常,则说明:

  1. 上述检查过程有遗漏,导致问题没有被发现;
  2. 存在上述知识领域之外的内容,即数据进来SOC后存在其他异常,导致无法解析出来;

则需要进一步证实;

1.3.4 飞线交叉测试确认

1.3.4.1 项目平台mipi信号输出到其他平台测试

完全相同的配置,让954输出mipi信号,输入到此前其他项目的SOC中解析,可以正常出图;

说明954配置无异常:

  1. 954输出波形无问题;
  2. 可能存在硬件问题数据没有进SOC问题;
  3. 可能存在时序不匹配问题;
  4. 可能存在SOC内部解析异常问题;
1.3.4.2 项目平台mipi信号输出到demo平台测试

完全相同配置,让954输出mipi信号,输入到demo平台测试:

  1. CMS 系统上954 power_off return掉,则输出不关闭;
  2. 对应demo平台setup软件,直接使用裸机程序测试;

测试有信号输入到demo平台,但是无法解析出来;

基于上述两个实验,说明:

  1. 954配置无异常;
  2. SOC内部对信号解析存在问题(主要还是怀疑时序不匹配)
  3. 项目平台硬件问题
1.3.4.3 项目平台作为954子板,其他均使用EVB板来操作

为排除两种因素:

  1. I2C控制954与mipi IP enable部分时序;
  2. 飞线后板子移动导致数据受到影响;

请客户HW将CMS底板飞线到EVB板测试,好处在于EVB板支持各种排插(各组I2C连接/以及DS-5)

依次处理如下:

  1. 量取mipi波形,确认符合标准(开始飞线有问题,反复处理了几次)

  2. 根据mipi波形调整时序,并且将所有err bypass功能都打开,即所有数据直接往后端送;

经过调整时序以及err bypass功能后,720P@30fps可以出图,存在噪点、偏色问题;

1.3.5 720P@30出图

基于上述飞线平台 + 裸机系统,720P @ 30fps可以出图;

AVM盒子 -> 954 -> SOC -> panel

由于AVM盒子 -> 954飞线到其他SOC无问题,则主要怀疑是飞线、SOC配置、上屏等几个环节的问题

  1. 使用DS-5 dump内存查看
    1. 显示OK,则说明为上屏问题;
    2. 首先排查硬件,替换另外的输出口测试,可以正常显示,说明该LVDS0存在异常;
    3. 裸机程序不存在其他软件问题;

1.3.6 项目平台720P@30出图

上述排查完成后,软件配置基本无问题,则继续调试本项目平台

  1. 移植到Android os中,仍无数据显示;
  2. 使用裸机系统在该平台上运行,仍无数据输入;

基于此,基本确认为硬件问题,回头来看之前的硬件排查过程,clk&data波形均无问题,则确认电压:

  1. 1.8V电压正常;
  2. 0.9V core电压没有!!!

检查核心板器件:

在这里插入图片描述

R334这里没接,添加后运行Android软件可以正常出图,至此此问题第一步解决完成;

1.3.7 项目平台1080P@60

由于此项目使用为1080P@60帧的摄像头,采用双绞线输入,所以这里替换为项目需求HW继续调试:

  1. 由于720P已经pass,说明HW部分已经调通;
  2. 后续需要调整:
    1. 954配置;
    2. 前端配置;
1.3.7.1 pattern输出

将954配置为双绞线输入,无图像出现,为排除前端影响,设置为pattern输出:

在这里插入图片描述

pattern同样无数据输出,954配置需要调整,检查setting查看,clk值得怀疑,将其设置为800M测试,可以正常显示;

至此,后端配置已经pass;

1.3.7.2 摄像头输出不完整图像

替换为摄像头,可以看到有数据进来(有光暗变化),但是显示看起来像是放大了几百倍的样子,请camera厂商调试焦距,可以输出:

在这里插入图片描述

左侧100个像素点左右可以正常看到数据,还是蛮清晰的,每一行的后续1800个左右像素点都是维持错误的状态,同时查看SOC端log提示,data crc校验错误,则与上述现象一致,数据包中存在数据异常;

怀疑点如下:

  1. sensor与TI953之前配置需要调整;
  2. TI953与TI954之间配置需要调整;

基于此做如下实验:

  1. 953出pattern在后端显示:
    1. 配置方式与954相同;
    2. 可以正常显示1080P@60 ,但是从log看,帧率约30的样子;
    3. 可以说明953端的分辨率、格式等配置正确;
  2. sensor飞线出来到SOC确认:
    1. 飞线时将摄像头拆开导致镜头无法安装;
    2. 效果来看可以显示出轮廓;
    3. 结合上述1、2可以说明sensor端分辨率格式配置无问题;

则经过上述实验,说明sensor、953、954部分配置不匹配,由于sensor部分只需要配置格式输出即可,主要怀疑953与954之间匹配问题

1.7.3.3 TI953-TI954匹配调试
  1. 检查硬件配置是否一致:

在这里插入图片描述

这个是TI953的mode select寄存器,当前被配置为CSI-2 Synchronous mode,而对应TI954被配置为Non sync mode:

在这里插入图片描述

首先将其配置为相同的mode,同样是硬件设置:

在这里插入图片描述

这里设置完成后,现象仍是一样,而理论分析该现象比较像是数据传输过程中,只有一部分数据传输完成,即开始下一次传输的样子,而对端由于数据接收未完成,则自动补足最后一个像素点,基于此咨询过往有此经验的同学,可以调试line rate尝试:
在这里插入图片描述

此部分配置为50M也就是4Gbps测试,可以正常显示:

在这里插入图片描述

也就是说明当前的line rate可以满足720P的传输要求,而无法满足1080P的传输要求;

在这里插入图片描述

1.4 问题处理

  1. mipi core 电压,硬件贴上电阻;
  2. TI953 小板上mode sel配置为non sync mode(硬件配置);
  3. TI953 软件配置,设置clk rate;

1.5 总结

1.5.1 弯路总结

  1. SOC需要提供关键状态寄存器的dump功能,避免有遗漏项模糊不清;
  2. 硬件检查时,需要检查原理图、PCB、硬件板子,对于可以测量的信号、电压一定要确保与设计一致;【大坑】
  3. 调试外设需要至少提供2块到3块平台调试,避免可能存在的板子不一致性异常;
  4. 软件基于稳定版本测试,从初期排除其他干扰项,避免中间频繁切换版本耗时,最好是提供外设2~3套小板,基于demo的条件调通;
  5. 调试过程中遇到问题,需要协调camera、sensor FAE支援;
  6. 飞线需要反复检查,确保无误;

1.5.2 知识点总结

  1. mipi时序要求:

在这里插入图片描述

  1. 连续clk与非连续clk的区别:

    连续clk需要要求工作时序,即RX端需要先enable,然后TX端再触发clk送数据出来,保证触发到RX端;

    非连续clk由于每一帧都有clk触发动作,所有不需要先后时序要求

  2. Virtual Channel的概念理解:

    mipi协议,用于打包和恢复的作用,即可以输入多路数据在RX端解析:

在这里插入图片描述

  1. TI IC 透传是如何操作的:

在这里插入图片描述

这次调试,基本上能走的弯路都走了一遍,以后当吸取教训

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
"越控越有趣 - TI C2000 LaunchPad炼成记" 是一篇关于使用 TI C2000 LaunchPad 开发板的经验分享和总结。C2000 LaunchPad是一款功能强大、易于使用的微控制器开发板,能够满足各种应用的需求。 使用C2000 LaunchPad的过程中,我发现它具有很多优点,使得开发过程更加有趣。首先,该开发板具有丰富的外设和接口,包括多路IO口、ADC和PWM输出等功能,使得我们可以轻松地与其他硬件设备进行连接。这样,我们可以通过使用各种传感器和执行器来实现更多有趣的项目。 其次,C2000 LaunchPad采用了TI的DSP架构,具有强大的数字信号处理能力。这意味着我们可以使用该开发板来处理如音频信号处理、无线通信等复杂的任务。而且,C2000 LaunchPad提供了丰富的开发工具和资源,如Code Composer Studio集成开发环境和探索套件等,帮助我们更快地上手并加快开发进度。 在使用C2000 LaunchPad的过程中,我还发现它有一些创新的功能和特点。例如,该开发板支持实时监测和调试功能,可以实时查看系统性能和调试代码。这对于开发过程中的故障排查和优化非常有帮助。同时,C2000 LaunchPad还支持在线更新固件,可以随时获取最新的功能和修复。这为我们提供了更便捷和灵活的开发方式。 总的来说,C2000 LaunchPad是一款功能强大、易于使用的微控制器开发板。它的丰富外设、强大的DSP能力和创新的功能使得开发过程更加有趣和富有挑战性。我相信,通过不断探索和挑战,我们可以在C2000 LaunchPad上实现更多有趣的项目,并不断提高自己的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值