Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

1. IMX219 specification

The Raspberry Pi Camera Module 2 is used here. The pin definition of the SP7350 EV board’s MIPI-CSI RX connectors is compatible with this camera. The camera mounts directly to our SP7350 EV board.

  • Back-illuminated CMOS image sensor Exmor RTM

  • 2-wire serial communication circuit on chip

  • CSI2 serial data output (selection of 4lane/2lane)

  • Timing generator, H and V driver circuits on chip

  • CDS/PGA on chip

  • 10-bit A/D converter on chip

  • Automatic optical black (OB) clamp circuit on chip

  • PLL on chip (rectangular wave)

  • High sensitivity, low dark current, no smear

  • Excellent anti-blooming characteristics

  • Variable-speed shutter function (1 H units)

  • R, G, B primary color pigment mosaic filters on chip

  • Max. 30 frame/s in all-pixel scan mode

  • Pixel rate: 280 [Mpixel/s] (All-pixels mode)

  • 180 frame/s @720p with 2x2 analog (special) binning, 60 frame/s @1080p with V-crop

  • Data rate: Max. 755 Mbps/lane(@4lane), 912Mbps/Lane(@2lane)

2. Setup a SP7350 platform

The Raspberry Pi Camera Module 2 is used here. The v2 Camera Module has a Sony IMX219 8-megapixel sensor. The pin definition of the SP7350 EV board’s MIPI-CSI RX connectors is compatible with this module. The module mounts directly to our SP7350 EV board.

2.1.  Enable IMX219 driver in Kernel configuration

Please follow the steps below.

Step 1: Enter kernel configuration

Code Block
languagebash
# cd ./linux/kernel
# make menuconfig

Step 2: Selects submenus: Device Drivers > Multimedia support > Media ancillary drivers > Camera sensor devices

Step 3: Select Sony IMX219 sensor support and pressing <Y> includes. And 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 IMX219 source for driver. We had added some compiler switches for IMX219 camera in the beginning of sp7350-ev.dts. These compiler switches are turned off by default. They are shown below. You can turn it on based on your usage. For example, if an IMX219 camera is connected to MIPI-CSI RX4 port, the compiler switch IMX219_IN4 should be turned on.

Code Block
//#define IMX219_IN0
//#define IMX219_IN1
//#define IMX219_IN2
//#define IMX219_IN3
//#define IMX219_IN4
//#define IMX219_IN5

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

A Raspberry Pi Camera Module 2 is connected to MIPI-CSI RX4 port on C3V-W board. It’s shown below.

2.5.  Check

After the burning is completed, start the board. The probing logs for MIPI-CSI RX and VIN drivers can be found. It’s as follows. The video device video0 has been successfully registered.

Code Block
[    1.333642] sp-csi2 f8005480.csirx: 2 lanes found
[    1.338482] sp-vin f8005980.video: assigned reserved memory node mipicsirx@4f600000
[    1.345864] imx219 0-0010: Consider updating driver imx219 to match on endpoints
[    1.353444] sp-vin f8005980.video: Device VIN8 registered as video0
[    1.359496] sp-vin f8005980.video: SP VIN driver probed

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

Code Block
~ # ls /dev/video0
/dev/video0

3. Test

The v4l2-ctl application is used here. V4l2-ctl is a command line tool for controlling video devices on Linux systems.

3.1.  Display video device information

Running ‘v4l2-ctl –all-device‘ command displays all information about the video device video0. The results are as follows.

Code Block
~ # 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
Interface Info:
        ID               : 0x03000011
        Type             : V4L Video
Entity Info:
        ID               : 0x0000000f (15)
        Name             : VIN8 output
        Function         : V4L2 I/O
        Pad 0x01000010   : 0: Sink
          Link 0x02000013: from remote pad 0x1000003 of entity 'sp_csi2 f8005480.csirx' (Video Pixel Formatter): Data, Enabled
Priority: 2
Video input : 0 (VIN8 output: ok)
Format Video Capture:
        Width/Height      : 640/480
        Pixel Format      : 'RG10' (10-bit Bayer RGRG/GBGB)
        Field             : None
        Bytes per Line    : 1280
        Size Image        : 614400
        Colorspace        : sRGB
        Transfer Function : sRGB
        YCbCr/HSV Encoding: ITU-R 601
        Quantization      : Full Range
        Flags             :


