专栏底层软件rx0直接连接一个ov x 8b摄像头,配置的fps是30,但是输出fps是6

rx0直接连接一个ov x 8b摄像头,配置的fps是30,但是输出fps是6

已解决
szc2024-10-11
86
9

用户您好,请详细描述您所遇到的问题,详细的描述有助于帮助我们快速定位,解决问题~Thanks♪(・ω・)ノ

1. 硬件获取渠道及型号:

立昇智能科技提供的J5 SOM EDK

2. 系统镜像版本:

root@j5dvb:~# cat /etc/version

mipi@mipi debug 20231219-124328

3. 问题模块:

vpm

4. 问题描述:

为了避开敏感词汇, ov x 8b 中间加了空格

rx0直接连接一个ov x 8b摄像头,配置的fps是30,但是摄像头输出的fps是6

另外图像是绿色的。

执行2个官方提供的用例,输出的fps都是6,不是30,用例如下:

sh vio_test_case.sh sen_cim_isp0_pym0_4k_ov x 8b

cd /app/bin/tuning_tool

root@j5dvb:/app/bin/tuning_tool# sh run_tuning.sh

>> please select item by 1-6:

 @ 1 - AR0233_RGGB

  2 - AR0820_RCCB

  3 - AR0820_RGGB

  4 - Feedback

  5 - OV X 3C_RGGB

  6 - OV X 8B_RGGB

-> 6

>> please select module by 1-3:

 @ 1 - Pwl12_PH_Fov120

  2 - Pwl12_SN_Fov120

  3 - Pwl12_SN_Fov30

->1

logcat日志中有下面的打印,是ov x 8b lib的打印,但是内核中没有看到ov x 8b的代码,只有 libov x 8b.so

I/    ( 1616): [428.227356][ov x 8b]:HMAX = 5032, VMAX = 1126, width = 3840, height = 2160, lines_per_second = 6756, xclk = 24, fps = 6.000672

请帮忙看下怎么配置才能输出30 fps和不是绿色图像。

摄像头是从森云买的。具体型号是

SG8-O X 08bc-MIPI

SN: H120S1A-F11230543

之前讨论可以参见上一个帖子

https://developer.horizon.auto/developerForum?fullPath=/home/community/bbsdetail?bid=628415003389255680

hb_j5dev.json文件中修改参数 "extra_mode" , "config_index", "sensor_mode", 但是libov x8b.so 配置摄像头寄存器的值没有发生任何变化。能否帮忙看下libov x8b.so源代码,是什么原因。提供的系统内核没有libov x8b.so 源代码。

另外下面这个log打印中 , lines_per_second 和 xclk对应的寄存器地址是多少,fps是怎么计算出来的?能从 libov x8b.so的源代码中看到吗

I/    ( 1601): [1187.403442][ov x8b]:HMAX = 5032, VMAX = 1126, width = 3840, height = 2160, lines_per_second = 6756, xclk = 24, fps = 6.000672

能否提供下J5最新的 libov x8b.so,我试下

5. 示例代码:

6. log文件(目前暂不支持附件上传,请通过百度网盘上传后贴链接):

