Hi all,
I'm trying to configure ov5640 camera on the i.MX8MM platform to work in RAW 10-bit mode.
I'm using a custom board board with Android based on the p9.0.0-1.0.0_ga release from NXP.
I configured the ov5640 to work in 10-bit mode and output RAW BGGR format by setting the following registers in the camera driver (ov5640_mipi_v2.c):
{0x3034, 0x1A, 0, 0}, // MIPI mode: 10-bit
{0x4300, 0x00, 0, 0}, // Output data format: RAW BGGR
{0x501F, 0x03, 0, 0}, // ISP Format: ISP RAW (DPC)
I also added the RAW 10 media bus format to the supported colour formats in the ov5640 driver:
static const struct ov5640_datafmt ov5640_colour_fmts[] = {{MEDIA_BUS_FMT_YUYV8_2X8, V4L2_COLORSPACE_JPEG},{MEDIA_BUS_FMT_SBGGR10_1X10, V4L2_COLORSPACE_RAW}};
I added support for the V4L2_PIX_FMT_SBGGR10 format in mx6s_capture.c driver. I also configured the following registers, based on what is reported in the i.MX8M Mini reference manual:
- CSI_CSICR1: set bit 0 (PIXEL_BIT) to 1 (i.e. 10-bit per pixel)
- CSI_CSICR18: set bits 25~30 (MIPI_DATA_FORMAT) to 0x2B (i.e. RAW10 format)
With this configuration, resulting raw image is very noisy (see attached image).
By looking at the interrupts, I can see multiple `32e30000.mipi_csi` interrupts firing when the frame is captured. By enabling additional debug in the mxc_mipi_csi.c driver, I noticed these interrupts signal multiple errors on the bus:
[ 84.310700] ov5640_mipisubdev 5-003c: s_stream: 1
[ 84.380096] CRC Error: 1
[ 84.382639] Frame Start: 1
[ 84.385425] CRC Error: 2
[ 84.387986] CRC Error: 3
[ 84.390568] CRC Error: 4
[ 84.393153] CRC Error: 5
[ 84.395735] CRC Error: 6
[ 84.398313] CRC Error: 7
[ 84.400885] CRC Error: 8
[ 84.403464] CRC Error: 9
[ 84.406022] CRC Error: 10
[ 84.408675] CRC Error: 11
[ 84.411343] CRC Error: 12
[ 84.413980] CRC Error: 13
[ 84.416643] CRC Error: 14
[ 84.419305] CRC Error: 15
[ 84.421947] CRC Error: 16
[ 84.424624] CRC Error: 17
[ 84.427278] Lost Frame Start Error: 1
[ 84.430944] CRC Error: 18
[ 84.433563] Frame End: 1
Do you have any advice on how to further debug this issue? Is there any other register I'm missing for configuring 10-bit mode for the MIPI CSI bus?
Any help would be appreciated.
Thanks,
Laura
Hi Laura
one can try with linux
linux/arch/arm64/boot/dts/freescale/fsl-imx8mm-evk.dts
fsl-imx8mm-evk.dts\freescale\dts\boot\arm64\arch - linux-imx - i.MX Linux kernel
https://community.nxp.com/thread/505857
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Hi Igor,
Thanks for your reply.
I tried switching to Linux and capturing some RAW8 and RAW10 frames using v4l-utils as follows:
v4l2-ctl -d /dev/video0 --verbose --set-fmt--video=width=2592,height=1944,pixelformat=BA81 --stream-mmap --stream-count=1 --stream-to=raw8_2592x1944.raw
v4l2-ctl -d /dev/video0 --verbose --set-fmt-video=width=2592,height=1944,pixelformat=BG10 --stream-mmap --stream-count=1 --stream-to=raw10_2592x1944.raw
Unfortunately raw images are still not looking right (see screenshots attached, after I converted the raw captures from bayer to rgb). CRC errors like the ones below are reported in the kernel log when the frame is captured, both for 8-bit and 10-bit formats:
6,15197,289730726,-;mxc_mipi-csi.0: CRC Error: 1
6,15198,289730734,-;mxc_mipi-csi.0: Frame Start: 1
6,15199,289730738,-;mxc_mipi-csi.0: status: 01000002
6,15200,289730773,-;mxc_mipi-csi.0: CRC Error: 2
6,15201,289730778,-;mxc_mipi-csi.0: status: 00000002
6,15202,289730795,-;mxc_mipi-csi.0: CRC Error: 3
6,15203,289730799,-;mxc_mipi-csi.0: status: 00000002
6,15204,289730809,-;mxc_mipi-csi.0: CRC Error: 4...
Do you have any insight on what might be causing these CRC errors on Linux during 8-bit raw capture too?
On the board I'm using, different drivers are selected for ov5640 and MIPI CSI controller than the one for the imx8mm-evk, specifically ov5640_mipi_v2, mx6s_capture and mxc_mipi_csi. Apart from this, configuration for the csi endpoint in the device tree looks pretty much the same as the one in the imx8mm-evk dt.
As for the discussion on the second link, I already modified the register suggested for enabling bayer format (cr18 register).
Are you aware of any specific PLL configuration for 10-bit MIPI mode? Not sure, but I'm guessing that might be a possible cause for the images being corrupted.
Thanks for your help,
Best,
Laura