@veye_xumm do you know what framerate can be achieved on rpi zero 2w with imx287?
I'm getting ~320 fps + ~80 frames drops per second when using v4l2-ctl
$ v4l2-ctl --stream-mmap --stream-count=-1 -d /dev/video0 --stream-to=/dev/null
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 319.87 fps, dropped buffers: 79
and ~240 fps + ~80 frame drops per second when using my C program (V4L2_BUF_TYPE_VIDEO_CAPTURE + V4L2_MEMORY_MMAP, used 3 buffers)
VIDIOC_DQBUF takes ~4000 microseconds in my case
fps: 252 dropped: 77 dq: 3996
fps: 250 dropped: 71 dq: 4031
fps: 247 dropped: 74 dq: 4041
fps: 248 dropped: 75 dq: 4033
I've set camera fps using this command
v4l2-ctl --set-ctrl frame_rate=523
the interesting thing is that I have frame drops even if I set very low fps, e.g. 10
<<<<<<< 6.67 fps, dropped buffers: 2
<<<< 7.50 fps, dropped buffers: 3
<<<<<< 6.87 fps, dropped buffers: 1
as well as using v4l2 C interface (dq is dequeue time in microseconds)
fps: 7 dropped: 0 dq: 170145
fps: 6 dropped: 1 dq: 166645
fps: 5 dropped: 2 dq: 299999
fps: 3 dropped: 2 dq: 366619
fps: 8 dropped: 0 dq: 124991
and after setting fps to 2000, roi to 264x64, expmode=0 and metime=18 I have this:
$ ./test_fps.sh 2>&1 | awk '{ print $2" "$3" "$4" "$5" "$6 }'
1179.27 fps, dropped buffers: 309
1190.98 fps, dropped buffers: 311
1211.59 fps, dropped buffers: 313
1194.65 fps, dropped buffers: 309
1179.99 fps, dropped buffers: 322
1205.69 fps, dropped buffers: 315
1208.82 fps, dropped buffers: 315
1199.75 fps, dropped buffers: 328
I had no issues with ov9281 cams from different vendors when using v4l2 C interface on rpi zero 2w, these cams have 1280x800 resolution, 8-bits per pixel and 144 max fps for this format (I'm not sure about rpi zero 2w capabilities though, it seems at least ~385 fps should be possible (?) with imx287:
(704×544×523) == 191 Mb/s (ideal)
(1280×800×144) == 140Mb/s
704×544×250 == 91 Mb/s
(264*64*1200) == 19 Mb/s
According to driver output CSI speed is limited to 178 Mb/s (per lane?):
[   11.153106] mvcam: mvcam_get_mipifeature: lane num 2, datarate 1500000000 bps
[   11.153141] mvcam 10-003b: Success to get mvcam endpoint data lanes, dts uses 2 lanes,will set to camera
can these drops be related to veye driver? Do you have any ideas where I can start from to debug it?
Here mca312 had similar problem
https://forum.veye.cc/topic/469/imx287-fps
and you suggested to use the latest firmware, it seems I have the latest one (MV-MIPI-IMX287M_C1.43_L2.07_upgrade_20240910.bin.zip) :
$ ./mv_mipi_i2c_new.sh -r version
version is C 01.43 and L 02.07
$ dmesg | grep mvcam | grep firmware
[   11.148332] mvcam 10-003b: firmware version: 0x1430207
I've saved fps=523 to camera memory and defined DEBUG_PRINTK in veye_mvcam.c, so I have the following dmesg (last lines come from v4l2-ctrl stream command mentioned above)
[    0.054968] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/veyemvcam@3b
[    0.055063] /soc/i2c0mux/i2c@1/veyemvcam@3b: Fixed dependency cycle(s) with /soc/csi@7e801000
[    0.061709] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/veyemvcam@3b
[    0.062030] /soc/i2c0mux/i2c@1/veyemvcam@3b: Fixed dependency cycle(s) with /soc/csi@7e801000
[    8.318547] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/veyemvcam@3b
[    8.319204] /soc/i2c0mux/i2c@1/veyemvcam@3b: Fixed dependency cycle(s) with /soc/csi@7e801000
[   10.560822] veye_mvcam: loading out-of-tree module taints kernel.
[   10.561878] mvcam 10-003b: veye mv series camera driver version: 01.01.06
[   11.146706] mvcam_power_on
[   11.147538] mvcam 10-003b: camera is: MV_MIPI_IMX287M
[   11.148332] mvcam 10-003b: firmware version: 0x1430207
[   11.149903] mvcam: mvcam_identify_module: max width 720; max height 544;min width 264; mini height 64
[   11.149914] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvcam_enum_pixformat 1008 
[   11.150702] mvcam: mvcam_enum_pixformat: format count: 3; format cap 0x7
[   11.150713] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvdatatype_to_mbus_code 968 
[   11.150719] mvcam: mvcam_enum_pixformat support format index 0 mbuscode 8193 datatype: 0
[   11.150727] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvdatatype_to_mbus_code 968 
[   11.150733] mvcam: mvcam_enum_pixformat support format index 1 mbuscode 8202 datatype: 1
[   11.150740] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvdatatype_to_mbus_code 968 
[   11.150746] mvcam: mvcam_enum_pixformat support format index 2 mbuscode 8211 datatype: 2
[   11.151533] mvcam: mvcam_enum_pixformat: cur format: 0
[   11.153106] mvcam: mvcam_get_mipifeature: lane num 2, datarate 1500000000 bps
[   11.153141] mvcam 10-003b: Success to get mvcam endpoint data lanes, dts uses 2 lanes,will set to camera
[   11.154719] mvcam: mvcam_probe: max width 720; max height 544
[   11.157865] mvcam: mvcam_getroi:get roi(0,0,704,544)
[   11.158664] mvcam: mvcam_v4l2_ctrl_init:default trigger mode 0
[   11.159456] mvcam: mvcam_v4l2_ctrl_init:default trigger source 1
[   11.161025] mvcam: mvcam_v4l2_ctrl_init:default framerate 523 , max fps 523 
[   11.161039] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvcam_enum_controls 1298 
[   11.161106] mvcam: mvcam_s_ctrl: cid = (0x9E0902), value = (166).
[   11.161116] mvcam: mvcam_s_ctrl: cid = (0x9E0901), value = (16).
[   11.161122] mvcam: mvcam_s_ctrl: cid = (0x980911), value = (16).
[   11.161129] mvcam: mvcam_s_ctrl: cid = (0x9E0903), value = (16).
[   11.161135] mvcam: mvcam_s_ctrl: cid = (0x981901), value = (0).
[   11.161142] mvcam write 0x404 val 0x0
[   11.162448] mvcam: mvcam_s_ctrl: cid = (0x981902), value = (1).
[   11.162465] mvcam write 0x408 val 0x1
[   11.163151] mvcam: mvcam_s_ctrl: cid = (0x981904), value = (523).
[   11.163160] mvcam write 0x814 val 0xcc4c
[   11.163840] mvcam: mvcam_s_ctrl: cid = (0x981905), value = (0).
[   11.163849] mvcam: set roi_x 0 round to 0.
[   11.163856] mvcam: mvcam_s_ctrl: cid = (0x981906), value = (0).
[   11.163863] mvcam: set roi_y 0 round to 0.
[   11.163870] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvcam_enum_controls 1333 
[   11.163882] mvcam 10-003b: mvcam_enum_controls success
[   11.163889] mvcam write 0x400 val 0x0
[   11.164567] mvcam write 0x83c val 0x2
[   11.165315] mvcam 10-003b: mvcam_csi2_get_fmt: width: (704) height: (544) code: (0x2001)
[   11.165327] mvcam 10-003b: mvcam_csi2_get_fmt: width: (704) height: (544) code: (0x2001)
[   19.981817] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.981855] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x2001), index = (0)
[   19.981881] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x2001), index = (2)
[   19.981894] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.981906] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.981919] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.981926] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.981938] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x200A), index = (0)
[   19.981959] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x200A), index = (2)
[   19.981971] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.981978] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.981985] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (2) mbus code (2013)
[   19.981996] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.982003] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.982010] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (2) mbus code (2013)
[   19.982021] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x2013), index = (0)
[   19.982041] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x2013), index = (2)
[   19.982052] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.982060] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.982066] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (2) mbus code (2013)
[   19.989868] mvcam: mvcam_g_volatile_ctrl: cid = (0x981901), value = (0).
[   19.990730] mvcam: mvcam_g_volatile_ctrl: cid = (0x981902), value = (1).
[   19.991634] mvcam: mvcam_g_volatile_ctrl: cid = (0x981904), value = (523).
[   19.992678] mvcam: mvcam_g_volatile_ctrl: cid = (0x981901), value = (0).
[   19.993534] mvcam: mvcam_g_volatile_ctrl: cid = (0x981902), value = (1).
[   19.994396] mvcam: mvcam_g_volatile_ctrl: cid = (0x981904), value = (523).
[   19.994665] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.994690] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x2001), index = (0)
[   19.994736] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x2001), index = (2)
[   19.994748] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.994755] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.994768] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.994776] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.994788] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x200A), index = (0)
[   19.994809] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x200A), index = (2)
[   19.994820] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.994827] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.994834] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (2) mbus code (2013)
[   19.994845] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.994852] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.994859] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (2) mbus code (2013)
[   19.994870] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x2013), index = (0)
[   19.994890] mvcam 10-003b: mvcam_csi2_enum_framesizes: code = (0x2013), index = (2)
[   19.994901] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (0) mbus code (2001)
[   19.994908] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (1) mbus code (200a)
[   19.994915] mvcam 10-003b: mvcam_csi2_enum_mbus_code: index = (2) mbus code (2013)
[  101.857898] mvcam 10-003b: mvcam_csi2_get_fmt: width: (704) height: (544) code: (0x2001)
[  101.860285] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvcam_set_stream 1134 
[  101.860320] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvcam_start_streaming 1088 
[  101.860327] mvcam_start_streaming 
[  101.860331] mvcam write 0x400 val 0x1
[  101.861056] mvcam 10-003b: mvcam_csi2_get_fmt: width: (704) height: (544) code: (0x2001)
[  105.460732] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvcam_set_stream 1134 
[  105.460759] /home/user/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-6.6.y/veye_mvcam.c mvcam_stop_streaming 1107 
[  105.460767] mvcam write 0x400 val 0x0
[  105.461465] mvcam_stop_streaming 
Unfortunately I cannot test it with rpi5 since something is not working with rpi5:
user@rpi5:~/raspberrypi_v4l2/rpi5_scripts $ ./media_setting_rpi5.sh mvcam 
This is a Raspberry Pi 5.
Kernel version is 6.6.74, do not support unpacked format.
Kernel version is 6.6.74, use i2c-10 for CAM0 and i2c-11 for CAM1.
camera name mvcam; roi_x 0; roi_y 0;width 1280; height 1024; media_fmt Y8_1X8; pixel_fmt GREY
mvcam 11 NOT FOUND
CAM0 probed:  media device is  /dev/media1
set CAM0 finish, plese get frame from /dev/video0 and use /dev/v4l-subdev2 for camera setting
user@rpi5:~/raspberrypi_v4l2/rpi5_scripts $ v4l2-ctl --stream-mmap --stream-count=-1 -d /dev/video0 --stream-to=/dev/null
		VIDIOC_STREAMON returned -1 (Broken pipe)
