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

news2024/11/16 15:47:32

转自地平线论坛经验

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/export

echo out > /sys/class/gpio/gpio111/direction

echo 0 > /sys/class/gpio/gpio111/value
sleep 0.2

echo 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_en

echo 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

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以及排查方法。

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

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

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

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

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

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

错误log如下:

4

此种情况一般是由于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注意事项

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

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

现象:

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

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

5
原因分析:

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通路的带宽和延时性能方面都有影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机MT4平台怎么样?手机版MT4平台使用教程教学

外汇是一个全球化的去中心化交易市场,与股票这样只提供一种报价的集中交易不同,在外汇市场中,货币的报价都不是单一的,意味着不同的外汇交易平台的报价会有所不同。以前外汇交易散户是很难进入市场的,参与者主要是银行…

功能强大UI美观的视频答题猜歌闯关娱乐微信小程序源码

正文: 功能强大UI美观的视频答题猜歌闯关娱乐微信小程序源码下载 后台管理资源本地化带数据和视频教程,这是一款拥有后端的闯关娱乐小程序。支持个人小程序和企业小程序上线运营功能强大齐全,带数据本地化(数据在自己服务器自己管理无需担心第三方失效…

【TCP 协议3】提高效率的五大机制

文章目录 前言一、滑动窗口与高速重传1, 什么是滑动窗口2, 什么是高速重传2.1, ack 丢包2.2, 数据丢包 二、流量控制1, 什么是流量控制 三、拥塞控制1, 什么是拥塞控制 四、延迟应答1, 什么是延迟应答 五、捎带应答1, 什么是捎带应答 总结 前言 各位读者好, 我是小陈, 这是我的…

Ansible基础3——playbook

文章目录 一、基本了解二、编写playbook2.1 单剧本2.2 多剧本2.3 特权升级2.4 语法优化 三、模块查找 一、基本了解 为什么要写playbook? 前面我们可以使用临时命令对受控机进行操作,但当有重复性的工作时就不能这么玩了,因为你要一遍遍的去执…

攻防世界-easy_RSA

题目如下:在一次RSA密钥对生成中,假设p473398607161,q4511491,e17 求解出d 1. RSA算法介绍 RSA算法是一种非对称加密算法,由三位计算机科学家Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出并命名。 它采用一…

Vue 基础组件二次封装的高级技巧及方法,能更优雅的进行二次封装组件(props 属性和 event 事件的透传、子组件插槽暴露、第三方组件方法继承)

前言 本人持续开源了Vue2基于ElementUi&AntdUi再次封装的Tui基础组件和Vue3基于Element-plus再次封装的TuiPlus基础组件,在组件封装的过程中提取了 props 属性和 event 事件的透传、子组件插槽暴露等,借此总结一下!!大佬略过!…

把VS Code打造成后端开发的宇宙IDE,也挺爽

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注! 作者:维生素P|慕课网优质作者 工欲善其事必先利其器,提高程序员的开发效率必须要有一个好的开发工具。而一旦提到开发工具&#xff…

深度解析Linux读写锁逻辑

一、Linux为何会引入读写锁? 除了mutex,在linux内核中,还有一个经常用到的睡眠锁就是rw semaphore(后文简称为rwsem),它到底和mutex有什么不同呢?为何会有rw semaphore?无他&#x…

[Mysql_DB]自动写入系统时间——注意低版本数据库操作

创建商品表包含字段create_time和update_time,并设置默认值为当前时间 实例 使用 CREATE TABLE 语句来创建一个商品表,并为其添加 create_time 和 update_time 字段,同时将这两个字段的默认值设置为当前时间。以下是一个示例: CREATE TABLE …

最新版本 Stable Diffusion 开源 AI 绘画工具之文本转换(Embedding)以及脚本(Script)高级使用篇

✨ 目录 🎈 文本转换 / Textual Inversion🎈 自定义Embedding / Textual Inversion🎈 脚本 / Script🎈 脚本 / Prompt matrix🎈 脚本 / X/Y/Z plot 🎈 文本转换 / Textual Inversion 这个功能其实就是将你…

SuperMap Hi-Fi 3D SDK for Unity制作游戏引擎材质

kele 一、使用背景 在交通,电力,规划等行业中,有的对象常常具有很强的质感,比如金属质感的 钢轨,电力塔;陶瓷材质的绝缘子;玻璃材质的建筑幕墙等,但常规方式的表现效果 往往差强人意…

AUTOSAR APP临摹1~Quick Start 模块

已实现逻辑 demo5 页面跳转 mainwindow.ui相当于simulink界面点击Quick Start进入welcome.ui界面在welcome.ui中大概包含7个页面页面之间通过next、back按钮翻页第0页没有back、最后一页点击next退出welcome.ui,回到mainwindow.ui 条件显示 C/C选项页面中&#xff…

7 步提升私有化部署的极狐GitLab 实例安全等级

目录 指导准则 分层安全,纵深防御 保密 ≠ 安全 减少攻击面 7 步保障私有化部署实例安全 第一步:开启多因素认证 第二步:加强额外的注册检查 第三步:限制群组和项目可见性 第四步:强化 SSH 设置 第五步&…

labelimg闪退解决方法(之前使用过labelimg,但新一次使用,打开文件夹无反应,再次打开闪退的问题)

问题描述: 之前使用过labelimg进行好多次的标注,但新一次运行使用,发现打开目录无反应,再次打开闪退的问题,重启电脑并且从新运行labelimg仍然无效。 解决方法: 关闭labelimg,然后删除文件C…

RK平台使用i2c-tools调试

简介 i2ctool是嵌入式开发过程中调试i2c设备常用的工具包,其中比较常用的有:i2cdetect、i2cdump、i2cset、i2cget。 RK平台的SDK大部分默认都会带这个工具,如果没有编译进去或者找不到的情况下可以自己从网上下载编译进去:https:…

数据结构与算法08:二分查找和哈希算法

目录 【二分查找】 二分查找的特殊情况 【哈希算法】 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 应用五:负载均衡 应用六:数据分片 应用七:分布式存储&…

vscode:快捷输入代码片段

背景 每次调试代码输入 console.log() 的时候都会想,有没有什么指令我按下了就能生成这行代码,甚至更多我想自定义的代码,然后就去搜了搜果然有,vscode 提供了自定义代码片段的功能。 步骤 打开 vscode,点击 Prefer…

idea连接HiveServer2

一、 启动hive 启动hive的元数据服务 [aahadoop102 hive]$ bin/hive --service metastore根据你hive的配置方式启动hiveserver2 [aahadoop102 hive]$ bin/hive --service hiveserver2二、配置idea连接Hive服务 打开idea,在项目界面中的右边栏找到Database&#…

学术小白如何写好论文引言

文章目录 1.引言写作逻辑1.1 第一段:从现实出发1.2 第二段:文献综述1.3 第三段:引入研究理论和中介变量1.4 第四段:介绍调节变量的概念1.5 第五段:总结 Hello,宝子们,接下来,我们将持续不断更新一系列围绕论文写作的tips建议&…

vue3学习笔记(附加铺垫知识)

Vue3 1.铺垫知识 1.1ES6 默认导出与默认导入: 按需导出与按需导入: 直接导入并执行模块中的代码: 1.2Promise 回调地狱: 基本概念: 使用promise封装自己的读文件方法: 第一步: 第二步&a…