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

news/2024/12/2 23:29:52/

转自地平线论坛经验

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

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.ppmy.cn/news/118114.html

相关文章

如何鉴别电脑电源是否虚标(实际输出瓦数)

发现很多人没有提,大部分的虚标都是在名字上做文章 比如起个名字xx500w,实际额定只有300w。 比起到处翻标签确定额定功率。 直接看12v输出,cpu显卡绝大部分供电都是12v出来。 12v那一路的输出功率差不多等于最大电源功率。 比如12v输出58…

常见的电脑电源种类

常见的电脑电源有以下几种: AT电源:早期电脑使用的标准电源,已经被淘汰。 ATX电源:现代电脑普遍采用的电源,提供更稳定的电压输出和更好的节能性能。 SFX电源:小型电脑和媒体中心等需要小型化设计的设备…

电脑电源处理器

处理器电源管理 注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\bc5038f7-23e0-4960-96da-33abaf5935ec 下新建一个DWORD(32),命名为Attributes,值为2。 系统散热…

为什么笔记本电脑电源适配器基本是19V供电

为什笔记本电源适配器供电一般不是20V,不是25V,偏偏是19V呢,我们从硬件角度聊聊这个问题。 首先一个大背景是,笔记本电池基本都是锂电池为主,在设计上,一般会使用多枚锂电池并联、串联而成一块完整的电池&a…

计算机电源接口在哪,电脑电源接口详解

电源是主机的心脏,为电脑的稳定工作源源不断提供能量。主要聊一下每个电源上都具有的输出导线。对于不同定位的电源,它的输出导线的数量有所不同,但都离不开花花绿绿的这9种颜色:黄、红、橙、紫、蓝、白、灰、绿、黑。健全的PC电源…

笔记本电脑电源指示灯亮但是黑屏开不了机(或者成功开机之后发现很卡顿)的解决方法

问题描述 本人电脑是联想拯救者Y7000P,性能如下  近期遇到一个问题,笔记本电脑开机的之后,突然出现卡顿,不管是打开浏览器还是打开软件,都要等上几秒钟,连刷新都要等一会。刚开始还以为是因为自己更新了…

装机分享!最值得入手的电脑电源推荐!

被装修创死了10086次,我终于装好了新家准备搬家了!这次装修的时候特意装了个电竞房,ps5和电脑已经到位了!我也终于拥有了属于自己的电竞房!说到电脑,就顺便跟大家分享一下我的装机过程,顺便给大…

台式计算机的电源的电压有那几种,电源知识:台式电脑电源中的+12V/+5V/+3.3V都为哪些硬件供电?...

实际上我们PC里面的硬件,对供电电压的要求是不一样的,因此PC电源要针对不同的硬件输出不同的电压。只是为什么这些电压对应的输出功率各有不同呢?具体硬件需要的具体电压是什么呢?我们相信大部分的玩家看见这两个问题后都是一脸懵…