迅為 RK3399開發板Android8系統-ov13850攝像頭移植分析
迅為 RK3399開發板Android8系統-ov13850攝像頭移植分析
本文將講解 OV13850 攝像頭在開發板上的配置過程。介面效果圖如下所示:
21.18.1 裝置樹配置
1 開啟裝置樹 itop-3399_8.1/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi 檔案,如下圖所示。
camera 我們使用 ISP1
21.18.2 驅動說明
Android 部分:
itop-3399_8.1/hardware/rockchip/camera/CameraHal 是攝像頭的 HAL 原始碼
itop-3399_8.1/hardware/rockchip/camera/SiliconImage 是
itop-3399_8.1/hardware/rockchip/camera/SiliconImage/isi/drv/OV13850 是 OV13850 模組的驅動原始碼
itop-3399_8.1/hardware/rockchip/camera/SiliconImage/isi/drv/OV13850/calib/OV13850.xml 是 OV13850 模組的
調校引數
itop-3399_8.1/hardware/rockchip/camera/Config/cam_board_rk3399.xml 檔案可以設定攝像頭的引數
Kernel 部分:
itop-3399_8.1/kernel/drivers/media/video/rk_camsys 是
21.18.3 原理圖分析
配置攝像頭需要配置攝像頭的 GPIO 和時鐘,即可完成配置。我們開啟攝像頭的原理圖,如下圖所示:
然後在開發板的底板原理圖找到這倆個引腳,再在找到核心板原理圖中找到對應的引腳,如下圖所示:
對應的介面
21.18.4 配置 Android
1 修改 itop-3399_8.1/itop-3399_8.1/hardware/rockchip/camera/Config/cam_board_rk3399.xml 檔案用來
註冊攝像頭,如下圖所示:
接下來我們來分析一下分別代表什麼含義。
1 Sensor 名稱
<SensorName name="OV13850" ></SensorName>
2 Sensor 軟體標識
<SensorDevID IDname="CAMSYS_DEVID_SENSOR_1A"></SensorDevID>
保證驅動標識不一致即可,可選項有
CAMSYS_DEVID_SENSOR_1A
CAMSYS_DEVID_SENSOR_1B
CAMSYS_DEVID_SENSOR_2
3 Sensor 採集控制器的名稱
<SensorHostDevID busnum="CAMSYS_DEVID_MARVIN" ></SensorHostDevID>
4 i2c 通道 i2c1,具體通道號請參考攝像頭原理圖連線主控的 I2C 通道號。原理圖查看了是 i2c1。
<SensorI2cBusNum busnum="1"></SensorI2cBusNum>
5 sensor 暫存器地址長度,單位是位元組
<SensorI2cAddrByte byte="2"></SensorI2cAddrByte>
6 sensor i2c 頻率,單位是 Hz,用於設定 I2C 的頻率。
<SensorI2cRate rate="100000"></SensorI2cRate>
7 sensor 輸入時鐘頻率,用於設定攝像頭的時鐘
<SensorMclk mclk="24000000" delay="1000"></SensorMclk>
8 Sensor AVDD 的 PMU LDO 名稱 如果不是連線到 PMU,那麼只需填寫 NC
<SensorAvdd name="NC" min="28000000" max="28000000" delay="0"></SensorAvdd>
9 Sensor DVDD 的 PMU LDO 名稱
<SensorDvdd name="NC" min="12000000" max="12000000" delay="0"></SensorDvdd>
如果不是連線到 PMU,那麼只需填寫 NC。注意 min 和 max 值必須填寫,決定了 Sensor 的 IO 電壓
10 Sensor DOVDD 的 PMU LDO 名稱
<SensorDovdd name="NC" min="18000000" max="18000000" delay="5000"></SensorDovdd>
11 Sensor PowerDown 引腳
<SensorGpioPwdn0 ioname="RK30_PIN2_PD4" active="0"></SensorGpioPwdn0> //mipi
直接填寫名稱即可,active 填寫休眠的有效電平
12 Sensor Reset 引腳
<SensorGpioRst ioname="RK30_PIN2_PD3" active="0"></SensorGpioRst>
直接填寫名稱即可,active 填寫復位的有效電平
13 Sensor Power 引腳
<SensorGpioPwen ioname="NC" active="1" delay="1000"></SensorGpioPwen>
直接填寫名稱即可,active 填寫電源的有效電平
14 選擇 Sensor 作為前置還是後置
<SensorFacing facing="back"></SensorFacing>
可填寫“
front”或“back”
15 Sensor 的介面方式
<SensorInterface mode="MIPI"></SensorInterface>
16 Sensor 的映象方式
<SensorMirrorFlip mirror="0"></SensorMirrorFlip>
17 Sensor 的角度資訊
<SensorOrientation orientation="0"></SensorOrientation>
18 物理介面設定
<SensorPhy phyMode="CamSys_Phy_Mipi" lane="2" phyIndex="1" sensorFmt="CamSys_Fmt_Raw_10b">
</SensorPhy>
hyMode: Sensor 介面硬體連線方式,對 MIPI Sensor 來說,該值取"CamSys_ Phy_ Mipir"
Lane: Sensor mipi 介面資料通道數
Phyindex: Sensor mipi 連線的主控 mipi phy 編號
sensorFmt: Sensor 輸出資料格式,目前前支援 CamSys_ Fmt. Raw_ 10b
21.18.5 編譯核心
我們需要將驅動原始碼 itop-3399_8.1/kernel/drivers/media/video/rk_camsys 編譯進核心,配置方法如下:
(1) itop-3399_8.1/kernel/arch/arm64/configs/rockchip_linux_defconfig 是核心預設配置檔案,我們在修改之
前要將其備份。
(2) 然後用 itop-3399_8.1/kernel/arch/arm64/configs/rockchip_linux_defconfig 檔案覆蓋
itop-3399_8.1/kernel/.config 檔案,然後輸入 make menuconfig 進行配置,輸入以下命令:
cp -r arch/arm64/configs/rockchip_linux_defconfig .config
make menuconfig
(3) 將以下配置開啟,如下圖所示:
-> Device Drivers
-> Multimedia support (MEDIA_SUPPORT [=y])
-> camsys driver (CAMSYS_DRV [=y])
(1)
-> RockChip camera system driver
(4)配置完之後生成新的.config 檔案,我們將其覆蓋預設配置檔案,然後重新編譯核心。
cp -r .config arch/arm64/configs/rockchip_linux_defconfig
編譯完成燒寫映象,終端下可以直接修改 /system/etc/cam_board.xml 除錯各引數並重啟生效。Android8
原始碼裡面 itop-3399_8.1/RKDocs 可以檢視詳細的資料。