附件:
底层软件
征程5
评论1
0/1000
  • 只蓝片羽
    Lv.1

    您好: OVX8B控制帧率的HMAX配置值太大了,导致帧率下降:

    I/  ( 2335): [198.696243][ov x 8b]:HMAX = 5032, VMAX = 1126, width = 3840, height = 2160, lines_per_second = 6756, xclk = 24, fps = 6.000672

    其中控制帧率的主要是这几个寄存器,从您之前的贴子上贴的log看,应该是0x380c,0x384c,0x388c的配置值比较大导致:

    I/  ( 2335): [198.424454][ov x 8b]:write serdes 1@0x36: 0x380c=0x09

    I/  ( 2335): [198.424896][ov x 8b]:write serdes 1@0x36: 0x380d=0xc8

    I/  ( 2335): [198.425339][ov x 8b]:write serdes 1@0x36: 0x384c=0x05

    I/  ( 2335): [198.425797][ov x 8b]:write serdes 1@0x36: 0x384d=0xf0

    I/  ( 2335): [198.426224][ov x 8b]:write serdes 1@0x36: 0x388c=0x03

    I/  ( 2335): [198.426666][ov x 8b]:write serdes 1@0x36: 0x388d=0xf0

    I/  ( 2335): [198.423569][ov x 8b]:write serdes 1@0x36: 0x380e=0x04

    I/  ( 2335): [198.424011][ov x 8b]:write serdes 1@0x36: 0x380f=0x66

    您这个x8b的库是否自己改过? 请查看源码确认上面寄存器值是否有主动修改?

    另外此处有一组30fps的配置,可以尝试修改了再看输出帧率: 0x380c=0x04ae, 0x384c=0x0258, 0x388c=0x0258, 0x380e=0x0466。

    2024-10-11
    0
    8
    • szc回复只蓝片羽:
      x8b的库没有修改过。我拿到的系统内核代码中没有x8b 的源码,只有 libov x8b.so。

      测试发现打印的寄存器地址,比实际的地址加了1. 下面是读x8b寄存器的值和修改命令

      i2ctransfer -f -y 1 w3@0x36 0x38 0x0b 0x04 r4

      0x09 0xc8 0x04 0x66

      i2ctransfer -f -y 1 w5@0x36 0x38 0x0b 0x02 0x04 0xae

      i2ctransfer -f -y 1 w3@0x36 0x38 0x4b 0x04 r4

      0x05 0xf0 0x00 0x40

      i2ctransfer -f -y 1 w5@0x36 0x38 0x4b 0x02 0x02 0x58

      i2ctransfer -f -y 1 w3@0x36 0x38 0x8b 0x04 r4

      0x03 0xf0 0x01 0x00

      i2ctransfer -f -y 1 w5@0x36 0x38 0x8b 0x02 0x02 0x58

      i2ctransfer -f -y 1 w3@0x36 0x38 0x0d 0x04 r4

      0x04 0x66 0x00 0x08

      i2ctransfer -f -y 1 w5@0x36 0x38 0x0d 0x02 0x04 0x66

      修改后,input fps变高了,是14,但是output fps 是9。 hbplayer不再输出图像。有dmesg有错误打印

      root@j5dvb:~# cat /sys/devices/platform/soc/47010000.cam_sys/47060000.cim/fps

      cim pipe 0: input fps 14, output fps 9


      dmesg log:

      [ 3314.288713] [S0]size error 0x60010000

      [ 3314.288722] [S0]hw drop frame

      [ 3314.288775] [S0][G0]cim_reset_next_group:done

      [ 3314.290099] [A][time_3: 946688112 s, 804967 us] A: mback_msg: 242-454-2 208

      [ 3314.291662] [A][time_3: 946688112 s, 806530 us] A: mback_msg: 242-478-2 208

      [ 3314.429671] [A][time_1 :946688112 s, 944541 us], ncf = 204!

      [ 3314.429682] cim ipi0 height error

      [ 3314.429693] [S0] vio_push_drop_info too many drop info used, transfer from request queue

      [ 3314.429699] [S0] vio_push_drop_info frame id 5174

      [ 3314.429729] [CIM stl]:cim_size_err_check ipi0 size error

      [ 3314.429808] [diag_handle_cb, 884](warn): module_id = 36, event_id = 14 don't need handle!

      [ 3314.429815] (Diag): receive HW event!

      [ 3314.429817] [A][time_2 :946688112 s, 944688 us] A: Rcv_msg: 36-14-2 204, snd_event_num:38214, handle_event_num:38212

      [ 3314.429832] [fchm_ncf_irq_handler, 105]NON-Critical error happened, module_name:cim, ncf = 204!

      [ 3314.429852] [diag_netlink_snd_msg:1221]message send, module:36, event:14, status:3, fchm_err_code:204

      [ 3314.429860] [diag_netlink_snd_msg:1224]checksum = 946689319

      [ 3314.430323] (Diag): receive HW event!

      [ 3314.430330] [A][time_2 :946688112 s, 945200 us] A: Rcv_msg: 242-382-2 208, snd_event_num:38215, handle_event_num:38213

      [ 3314.430351] (Diag): receive HW event!

      [ 3314.430354] [A][time_2 :946688112 s, 945225 us] A: Rcv_msg: 242-430-2 208, snd_event_num:38216, handle_event_num:38213

      [ 3314.430362] [diag_netlink_snd_msg:1221]message send, module:242, event:382, status:3, fchm_err_code:208

      [ 3314.430366] (Diag): receive HW event!

      [ 3314.430369] [A][time_2 :946688112 s, 945240 us] A: Rcv_msg: 242-442-2 208, snd_event_num:38217, handle_event_num:38214

      [ 3314.430373] [diag_netlink_snd_msg:1224]checksum = 946690025

      [ 3314.430382] (Diag): receive HW event!

      [ 3314.430385] [A][time_2 :946688112 s, 945256 us] A: Rcv_msg: 242-454-2 208, snd_event_num:38218, handle_event_num:38214

      [ 3314.430397] (Diag): receive HW event!

      [ 3314.430396] [diag_netlink_snd_msg:1221]message send, module:242, event:430, status:3, fchm_err_code:208

      [ 3314.430399] [A][time_2 :946688112 s, 945270 us] A: Rcv_msg: 242-478-2 208, snd_event_num:38219, handle_event_num:38215

      [ 3314.430404] [diag_netlink_snd_msg:1224]checksum = 946690121

      [ 3314.430417] [diag_netlink_snd_msg:1221]message send, module:242, event:442, status:3, fchm_err_code:208

      [ 3314.430424] [diag_netlink_snd_msg:1224]checksum = 946690145

      [ 3314.430453] [diag_netlink_snd_msg:1221]message send, module:242, event:454, status:3, fchm_err_code:208

      [ 3314.430460] [diag_netlink_snd_msg:1224]checksum = 946690169

      [ 3314.430480] [diag_netlink_snd_msg:1221]message send, module:242, event:478, status:3, fchm_err_code:208

      [ 3314.430487] [diag_netlink_snd_msg:1224]checksum = 946690217

      [ 3314.432049] [A][time_3: 946688112 s, 946916 us] A: mback_msg: 36-14-2 204

      [ 3314.433546] [A][time_3: 946688112 s, 948414 us] A: mback_msg: 242-382-2 208

      [ 3314.435059] [A][time_3: 946688112 s, 949927 us] A: mback_msg: 242-430-2 208

      [ 3314.436588] [A][time_3: 946688112 s, 951455 us] A: mback_msg: 242-442-2 208

      [ 3314.436960] [S0]size error 0x64c00002

      [ 3314.436972] [S0]hw drop frame

      [ 3314.436982] [S0][P0]GP1(res 0, rcnt 0, bcnt 1801, scnt 3478)

      [ 3314.436989] [FRM](Free:2; Request:0; Process:30; Complete:0; Used:0)

      [ 3314.437021] [S0]dma reset done

      [ 3314.438107] [A][time_3: 946688112 s, 952975 us] A: mback_msg: 242-454-2 208

      [ 3314.439620] [A][time_3: 946688112 s, 954488 us] A: mback_msg: 242-478-2 208




      2024-10-11
      0
    • 只蓝片羽回复szc:

      您好: 这里的 0x380c是指0x380c-0x380d这一组16bit寄存器,不是0x380b-0x380c,其他类似。 你们没有源码? 那应该就是配置中开了DIV的bit使能,看上去配置值比30fps的翻了一倍。

      2024-10-11
      0
    • szc回复只蓝片羽:

      我一开始也是认为0x380c是指0x380c-0x380d这一组16bit寄存器。但是通过实际i2c命令读取寄存器的值发现log中打印的地址0x380c的值,实际是在0x380b寄存器的值。我怀疑log中打印的寄存器地址是加了1.

      我们拿到的内核代码中没有x8b的源代码,只有so文件。horizon-dev-J5-0810\hbre\camera\utility\sensor目录中有些其他摄像头的源代码。

      配置中开了DIV的bit使能,看上去配置值比30fps的翻了一倍。 你的意思是前面建议的配置值,需要再减少一般吗

      2024-10-11
      0
    • 只蓝片羽回复szc:

      您好,这里操作I2C的命令有些问题吧?

      读取: 0x380c

      i2ctransfer -f -y 1 w2@0x36 0x38 0x0c r2

      写入: 0x380c = 0x04ae

      i2ctransfer -f -y 1 w4@0x36 0x38 0x0c 0x04 0xae

      另外您这边代码中\hbre\camera\utility\sensor下没有ovx8b的目录或源码文件么? 最好把您实际用的源码文件发出来看下,目前从log看就是HMAX配置了大值导致帧率下降的。

      2024-10-11
      0
    • szc回复只蓝片羽:

      之前log中 打印如下, 如果原来 0x380c = 0x09c8的话, 改成 0x380c = 0x04ae, 那么从单个字节看就是 0x380c = 0x04, 0x380d= 0xae. 0x04ae中的高16bit 的0x04需要放入低位的寄存器 0x380c中,所以 i2ctransfer -f -y 1 w4@0x36 0x38 0x0c 0x04 0xae 命令中先写了0x04, 再写了 0xae。

      I/  ( 2335): [198.424454][ov x 8b]:write serdes 1@0x36: 0x380c=0x09

      I/  ( 2335): [198.424896][ov x 8b]:write serdes 1@0x36: 0x380d=0xc8

      我的确没有ovx8b源码,之前问过立昇的支持人员,他们说也没有。

      下面是sensor目录中的文件截图。 你是否可以提供下j5的 libov x8b.so 文件,我测试下。

      2024-10-12
      0
    • szc回复szc:

      有人答复下吗。能否提供下j5的 libov x8b.so 文件

      2024-10-15
      0
    • 只蓝片羽回复szc:

      您好:

      您这个SDK是从哪获取的呢? 只有so但是没有.c,看上去是有意删掉的? 我们没法直接提供文件或源码到这,可以通过项目或其他渠道获取?

      另外用上述 i2ctransfer -f -y 1 w4@0x36 0x38 0x0c 0x04 0xae 方式操作更新配置之后,帧率也没有变化么?

      如果没有源码很难给到您调试建议,此处看到怀疑是输出帧率配置了DIV降帧,另外如果按目前帧率应该是15fps,而使能同步的lpwm配置为30fps,可能不匹配导致异常降帧,可以用目前15fps的状态下修改lpwm为15fps配置(66666),看帧率是否能变为预期的15?

      2024-10-16
      0
    • szc回复只蓝片羽:
      从立昇拿到了ov x8b的代码。立昇修改了代码,通过函数 sensor_mode_config_init_nano 使用 nano_x8b_init_setting寄存器配置表进行了配置。

      估计是因为我们现在用的平台没有serdes,但是原来ov x8b的代码中有对serdes的配置,所以需要修改。

      我另外开个帖子,上传修改过的ov x8b代码

      2024-10-18
      0