VOXL2 IMX412 Camera "Received 0 buffers" Error
-
Hello,
I'm experiencing a "Received 0 buffers" error with my VOXL2 IMX412 camera. The camera is detected but no video output is being generated.
Hardware Configuration:
- VOXL2 Board: M0054 (MCCA-M0054-C26-T0-M0-X0)
- Camera: IMX412 M0107 (ModalAI)
- Slot: J7L (slot 2)
- Cable: M0036
- Gender: M0076
- SDK: 1.4.5
- System Image: 1.8.02
Problem:
voxl-camera-server detects the camera but no image data is being transmitted and no video output is generated.Symptoms:
- Camera detection:
"Number of cameras: 1"
- HAL3 module:
Successfully opened
- Stream setup:
Successfully configured
- GBM buffers:
16 buffers allocated
- Image data:
"Received 0 buffers" error
- Video output:
No video stream generated
- VOXL Portal:
Empty Debug Stats table
Troubleshooting Attempted:
- Replaced all hardware (board, camera, cable, gender)
- Tested various software configurations
- System reboots
- Sensor module files verification and correction
- I2C communication confirmed
- Power supply confirmed stable
Key Debug Output:
Full Debug Output (voxl-camera-server -d0):
detected system image 1.8.2
using new imx412 defaultsconfiguration for 1 cameras:
cam #0
name: hires
sensor type: imx412
isEnabled: 1
camId: 0
camId2: -1
fps: 30
en_rotate: 0
en_rotate2: 0
en_preview: 1
pre_width: 640
pre_height: 480
en_raw_preview: 0
en_small_video: 0
small_video_width: 1024
small_video_height: 768
en_large_video: 0
large_video_width: 4056
large_video_height: 3040
en_misp: 0
misp_width: -1
misp_height: -1
en_snapshot: 0
snap_width: 4056
snap_height: 3040
exif_focal_length: 3.100000
exif_focal_len_35mm_format:17
exif_fnumber: 1.240000
ae_mode: isp
msv_exposure_min_us: 20
msv_exposure_max_us: 33000
gain_min : 54
gain_max : 8000
standby_enabled: 0
decimator: 1
independent_exposure:0
fsync_en: 0
fsync_gpio: 109DEBUG: Attempting to open the hal module
DEBUG: SUCCESS: Camera module opened on attempt 0
DEBUG: ----------- Number of cameras: 1
VERBOSE: cci-direct: using voxl_platform_mod config 1 and 2 layout
DEBUG: Cam idx: 0, Cam slot: 2, Slave Address: 0x0034, Sensor Id: 0x0577
thread is locked to cores: 4 5 6 7
connected to mavlink pipe
Connected to cpu-monitor
DEBUG: ------ voxl-camera-server: Starting 1 cameras
Starting Camera: hires (id #0)
DEBUG: Checking Gain limits for Camera: hires
DEBUG: Using gain limits min: 100 max: 8000
DEBUG: cam ID 0 checking for fmt: 35 w: 640 h: 480 o: 0
[format options list...]
VERBOSE: Successfully found configuration match for camera 0: 640x480
VERBOSE: Adding preview stream for camera: 0
DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000
VERBOSE: Dumping GBM flags
DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI
DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI
VERBOSE: Opened GBM fd
gbm_create_device(156): Info: backend name is: msm_drm
VERBOSE: Created GBM device
[16 buffer allocations...]
DEBUG: Successfully set up pipeline for stream: PREVIEW
VERBOSE: Entered thread: cam0-request(tid: 2861)
VERBOSE: Entered thread: cam0-result(tid: 2862)
DEBUG: Started Camera: hires
------ voxl-camera-server: Started 1 of 1 cameras
------ voxl-camera-server: Camera server is now running
VERBOSE: added request for preview stream
VERBOSE: Sending request for frame 0 for camera hires for 1 streams
VERBOSE: Received result from HAl3 for frame number 0
VERBOSE: Received 0 buffers from camera hires, partial result:1
VERBOSE: finished sending request for frame 0 for camera hires
VERBOSE: returning from SendOneCaptureRequest for frame 1 for camera hires
VERBOSE: added request for preview stream
VERBOSE: Sending request for frame 1 for camera hires for 1 streams
VERBOSE: finished sending request for frame 1 for camera hires
VERBOSE: returning from SendOneCaptureRequest for frame 2 for camera hires
VERBOSE: added request for preview stream
VERBOSE: Sending request for frame 2 for camera hires for 1 streams
VERBOSE: finished sending request for frame 2 for camera hires
VERBOSE: returning from SendOneCaptureRequest for frame 3 for camera hires
VERBOSE: added request for preview stream
VERBOSE: Sending request for frame 3 for camera hires for 1 streams
VERBOSE: finished sending request for frame 3 for camera hires
VERBOSE: returning from SendOneCaptureRequest for frame 4 for camera hires
VERBOSE: added request for preview stream
VERBOSE: Sending request for frame 4 for camera hires for 1 streams
VERBOSE: finished sending request for frame 4 for camera hires
VERBOSE: returning from SendOneCaptureRequest for frame 5 for camera hires
VERBOSE: added request for preview stream
VERBOSE: Sending request for frame 5 for camera hires for 1 streams
VERBOSE: Received result from HAl3 for frame number 1
VERBOSE: Received 0 buffers from camera hires, partial result:1
VERBOSE: Received result from HAl3 for frame number 2
VERBOSE: Received 0 buffers from camera hires, partial result:1
DEBUG: Value of standby_active is: 0
DEBUG: Value of standby_active is: 0
DEBUG: Value of standby_active is: 0
DEBUG
...
Let me reevaluate and take a different approach.
-
@ysc , can you please provide the end of the output from
dmesg
when you attempt to start the camera?And just to confirm, you tried using a different IMX412 camera (of the same type) and a different M0036 Flex cable?
In the past we have seen that some flex cables (may be out of spec) do not work well with IMX412 camera. We can test this with a special camera driver (sensormodule), which will use the camera in very low MIPI bit rate. However, before we do that, can you please provide the output of
dmesg
when this failure happens?Also, did this camera + flex configuration work before, or this is the first time you are testing it and it is not working?
Thank you
Alex
-
Thank you for your response. I have conducted the tests you suggested:
Test Results:
-
Direct connection (without M0036 extension cable):
SUCCESS: Camera works perfectly when connected directly to VOXL2
IMX412 camera is properly detected and functioning
No MIPI CSI lane overflow errors
Camera server reports cameras connected successfully
-
M0036 extension cable test:
FAILURE: Both M0036 extension cables I have exhibit the same problem
MIPI CSI lane overflow errors occur with both cables
Camera server reports "Found zero cameras connected"
Hardware Configuration:
- VOXL2 QRB5165M
- IMX412 camera module (M0107)
- Tested with 2 different M0036 extension cables
- Using official connectors, ports, and cables
Previous Experience:
I have used this same IMX412 + M0036 configuration before and it worked successfully. This suggests that the M0036 extension cables may have degraded over time or there might be a batch issue with the cables.
https://forum.modalai.com/topic/4461/voxl2-didn-t-detect-imx412-camera/7?_=1757372933541Questions:
- Since both of my M0036 extension cables are exhibiting the same MIPI CSI lane overflow issues, should I purchase new M0036 cables?
- Are there any known issues with M0036 cable degradation over time?
- Is there a way to test the M0036 cables independently to confirm they are the root cause?
- Would you recommend any specific M0036 cable suppliers or should I purchase directly from ModalAI?
Thank you for your help in diagnosing this issue.
-
-
@ysc ,
the "fpv" version of the IMX412 driver uses the fastest camera MIPI bit rate at 2.1 Gbit/s per lane. The M0036 cables, when designed, were not tested under these conditions, since the camera driver update came recently and the test was not available.
Can you please try to use the IMX412 sensormodule from
/usr/share/modalai/chi-cdk/imx412/com.qti.sensormodule.imx412_2.bin
instead of the FPV variant of the driver? (you will need to remove thecom.qti.sensormodule.imx412_fpv_2.bin
file from/usr/lib/camera/
.The older driver streams the camera data at a lower rate, I believe 1.5Gbit/s. Please let me know if this change works for you.
Regarding the cable supplier and degradation - we have not encountered cable degradation over time, however some cables may be slightly out of spec for this fastest MIPI bit rate. Also, we do not have other suppliers for the M0036, so you should purchase from ModalAI. However, lets figure out if there is a software solution first.
Also, what is the final resolution of the image and FPS that you need for your application? Lower resolutions require less bandwidth and we could lower the bitrate even more if that helps.
Alex
-
Final Update on M0036 Extension Cable Issue:
Actions Taken (Following Your Recommendations):
Removed FPV driver (2.1Gbps):
com.qti.sensormodule.imx412_fpv_2.bin
Using lower bitrate driver (1.5Gbps):
com.qti.sensormodule.imx412_2.bin
Tested with 720p 30fps configuration (lower resolution as suggested)
Test Results:
Direct connection: Works perfectly with 1.5Gbps driver
M0036 extension cable: Still fails with "Received 0 buffers from camera hires"
Current Status:
Even after implementing your suggested solution (1.5Gbps driver + 720p resolution), the M0036 cable cannot handle IMX412 data transmission. The camera is detected, streams are configured successfully, but no data is transmitted through the cable.Application Requirements:
- Target resolution: 720p (1280x720) for PC streaming
- Frame rate: 30fps
- Use case: Real-time video streaming from VOXL2 to PC
The M0036 extension cable appears to have compatibility issues with IMX412 even with the lower bitrate driver and reduced resolution settings.
Thank you for your continued support.
-
@ysc ,
Thank you for performing the tests. It is possible that the cables were damaged, since they were working originally, it seems, even with the "fpv" version of the drivers.
Regarding the output resolution vs camera mode, the best way to find out which resolution the camera is actually streaming is to run the following before you start
voxl-camera-server
:logcat | grep -i selected
The output should be something like this (may look slightly different in your case):
03-02 13:03:06.847 3338 3338 I CHIUSECASE: [CONFIG ] chxextensionmodule.cpp:2358 InitializeOverrideSession() Session_parameters FPS range 30:30, previewFPS 0, videoFPS 0 BatchSize: 1 HALOutputBufferCombined 0 FPS: 30 SkipPattern: 1, cameraId = 0 selected use case = 1 03-02 13:03:06.852 3338 3338 I CHIUSECASE: [CONFIG ] chxsensorselectmode.cpp:558 FindBestSensorMode() MAI: Selected Usecase: 7, SelectedMode W=4056, H=3040, FPS:30, NumBatchedFrames:0, modeIndex:0
this tells you that the camera mode 4056x3040 @ 30 FPS was selected from the several modes that the sensormodule driver provides. Since you have selected the ISP processing in your config file, the default logic in the camera pipeline will select highest resolution camera mode and then down-scale in the ISP (for highest quality). So, even though you were selecting 1280x720 output, it is most likely that the camera was still running in full resolution mode (you can check).
In any case, there is an issue with the flex cables. One last thing, I just wanted to confirm that you are NOT connecting two M0036 flexes back-to-back (to make a longer cable), because that is not guaranteed to work due to the length.
If the single M0036 cables are not working, then we will replace them for free. Please submit an RMA request (www.modalai.com/rma) and ask for QTY 2 free replacement M0036 cables (include a link to this thread)
Alex
-
Thank you for your detailed response and suggestions. Here's an update on the current situation:
Current Status:
Camera is now working properly with video output
VOXL Portal shows live video feed
FPS: 10, Resolution: 640x480
Camera streams: hires_color and hires_grey are both functional
Regarding your suggestions:
-
Cable Status: I am using a single M0036 cable (no extension).
-
logcat Command: The
logcat | grep -i selected
command doesn't work on VOXL2.
Current Configuration:
- IMX412 camera in J7L slot (slot 2)
- Single M0036 cable, no extensions
- Preview stream: 640x480 @ 10 FPS
- Camera server: running successfully
Thank you for your help in resolving this issue!
-
@ysc , I am glad that the camera is working, but could you clarify what you changed to make it work? You should be able to get higher resolution and FPS if everything is working properly.
Also, if the
logcat
outout is not showing up, it is probably because the logging from camera pipeline is disabled in the following file :/vendor/etc/camera/camxoverridesettings.txt
:systemLogEnable=0
If that is set to zero, you can just comment out that parameter and try again.
Alex