User Controls

                       exposure 0x00980911 (int)    : min=4 max=1759 step=1 default=1600 value=1600
                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

Image Source Controls

              vertical_blanking 0x009e0901 (int)    : min=4 max=65055 step=1 default=1283 value=1283
            horizontal_blanking 0x009e0902 (int)    : min=2808 max=2808 step=1 default=2808 value=2808 flags=read-only
                  analogue_gain 0x009e0903 (int)    : min=0 max=232 step=1 default=0 value=0
                red_pixel_value 0x009e0904 (int)    : min=0 max=1023 step=1 default=1023 value=1023
          green_red_pixel_value 0x009e0905 (int)    : min=0 max=1023 step=1 default=1023 value=1023
               blue_pixel_value 0x009e0906 (int)    : min=0 max=1023 step=1 default=1023 value=1023
         green_blue_pixel_value 0x009e0907 (int)    : min=0 max=1023 step=1 default=1023 value=1023

Image Processing Controls

                     pixel_rate 0x009f0902 (int64)  : min=182400000 max=182400000 step=1 default=182400000 value=182400000 flags=read-only
                   test_pattern 0x009f0903 (menu)   : min=0 max=4 default=0 value=0 (Disabled)
                                0: Disabled
                                1: Color Bars
                                2: Solid Color
                                3: Grey Color Bars
                                4: PN9
                   digital_gain 0x009f0905 (int)    : min=256 max=4095 step=1 default=256 value=256

3.2.  List supported video format and resolution

Running ‘v4l2-ctl –list-format-ext’ command lists the supported video format and resolution of the video device vidoe0. The results are as follows.

Code Block
~ # v4l2-ctl --list-formats-ext --device /dev/video0
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'RG10' (10-bit Bayer RGRG/GBGB)
                Size: Discrete 3280x2464
                Size: Discrete 1920x1080
                Size: Discrete 1640x1232
                Size: Discrete 640x480
        [1]: 'pRAA' (10-bit Bayer RGRG/GBGB Packed)
                Size: Discrete 3280x2464
                Size: Discrete 1920x1080
                Size: Discrete 1640x1232
                Size: Discrete 640x480
        [2]: 'RGGB' (8-bit Bayer RGRG/GBGB)
                Size: Discrete 3280x2464
                Size: Discrete 1920x1080
                Size: Discrete 1640x1232
                Size: Discrete 640x480

3.3.  Configure camera

Running ‘v4l2-ctl –get-ctrl’ gets the value of the controls. Running ‘v4l2-ctl –set-ctrl’ sets the value of the controls. The results are as follows.

Code Block
~ # v4l2-ctl --get-ctrl digital_gain
digital_gain: 256
~ # v4l2-ctl --set-ctrl digital_gain=2048
~ # v4l2-ctl --get-ctrl digital_gain
digital_gain: 2048

3.4.  Capture image

Running following command capture a RAW8 picture. The pixel format RGGB means 8-bit Bayer RGRG/GBGB.

Code Block
languagebash
~ # v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=RGGB --stream-mmap=3 --stream-to=/root/imx219.raw --stream-count=1

The following is the description of these parameters.

-d <device>: Set video device

--set-fmt-video=width=<width>,height=<height>,pixelformat=<format>: Set image format

--stream-mmap <count>: The number of buffers to allocate. The default is 3.

--stream-to <file>: The captured image is saved to this file.

--stream-count <count>: How many images to capture.

4. Display image

The PixelViewer application is used here. PixelViewer is an open source project based cross-platform image viewer. You can download it from it’s website.

https://carinastudio.azurewebsites.net/PixelViewer/

Use PixelViewer to open the image file ‘imx219.raw’. Please follow the steps below to configure PixelViewer.

Step 1: Set ‘Format’ to Byer Pattern (8-bit)

Step 2: Set ’Bayer pattern’ to RGGB (2x2)

Step 3: Set ‘Dimension (px)’ to 1920 x 1080