转自地平线论坛经验

1. I²C通讯失败的问题以及排查方法。

外界的图像数据一般是通过sensor感知,然后通过mipi接口进入到地平线X3M这款AI芯片的视频处理模块,模块对视频图像做比如放大、缩小、旋转等处理。

问题:I²C通讯失败,错误log如下:

run_time = 100000
cam_index = 0
pipe_num = 1
loop = 4
need_m_thread = 0
need_free = 0
need_get = 0
need_display = 0
unable open camera with addr 0xaa ioctl I2C_SLAVE_FORCE error
[ERROR]["LOG"][imx415_utility.c:101] 101 : init imx415 -- 2:0xaa 0: 0x3000 = 0x1 fail
[ERROR]["LOG"][imx415_utility.c:421] 421 : init imx415 fail
[ERROR]["LOG"][utility/hb_cam_utility.c:909] sensor_init fail

出现 I²C 通讯失败错误,一般需要从如下三种情况来排查:

1、检查sensor是否需要gpio拉低拉高

针对有些sensor配置有gpio的拉低拉高的管脚需要复位后才能写sensor的I²C寄存器,点亮sensor时候需要跟硬件工程师或者自行查看硬件原理图check清楚,X3系统支持GPIO子系统,因此可以通过操作sys节点的方式来做,以gpio111为例,命令如下:

echo 111 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio111/directionecho 0 > /sys/class/gpio/gpio111/value
sleep 0.2echo 1 > /sys/class/gpio/gpio111/value

2、hb_x3player.json文件对于sensor I²C bus配置错误,检查bus_num字段,以imx415 sensor为例,参考如下:

"config_0":{"interface_type":"mipi","port_number":1,"port_0":{"bus_type":0,"bus_num":2,"entry_num":1,"sensor_addr":"0x1a","sensor_name":"imx415","reg_width":16,"sensor_mode":1,"fps":30,"resolution":2160,"gpio_pin":[ 118 ],"gpio_level":[ 0 ],"deserial_index":0,"deserial_port":0,"config_path":"hb_mipi_imx415_raw10_%dfps_%dP.json"}},

3、sensor没有正确接入,需要检测I²C是否能够探测到,包括是否给sensor的mclk和mipiclk给时钟,对于sensor使用X3提供mclk时,需要先开启mclk,使用I²C命令才能正常探测到sensor, X3系统可以通过如下命令给mipi host0 mclk 24Mhz时钟,注意检查使用的mipi rx是0,1,还是2,对应需要修改命令为mipi_host0,mipi_host1,mipi_host2示波器实际量下在X3端的mclk和mipiclk波形是否跟配置的一致:

echo 1 > /sys/class/vps/mipi_host0/param/snrclk_enecho 24000000 > /sys/class/vps/mipi_host0/param/snrclk_freq

2. mipi初始化时序问题以及排查方法

地平线X3M与sensor通过mipi接口连接,时钟由X3M提供,一般情况下是24Mhz,硬件上需要确保时钟线和数据线的连接正常,这是后面sensor能点亮的前提。

[INFO][][mipi/mipi_group.c:269] mipiclk 442
[INFO][][mipi/mipi_group.c:270] settle 65
[INFO][][mipi/mipi_group.c:271] entry_info->host_enable 1
[INFO][][mipi/hb_mipi_host.c:384] entry_info->host_path /dev/mipi_host0
[INFO][][mipi/hb_mipi_host.c:385] entry_info->dev_path /dev/mipi_dev-1
[INFO][camera][src/hb_vin_mipi_host.c:256] mipi host0 init begin
[ERROR][camera][src/hb_vin_mipi_host.c:273] !!! host1 MIPIHOSTIOC_START error, ret = -1
[ERROR][camera][src/hb_vin.c:112] mipi_host 0 init error!
[ERROR][][mipi/hb_mipi_api.c:388] hb_vin_init fail
[ERROR][][vio_vin.cpp:(hb_vin_init:506)] HB_MIPI_SetMipiAttr error!
hb_vin_init failed, -37

对于上图的报错,需要做如下几步的配置自查:

1、因为X3对mipi stop状态检查默认在mipi init阶段进行的,但并非所有sensor上电后都默认处于stop状态,对于此类sensor(例如sony系列),需要在sensor init中将sensor配置为stop状态,并将mipi stop check配置到mipi start阶段。配置命令如下,注意使用的是mipi rx是0,1,还是2,对应需要修改命令为mipi_host0,mipi_host1,mipi_host2:

echo 1 > /sys/class/vps/mipi_host1/param/stop_check_instart

2、检查settle值(范围是0-127),以imx415 sensor为例,settle值是10,如代码块1

