项目场景:
使用了赛威思 XC6130, XC7022模组,双mipi yuv输出
XC7022使用 i2c7通信, XC6130使用i2c6通信
一、MIPI驱动添加
1. rk3399hal层代码结构
hardware/rockchip/camera/CameraHal //camera hal层应用代码
hardware/rockchip/camera/Config //camera 前后置摄像头,旋转角度等参数配置
hardware/rockchip/camera/SiliconImage //camera驱动代码
使用的两个摄像头模组厂商提供了 sensor驱动,我们只需要添加到对应目录下,然后调试
2. sensor模组配置
以XC7022为例, 配置 cam_board_rk3399.xml
<Sensor>
<SensorName name="XC7022" ></SensorName>
<SensorDevID IDname="CAMSYS_DEVID_SENSOR_1A"></SensorDevID>
<SensorHostDevID busnum="CAMSYS_DEVID_MARVIN" ></SensorHostDevID>
<SensorI2cBusNum busnum="6"></SensorI2cBusNum>
<SensorI2cAddrByte byte="2"></SensorI2cAddrByte>
<SensorI2cRate rate="100000"></SensorI2cRate>
<SensorAvdd name="NC" min="0" max="0" delay="0"></SensorAvdd>
<SensorDovdd name="NC" min="0" max="0" delay="0"></SensorDovdd>
<SensorDvdd name="NC" min="0" max="0" delay="0"></SensorDvdd>
<SensorMclk mclk="27000000" delay="0"></SensorMclk>
<SensorGpioPwen ioname="NC" active="1" delay="1000"></SensorGpioPwen>
<SensorGpioRst ioname="RK30_PIN2_PA2" active="0" delay="1000"></SensorGpioRst>
<SensorGpioPwdn ioname="NC" active="0" delay="1000"></SensorGpioPwdn>
<SensorFacing facing="back"></SensorFacing>
<SensorInterface interface="MIPI"></SensorInterface>
<SensorMirrorFlip mirror="0"></SensorMirrorFlip>
<SensorOrientation orientation="90"></SensorOrientation>
<SensorPowerupSequence seq="1234"></SensorPowerupSequence>
<SensorFovParemeter h="60.0" v="60.0"></SensorFovParemeter>
<SensorAWB_Frame_Skip fps="0"></SensorAWB_Frame_Skip>
<SensorPhy phyMode="CamSys_Phy_Mipi" lane="2" phyIndex="0" sensorFmt="CamSys_Fmt_Yuv422_8b"></SensorPhy>
</Sensor>
主要配置参数:?
? ? 1. I2cBus? ?所使用的i2c
? ? 2. facing? ? 前后置摄像头
? ? 3. orientation? 摄像头旋转角度
? ? 4.? ?lane="2" ?phyIndex="0" sensorFmt="CamSys_Fmt_Yuv422_8b">
? ? ? ? ? 分别对应了? 接口数据通道数; mipi phy编号; sensor输出数据格式
二、调试过程
通过logcat | grep CameraHal等查看打印日志
dmesg查看系统日志
1. i2c写失败
如果 i2c 配置错误或者 在i2c开始读写数据时摄像头没完成上电初始化,系统会打印 i2c写失败错误
[ 326.735166] E:camsys_i2c_write(92): i2c write dev(addr:0x20) failed!,err = -6
2. sensor连接
i2c读写成功后,模组注册成功可以在 logcat中看到

?两个模组的 connect 为 1时说明注册成功, 为0 则考虑是否是 i2c读写失败等原因
3. i2c延迟导致 相机app无法正常打开sensor显示图像 ?
问题描述:
因为相机上电最开始是使用的 GPIO 引脚拉高,因此在系统启动后 i2c会一直读写失败,当时在i2c子系统的写函数开头中加了一个 延迟,导致app打开相机时只能偶尔出现图像的严重问题。

删除延迟后,成功出现图像
4. 前后置摄像头拍照成像,左右镜像问题
修改其中一个模组输出图像左右镜像

?在sensor开流之前修改
|