Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Current »

In this guide, we will step-by-step guide you to use video camera OV5647 on SP7350 platforms.

Table of Contents

1 OV5647 Specification

  • 5MP Max photograph resolution (2592 x 1944 = 5,038,848 pixels)

  • Pixel Size: 1.4 x 1.4 μm

  • Optical size: 1/4"

  • Lens: f=3.6 mm, f/2.9

  • Viewing Angle: 54° x 41°

  • Max video resolution: 1080p@30fps

  • Max frame rate: 480p@90fps

  • Maximum exposure times (seconds): 0.97

  • Selectable video resolutions: 1080p@30fps, 720p@60fps, 480p@90fps

2 Setup

2.1 Enable OV5647 in Linux Kernel Configuration

1 Enter the kernel configuration by running the following command in the top directory of project.

make kconfig

2 Selects sub-menus: Device Drivers>Multimedia support>Media ancillary drivers>Camera sensor devices

image-20240227-023120.png

3 Select “OmniVision OV5647 sensor support” and press <Y>. Then save and exit.

2.2 Modify Device-tree Source

Device-tree source files of SP7350 are located in linux/kernel/arch/arm64/boot/dts/sunplus/.

Here lists all files for SP7350 boards:

Boards

Device-tree source files

C3V-W EVB

sp7350-ev.dts

Modify device tree source file to define OV5647 source for driver

2.2.1 Using SP7350 MIPI/CSI-RX4

Open OV5647_INT macro to add OV5647 node and link mipicsirx4.

2.2.2 Using SP7350 Other MIPI/CSI-RX

Define OV5647 node in i2c node:

i2c {
    #address-cells = <1>;
    #size-cells = <0>;

    ov5647: ov5647@36 {
 		compatible = "ovti,ov5647";
		reg = <0x36>;
		clocks = <&ov5647_clk>;
		avdd-supply = <&ov5647_avdd_2v8>;
		dovdd-supply = <&ov5647_dovdd_1v8>;
		dvdd-supply = <&ov5647_dvdd_1v5>;

        port {
            ov5647_out: endpoint {
                remote-endpoint = <&csi1_ep1>;
                data-lanes = <1 2>;
				clock-noncontinuous;
				link-frequencies = /bits/ 64 <297000000>;
            };
        };
    };
};

port: Should contain one endpoint sub-node used to model connection to the video receiver according to the specification defined in Documentation/devicetree/bindings/media/video-interfaces.txt.

Video receiver endpoint sub-node should defined in mipicsirx node. For example:

mipicsirx: csirx@f8005480 {
  port@0 {
	reg = <0>;

	/* MIPI CSI-2 bus endpoint */
	csi1_ep1: endpoint {
		remote-endpoint = <&ov5647_out>;
		bus-type = <4>;
		clock-lanes = <0>;
		data-lanes = <1 2>;
	};
  };

2.3 Compile and Burn

https://sunplus.atlassian.net/wiki/spaces/C3/pages/1988034774/A+guide+to+downloading+and+compiling+SP7350+code#7.-Build-code

2.4 Connect Sensor Module

Using C3V-W board MIPI/CSI-RX4, as follows:

2.5 Check

After the burning is completed, start the board. The system should print the following information through the serial port.

[    1.944413] sp-csi2 f8005480.csirx: 2 lanes found
[    1.944819] sp-vin f8005980.video: assigned reserved memory node mipicsirx@4f600000
[    1.948929] ov5647 0-0036: Consider updating driver ov5647 to match on endpoints
[    1.956573] sp-vin f8005980.video: Device VIN8 registered as video0
[    1.962544] sp-vin f8005980.video: SP VIN driver probed

After the system startup is completed, the video device can be viewed.

root@dbv3:~# ls /dev/video0
/dev/video0

3 Test

3.1 v4l2-ctl Command

This command is used to control V4L2 devices from the command line. It allows you to query device capabilities, set device parameters, and capture video and still image.

Use v4l2-ctl --all --device /dev/video0 command getting device all information.

root@dbv3:~# v4l2-ctl --all --device /dev/video0
Driver Info:
	Driver name      : sp_vin
	Card type        : SP_VIN
	Bus info         : platform:f8005980.video
	Driver version   : 5.10.201
	Capabilities     : 0xa5200001
		Video Capture
		Read/Write
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps      : 0x25200001
		Video Capture
		Read/Write
		Streaming
		Extended Pix Format
Media Driver Info:
	Driver name      : sp_vin
	Model            : sunplus,sp7350-vin
	Serial           : 
	Bus info         : platform:f8005980.video
	Media version    : 5.10.201
	Hardware revision: 0x00000000 (0)
	Driver version   : 5.10.201
Entity Info:
	ID               : 15
	Name             : VIN8 output
	Type             : V4L2 I/O
	Pad              : 0: Sink
Priority: 2
Video input : 0 (VIN8 output: ok)
Format Video Capture:
	Width/Height      : 640/480
	Pixel Format      : 'GBRG' (8-bit Bayer GBGB/RGRG)
	Field             : None
	Bytes per Line    : 640
	Size Image        : 307200
	Colorspace        : Raw
	Transfer Function : Default (maps to None)
	YCbCr/HSV Encoding: Default (maps to ITU-R 601)
	Quantization      : Default (maps to Full Range)
	Flags             : 

User Controls

        white_balance_automatic 0x0098090c (bool)   : default=0 value=0
                       exposure 0x00980911 (int)    : min=4 max=980 step=1 default=980 value=980
                 gain_automatic 0x00980912 (bool)   : default=0 value=0
                horizontal_flip 0x00980914 (bool)   : default=0 value=0 flags=modify-layout
                  vertical_flip 0x00980915 (bool)   : default=0 value=0 flags=modify-layout
                alpha_component 0x00980929 (int)    : min=0 max=255 step=1 default=255 value=255

Camera Controls

                  auto_exposure 0x009a0901 (menu)   : min=0 max=1 default=1 value=1

Image Source Controls

              vertical_blanking 0x009e0901 (int)    : min=24 max=32287 step=1 default=504 value=504
            horizontal_blanking 0x009e0902 (int)    : min=1256 max=1256 step=1 default=1256 value=1256 flags=read-only
                  analogue_gain 0x009e0903 (int)    : min=16 max=1023 step=1 default=32 value=32

Image Processing Controls

                     pixel_rate 0x009f0902 (int64)  : min=77291670 max=77291670 step=1 default=77291670 value=77291670 flags=read-only

3.2 Capture Image

3.2.1 Config Video Device

Use v4l2-ctl -d /dev/video0 --set-ctrl params=value setting device controls.

Enable auto_exposure:

v4l2-ctl -d /dev/video0 --set-ctrl auto_exposure=1

Enable gain_automatic

v4l2-ctl -d /dev/video0 --set-ctrl gain_automatic=1

Enable white_balance_automatic

v4l2-ctl -d /dev/video0 --set-ctrl white_balance_automatic=1

3.2.2 Capture

Use v4l2-ctl --list-formats-ext --device /dev/video0 querying device video format.

root@dbv3:~# v4l2-ctl --list-formats-ext --device /dev/video0
ioctl: VIDIOC_ENUM_FMT
	Type: Video Capture

	[0]: 'GBRG' (8-bit Bayer GBGB/RGRG)
		Size: Discrete 640x480
	[1]: 'GB10' (10-bit Bayer GBGB/RGRG)
		Size: Discrete 2592x1944
		Size: Discrete 1920x1080
		Size: Discrete 1296x972
		Size: Discrete 640x480
	[2]: 'pGAA' (10-bit Bayer GBGB/RGRG Packed)
		Size: Discrete 2592x1944
		Size: Discrete 1920x1080
		Size: Discrete 1296x972
		Size: Discrete 640x480

Use v4l2-ctl --stream capture image.

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=pGAA --stream-mmap=3 --stream-to=/home/root/ov5647.raw --stream-skip=9 --stream-count=1
  • --set-fmt-video=width=1920,height=1080,pixelformat=pGAA set image format

  • --stream-count <count> stream <count> buffers. The default is to keep streaming forever. This count does not include the number of initial skipped buffers as is passed by --stream-skip.

  • --stream-skip <count> skip the first <count> buffers. The default is 0.

  • --stream-to <file> stream to this file. The default is to discard the data. If <file> is '-', then the data is written to stdout and the --silent option is turned on automatically.

  • --stream-mmap <count> capture video using mmap() [VIDIOC_(D)QBUF] count: the number of buffers to allocate. The default is 3.

After executing the capture command, the stream data is written to /home/root/ov5647.raw.

3.3 Display Image Raw Data

3.3.1 Download and Install Raw Image Viewer

Download raw image viewer from PixelViewer | Carina Studio. And PixelViewer is an open source project based cross-platform image which viewer supports reading raw Luminance/YUV/RGB/ARGB/Bayer pixels data from file and rendering it.

3.3.2 Use PixelViewer to Open Image

Config render params by 3.2.2 v4l2-ctl capture command

  • No labels