5 megapixel (2592x1944) camera
Pixel Size: 1.4 x 1.4 μm
Optical size: 1/4"
Max video resolution: 2592x1944@15fps
Max frame rate: QVGA@120fps
Maximum exposure times (seconds): 0.97
Selectable video resolutions: 2592x1944@15fps 1080p@30fps, 720p@60fps, 480p@90fps
automatic image control functions: automatic exposure control (AEC), automatic white balance (AWB), automatic band filter (ABF), automatic 50/60 Hz luminance detection, and automatic black level calibration (ABLC)
support for output formats: RAW RGB, RGB565/555/444, CCIR656, YUV422/420, YCbCr422, and compression
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
3 Select “OmniVision OV5640 sensor support” and press <Y>. Then save and exit.
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 OV5640 source for driver
Open OV5640_IN4 macro to add OV5640 node and link mipicsirx4.
Define OV5640 node in i2c node:
i2c { #address-cells = <1>; #size-cells = <0>; ov5640: ov5640@3c { compatible = "ovti,ov5640"; reg = <0x3c>; clocks = <&ov5640_clk>; clock-names = "xclk"; AVDD-supply = <&ov5640_avdd_2p8v>; DOVDD-supply = <&ov5640_dovdd_1p8v>; DVDD-supply = <&ov5640_dvdd_1p5v>; port { ov5640_out: endpoint { remote-endpoint = <&csi1_ep1>; clock-lanes = <0>; data-lanes = <1 2>; }; }; }; }; |
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 = <&ov5640_out>; bus-type = <4>; clock-lanes = <0>; data-lanes = <1 2>; }; }; |
Using C3V-W board MIPI/CSI-RX4, as follows:
After the burning is completed, start the board. The system should print the following information through the serial port.
[ 1.905389] i2c /dev entries driver [ 2.857626] sp-csi2 f8005480.csirx: 2 lanes found [ 2.857963] sp-vin f8005980.video: assigned reserved memory node mipicsirx@4f400000 [ 2.862233] ov5640 0-003c: Consider updating driver ov5640 to match on endpoints [ 2.869821] sp-vin f8005980.video: Device VIN8 registered as video0 [ 2.875882] 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 |
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 : 1280/720 Pixel Format : 'UYVY' (UYVY 4:2:2) Field : None Bytes per Line : 2560 Size Image : 1843200 Colorspace : sRGB Transfer Function : sRGB YCbCr/HSV Encoding: ITU-R 601 Quantization : Full Range Flags : User Controls contrast 0x00980901 (int) : min=0 max=255 step=1 default=0 value=0 flags=slider saturation 0x00980902 (int) : min=0 max=255 step=1 default=64 value=64 flags=slider hue 0x00980903 (int) : min=0 max=359 step=1 default=0 value=0 flags=slider white_balance_automatic 0x0098090c (bool) : default=1 value=1 flags=update red_balance 0x0098090e (int) : min=0 max=4095 step=1 default=0 value=0 flags=inactive, slider blue_balance 0x0098090f (int) : min=0 max=4095 step=1 default=0 value=0 flags=inactive, slider exposure 0x00980911 (int) : min=0 max=1276 step=1 default=560 value=0 flags=inactive, volatile gain_automatic 0x00980912 (bool) : default=1 value=1 flags=update horizontal_flip 0x00980914 (bool) : default=0 value=0 vertical_flip 0x00980915 (bool) : default=0 value=0 power_line_frequency 0x00980918 (menu) : min=0 max=3 default=1 value=1 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=0 value=0 flags=update focus_automatic_continuous 0x009a090c (bool) : default=0 value=1 Image Source Controls vertical_blanking 0x009e0901 (int) : min=24 max=2655 step=1 default=560 value=560 horizontal_blanking 0x009e0902 (int) : min=320 max=320 step=1 default=320 value=320 flags=read-only analogue_gain 0x009e0903 (int) : min=0 max=1023 step=1 default=0 value=0 flags=inactive, volatile Image Processing Controls link_frequency 0x009f0901 (intmenu): min=0 max=22 default=13 value=18 flags=read-only pixel_rate 0x009f0902 (int64) : min=48000000 max=168000000 step=1 default=48000000 value=62000000 flags=read-only test_pattern 0x009f0903 (menu) : min=0 max=4 default=0 value=0 |
Use v4l2-ctl -d /dev/video0 --set-ctrl params=value setting device controls.
If your OV5640 module supports autofocus, you can execute the following command to enable it.
v4l2-ctl -d /dev/video0 --set-ctrl focus_automatic_continuous=1 |
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]: 'UYVY' (UYVY 4:2:2) Size: Discrete 640x480 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) Size: Discrete 720x480 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) Size: Discrete 720x576 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) Size: Discrete 1024x768 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) Size: Discrete 1280x720 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) Size: Discrete 1920x1080 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) Size: Discrete 2592x1944 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) [2]: 'BA81' (8-bit Bayer BGBG/GRGR) Size: Discrete 1280x720 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) Size: Discrete 1920x1080 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) Size: Discrete 2592x1944 Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.017s (60.000 fps) |
Use v4l2-ctl --stream
capture UYVY format image.
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=720,pixelformat=UYVY --stream-mmap=3 --stream-to=/home/root/OV5640_UYVY_720P.yuv --stream-skip=9 --stream-count=1 |
--set-fmt-video=width=1280,height=720,pixelformat=UYVY
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/OV5640_UYVY_720P.yuv
.
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.
Config render params by 3.2.2 v4l2-ctl capture command