3、检查sensor的lane数是否配置的跟mipi里面的lane一致,sensor的lane数需要从厂家的初始化配置里面获取,如果没有需要咨询sensor厂家获得,以imx415 sensor为例,如下图是sensor厂家给出的初始化的lane数,lane数如代码块2


4、sensor的输出宽高是否跟mipi配置的宽高一致。

5、sensor init后状态必须是stop,不能有流输出,等sensor start后才可以输出流(kernel的报错日志 会有wait phy stop state error!!!错误)

6、确定sensor的时钟是否正常,mipi参数里面的mclk跟sensor时钟是否填的一致。

7、sensor的framelenth和linelength是否配置正常。

3. mipi启动报错的错误log以及排查方法。


出现该错误时,说明mipi LP to HS切换失败,一般有如下两种情况:

1、hb_x3player.json文件中对于mipi host的通道配置错误,需要检查entry_num字段,以imx415 sensor为例,entry_num字段如代码块1所示:

2、检查下硬件的mipi接线有没有搞错,硬件接口对应如下图



3、sensor开流失败,没有进入HS模式,串口会出现mipi的hs reception check error 0x10000 hs reception state error!!!错误,可能的原因是sensor写寄存器初始化序列没有写对,导致sensor没有正常出流,可以使用i2ctransfer命令把写到sensor的寄存器读出来跟写入对比是否一致,i2ctransfer读命令如下截图,如果sensor寄存器初始化读出和写入一致,需要检查下硬件接线和模组是否有异常,可以使用示波器量下X3端对应得mipiclk,mclk和数据的波形是否正常:

4. 串口无任何报错,应用程序报错(ipu get buf failed type(0) !!! )

嵌入式开发过程中会碰到各种问题,软件方面的问题一般是通过查看log打印信息来分析。本文介绍地平线SOC X3M开发板在点亮sensor过程中碰到的问题。

错误log如下:

此种情况一般是由于VIO配置文件中对于mipi host通道号配置有误,确认mipi_rx_index字段,以imx415 sensor为例,配置如代码块1和代码块3:

  • 代码块1
"config_0":{"interface_type":"mipi","port_number":1,"port_0":{"bus_type":0,"bus_num":2,"entry_num":1,"sensor_addr":"0x1a","sensor_name":"imx415","reg_width":16,"sensor_mode":1,"fps":30,"resolution":2160,"gpio_pin":[ 118 ],"gpio_level":[ 0 ],"deserial_index":0,"deserial_port":0,"config_path":"hb_mipi_imx415_raw10_%dfps_%dP.json"}},
  • 代码块3
"mipi": {"enable": 1,"ipi_channels": 1,"mipi_rx_index": 1,"width": 3840,"height": 2160,"format": 0,"pix_length": 1,/*需要跟代码块1的entry_num保持一致*/"enable_mux_out": 1,"enable_pattern": 0,"enable_frame_id": 1,"enable_bypass": 0,"enable_line_shift": 0,"enable_id_decoder": 0,"set_init_frame_id": 0,"set_line_shift_count": 0,"set_bypass_channels": 1,"set_mux_out_index": 0},

4.1 Hobotplayer注意事项


如上图所示,如果ipu_ds_config下面的ds0_roi_en设置1hobotplayer需要使用的channel_id0,如果是ds1_roi_en设置1,那hobotplayer需要使用的channel_id1,如果ds2_roi_en设置的是1,那么hobotplayer需要使用的channel_id2,如下图

5. 图像锯齿感(isp->online->ipu)

现象:

地平线X3M SoC系统平台能正常点亮sensor,调试工作就已经成功了一半,剩下的工作就是对图像细节做优化。下面介绍出图后图像部分地方出现锯齿状现象及解决方法。

sensor出图后,一般是通过hobotplayer这款软件来显示图像,yuv图像有锯齿的现象,如下图所示:


原因分析:

IPU输入需要16字节对齐,因为是 isp->online->ipu,如果是sensor输入的宽度不是16字节对齐,到ipu后因为字节不对齐所以出现锯齿

解决方法:

  1. 建议sensor端宽度输入改成16字节对齐,比如1080改成1088

  2. 可以把isp->online->ipu改成isp->offline->ipu,以1080对齐到1088为例,cfg_size改成如下

