MIPI CSI Use
Onboard resources
The AIO-3288C development board has the MIPI camera interface. The
camera’s image processing capability reaches 4416x3312 pixels and
supports 4K video recording. In addition, the development board also
supports a USB camera.
This article takes the OV13850 camera as an example to explain the
configuration process of the MIPI camera on the development board.
Related code catalog
The code catalog related to camera is as follows:
Android:
`- hardware/rockchip/camera
|- Config
| `- cam_board.xml // parameter setting of camera
|- CameraHal // HAL source code of camera
`- SiliconImage // ISP library, including all drivers source codes supporting module
`- isi/drv/OV13850 // Driver source code of OV13850 module
`- calib/OV13850.xml // Adjustment parameters of OV13850 module
Kernel:
|- kernel/drivers/media/video/rk_camsys // CamSys driver source code
`- kernel/include/media/camsys_head.h
Configuration principles
Set camera-related pin and clock to complete the configuration
process.
According to the schematic diagram of camera port below, the pins to
be configured include: CIF_PWR, MIPI_PWR, MIPI_SDA, MIPI_SCL, MIPI_RST
and CIF_PDN0.
CIF_PWR corresponds to GPIO7_B4 pin on AIO-3288C:
MIPI_PWR and MIPI_RST correspond to GPIO3_B2 and GPIO3_B0 pins on AIO-
3288C, the default of which is high level:
MIPI_SDA and MIPI_SCL are controlled by CIF_PWR:
CIF_PDN0 corresponds to GPIO2_B6 pin:
In the development board, except for CIF_POWER and DVP_POWER which
shall be set on DTS and driver, the other pins shall be set on
{AND_MIPI_CSI_XML}.
Configuration steps
Configure Android
Modify "hardware/rockchip/camera/Config/cam_board_rk3288_aio-
3288c.xml" to register camera:
The main modified contents are as follows:
Sensor name
This name must coincide to the name of Sensor driver, and the format
of Sensor driver currently provided is as follows:
libisp_isi_drv_OV13850.so
The user can find the driver file of this camera under the catalog
"out/target/product/rk3288_aio_3288j_box/system/lib/hw/" after
completing Android compilation.
Sensor software identification
Any inconsistent registration identification is okay, the following
value can be filled in:
CAMSYS_DEVID_SENSOR_1A
CAMSYS_DEVID_SENSOR_1B
CAMSYS_DEVID_SENSOR_2
Name of acquisition controller
At present, it only supports:
CAMSYS_DEVID_MARVIN
Number of I2C channel connected to master control of Sensor
For the specific channel number, please refer to the number of I2C
channel connected to master control on the schematic diagram of
camera.
Sensor register address size, unit: bytes
I2C frequency of Sensor, unit: Hz, which is used for setting I2C
frequency.
Sensor input clock frequency, unit: Hz, which is used for setting
camera clock.
PMU LDO name of Sensor AVDD. If it cannot be connected to PMU, fill in
NC only.
PMU LDO name of Sensor DOVDD.
If it is not connected to PMU, fill in NC only. The values of min and
max must be filled in, which decide the IO voltages of Sensor.
PMU LDO name of Sensor DVDD.
If it is not connected to PMU, fill in NC only.
Sensor PowerDown pin.
Directly fill in the name, and fill in the active level of sleep in
active field.
Sensor Reset pin.
Directly fill in the name, and fill in the active level of reset in
active field.
Sensor Power pin.
Directly fill in the name, and fill in the active level of power in
active field.
Select front or back for the Sensor.
"Front" or "back" can be filled in.
Sensor interface mode
The following value can be filled in:
CCIR601
CCIR656
MIPI
SMIA
Sensor image mode
Do not support at present.
Sensor angle information
Physical interface settings MIPI
phyMode: Sensor port hardware connection mode, for MIPI Sensor, this
value shall take "CamSys_Phy_Mipi"
lane: number of data channels in Sensor mipi interface
phyIndex: mipi phy number of master control connected to Sensor mipi
sensorFmt: Sensor output data format, which only supports
CamSys_Fmt_Raw_10b at present
Configuration kernel
The configuration principles mention that GPIO7_B4 should be
configured in DTS and driver. The configuration methods are as
follows:
(1). Add GPIO7_B4 configuration properties in DTS file
Add gpios-cifpower property in "kernel/arch/arm/boot/dts/rk3288.dtsi"
file, as shown below:
isp: isp@ff910000{
compatible = "firefly,isp";
...
gpios-cifpower = ;
...
status = "okay";
};
(2). Configure CIF_POWER in driver
Read gpios-cifpower in
"kernel/drivers/media/video/rk_camsys/camsys_drv.c", set this pin,
enable CIF_POWER, and add in probe function camsys_platform_probe(),
as shown below:
enum of_gpio_flags flags;
int cifpower_io;
int io_ret;
cifpower_io = of_get_named_gpio_flags(dev->of_node, "gpios-cifpower", 0, &flags);
camsys_trace(1, "1-gpios-cifpower: gpio=%d", cifpower_io);
if(gpio_is_valid(cifpower_io)){
cifpower_io = of_get_named_gpio_flags(dev->of_node, "gpios-cifpower", 0, &flags);
camsys_trace(1, "gpios-cifpower: gpio_request");
io_ret = gpio_request(cifpower_io,"cifpower");
camsys_trace(1, "1-gpios-cifpower: gpio_request=%d", io_ret);
if(io_ret < 0){
camsys_err("Request %s(%d) failed","cifpower", cifpower_io);
}
else{
gpio_direction_output(cifpower_io, 1);
gpio_set_value(cifpower_io, 1);
camsys_trace(1, "gpios-cifpower: %d high", cifpower_io);
}
}
(3). Compile kernel
Compile the driver source code "drivers/media/video/rk_camsys" into
the kernel; its configuration methods are as follows:
Execute command under kernel source code catalog:
make menuconfig
Then, open the following configuration item:
Device Drivers --->
Multimedia support --->
camsys driver
RockChip camera system driver --->
camsys driver for marvin isp
camsys driver for cif
Finally, execute:
make firefly-rk3288-aio-3288c.img
The compilation of kernel is completed.