user@rpi5:~/raspberrypi_v4l2/rpi5_scripts $ uname -a
Linux rpi5 6.6.74+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.74-1+rpt1 (2025-01-27) aarch64 GNU/Linux
user@rpi5:~/raspberrypi_v4l2/rpi5_scripts $ dmesg | grep -E "rp1|cam"
[    0.889753] /axi/pcie@120000/rp1: Fixed dependency cycle(s) with /axi/pcie@120000/rp1
[    0.897628] /axi/pcie@120000/rp1/i2c@80000/veyemvcam@3b: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/csi@128000
[    0.908463] /axi/pcie@120000/rp1/i2c@88000/veyemvcam@3b: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/csi@110000
[    0.919310] /axi/pcie@120000/rp1/csi@110000: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/i2c@88000/veyemvcam@3b
[    0.930143] /axi/pcie@120000/rp1/csi@128000: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/i2c@80000/veyemvcam@3b
[    0.951482] /axi/pcie@120000/rp1: Fixed dependency cycle(s) with /axi/pcie@120000/rp1
[    0.959356] /axi/pcie@120000/rp1/i2c@80000/veyemvcam@3b: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/csi@128000
[    0.970192] /axi/pcie@120000/rp1/i2c@88000/veyemvcam@3b: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/csi@110000
[    0.981040] /axi/pcie@120000/rp1/csi@110000: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/i2c@88000/veyemvcam@3b
[    0.991874] /axi/pcie@120000/rp1/csi@128000: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/i2c@80000/veyemvcam@3b
[    2.094202] rp1 0000:01:00.0: bar0 len 0x4000, start 0x1f00410000, end 0x1f00413fff, flags, 0x40200
[    2.103288] rp1 0000:01:00.0: bar1 len 0x400000, start 0x1f00000000, end 0x1f003fffff, flags, 0x40200
[    2.112551] rp1 0000:01:00.0: enabling device (0000 -> 0002)
[    2.118840] rp1 0000:01:00.0: chip_id 0x20001927
[    2.127268] /axi/pcie@120000/rp1/i2c@80000/veyemvcam@3b: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/csi@128000
[    2.138171] /axi/pcie@120000/rp1/i2c@88000/veyemvcam@3b: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/csi@110000
[    2.149346] genirq: irq_chip rp1_irq_chip did not update eff. affinity mask of irq 100
[    2.186472] /axi/pcie@120000/rp1/i2c@88000/veyemvcam@3b: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/csi@110000
[    2.197319] /axi/pcie@120000/rp1/csi@110000: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/i2c@88000/veyemvcam@3b
[    2.208238] /axi/pcie@120000/rp1/i2c@80000/veyemvcam@3b: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/csi@128000
[    2.219089] /axi/pcie@120000/rp1/csi@128000: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/i2c@80000/veyemvcam@3b
[    2.977111] rp1-pio 1f00178000.pio: error -ENOENT: failed to contact RP1 firmware
[    2.985152] rp1-pio: probe of 1f00178000.pio failed with error -2
[    8.298688] rp1-firmware rp1_firmware: RP1 Firmware version eb39cfd516f8c90628aa9d91f52370aade5d0a55
[    9.308331] rp1-cfe 1f00110000.csi: bcm2712_iommu_of_xlate: MMU 1000005280.iommu
[    9.310361] rp1-cfe 1f00110000.csi: DW dphy Host HW v1.20
[    9.310370] rp1-cfe 1f00110000.csi: PiSP FE HW v0.1
[    9.310407] rp1-cfe 1f00110000.csi: found subdevice /axi/pcie@120000/rp1/i2c@88000/veyemvcam@3b
[    9.310541] rp1-cfe 1f00128000.csi: bcm2712_iommu_of_xlate: MMU 1000005280.iommu
[    9.310844] rp1-cfe 1f00128000.csi: DW dphy Host HW v1.20
[    9.310851] rp1-cfe 1f00128000.csi: PiSP FE HW v0.1
[    9.310889] rp1-cfe 1f00128000.csi: found subdevice /axi/pcie@120000/rp1/i2c@80000/veyemvcam@3b
[    9.460081] veye_mvcam: loading out-of-tree module taints kernel.
[    9.461064] mvcam 11-003b: veye mv series camera driver version: 01.01.06
[   10.076168] mvcam: mvcam_read: Reading register 0x04 failed
[   10.076174] mvcam 11-003b: failed to read chip id
[   10.076312] mvcam 10-003b: veye mv series camera driver version: 01.01.06
[   10.580424] mvcam 10-003b: camera is: MV_MIPI_IMX287M
[   10.581213] mvcam 10-003b: firmware version: 0x1430207
[   10.585920] mvcam 10-003b: Success to get mvcam endpoint data lanes, dts uses 2 lanes,will set to camera
[   10.595802] mvcam 10-003b: mvcam_enum_controls success
[   10.597180] rp1-cfe 1f00110000.csi: Using sensor mvcam 10-003b for capture
[   10.597254] rp1-cfe 1f00110000.csi: Registered [rp1-cfe-csi2_ch0] node id 0 successfully as /dev/video0
[   10.597279] rp1-cfe 1f00110000.csi: Registered [rp1-cfe-embedded] node id 1 successfully as /dev/video1
[   10.597299] rp1-cfe 1f00110000.csi: Registered [rp1-cfe-csi2_ch2] node id 2 successfully as /dev/video2
[   10.597320] rp1-cfe 1f00110000.csi: Registered [rp1-cfe-csi2_ch3] node id 3 successfully as /dev/video3
[   10.597345] rp1-cfe 1f00110000.csi: Registered [rp1-cfe-fe_image0] node id 4 successfully as /dev/video4
[   10.597364] rp1-cfe 1f00110000.csi: Registered [rp1-cfe-fe_image1] node id 5 successfully as /dev/video5
[   10.597388] rp1-cfe 1f00110000.csi: Registered [rp1-cfe-fe_stats] node id 6 successfully as /dev/video6
[   10.597407] rp1-cfe 1f00110000.csi: Registered [rp1-cfe-fe_config] node id 7 successfully as /dev/video7
[  240.263269] rp1-cfe 1f00110000.csi: Failed to start media pipeline: -32
Thanks in advance