"cfg_size": {          "source_width": 1088,          "source_height": 1280,          "source_stride_y": 1088,          "source_stride_uv": 1088,

如果改成offline,对pipeline通路的带宽和延时性能方面都有影响

【地平线X3M平台点亮sensor出现问题的分析】相关推荐

  1. MTK平台点亮sensor以及mtk开机初始化

    MTK点亮sensor Probe:上电–>matach id–>下电 Driver:Kernel部分和Hal部分 dtsi:主要配置GPI的上电逻辑,把camera的上电管脚与平台管脚相 ...

  2. 展锐平台的camera sensor驱动代码设计解析(2)

    展锐平台的camera sensor驱动代码设计解析(1) 展锐平台的camera sensor驱动代码设计解析(2) 展锐平台的camera sensor驱动代码设计解析(3) Camera驱动的基 ...

  3. 三:Sensor SLPI层代码分析---

    三:Sensor SLPI层代码分析 在学习SLPI侧代码前我们先了解下SEE的registry&config. registry 放在/persist/sensors/registry/re ...

  4. Android6.0 Sensor架构和问题分析

    本文在借鉴网友的资料后再重新梳理了一遍,都是站在前人的基础.巨人的肩膀上再次总结分析出来的,仅供大家参考! 本文主要描述了在Android 6.0系统.MTK6755平台上sensor相关软硬件的体系 ...

  5. 利用好手头的资源解决海量语料资源收集以及利用哈工大的LTP云平台解决依存句法和语义依存分析

    一.利用好手头的资源解决海量语料资源 基于语料做机器学习需要海量数据支撑,如何能不存一点数据获取海量数据呢?我们可以以互联网为强大的数据后盾,搜索引擎为我们提供了高效的数据获取来源,结构化的搜索结果展 ...

  6. 【报告分享】小红书平台2021 11.11期间行业投放分析报告-千瓜数据(附下载)

    摘要:随着平台多元化发展,用户体量增加,小红书逐渐拥抱了更多的年轻用户群体,也给更多的品牌带来了增长机会.据小红书方透露,2021年小红书平台的单日笔记曝光已经超100亿次,且男性用户占比已经达到了3 ...

  7. 20189200余超 2018-2019-2 移动平台应用开发实践作项目代码分析

    20189200余超 2018-2019-2 移动平台应用开发实践作项目代码分析 项目名称 小说阅读器 项目功能 注册登录 用户信息.用户密码.用户图像修改 书籍分类 书架 书籍搜索(作者名或书籍名) ...

  8. 平台梯子行业调研报告 - 市场现状分析与发展前景预测

    平台梯子市场的企业竞争态势 该报告涉及的主要国际市场参与者有Louisville Ladder.TB Davies (CARDIFF).Tri-Arc Manufacturing.Werner Ent ...

  9. Https/Tcp抓包工具Charles、fiddler,ping (网络诊断工具),Android平台HTTPS抓包解决方案及问题分析HttpCanary

    市面上已经有一些弱网络模拟工具,比如微软的Network Emulator for Windows Toolkit(NEWT),Facebook的Augmented Traffic Control(A ...

最新文章

  1. 一位中科院自动化所博士毕业论文的致谢:二十二载风雨求学路,他把自己活成了光.........
  2. logback1.1.11日志无法自动删除
  3. JBox2D和JavaFX:事件与力量
  4. 实验1 熟悉实验环境
  5. 如何打开Cookies网页
  6. Servlet快速入门和工作原理
  7. 中小企业电子商务如何发展?
  8. python列表购物
  9. docker安装redis提示没有日记写入权限_Docker 从入门到掉坑
  10. 计算机学课毕业论文,计算机专业毕业论文(精选5篇)
  11. 对话夏琳·查布利斯:Primer.AI机器学习工程师是怎样炼成的?
  12. 上行带宽,下行带宽;上传速度,下载速度
  13. 【记录】读《你在天堂里遇见的五个人》有感
  14. 在上海创业的日子之了解银行企业对公基础账户收费情况
  15. 华为“天才少女”年薪156万:她靠什么改写了普通女孩的人生?
  16. Unity3D 协程
  17. 贪心算法之 活动安排(Java代码实现)
  18. location选择收货地址
  19. 您应该购买哪款Apple Watch?
  20. matlab导出图片背景_matlab美化图片之添加背景颜色

热门文章

  1. [附源码]Python计算机毕业设计宾馆管理信息系统
  2. 轻松掌柜免费|轻松掌柜免费版下载
  3. 利用python-hwinfo获取机器硬件信息
  4. C# 文件上传到七牛云服务器(一)
  5. EmuELEC 4.3 安装和乐视手柄 LeWGP-201 evremap问题解决
  6. Ph.D论文答辩PPT点滴(转)
  7. Revit插件 | 建模助手插件框架重大更新
  8. jQuery第四天案例
  9. 基于 React hooks + Typescript + Cesium 实现坐标拾取功能组件
  10. postman格式化