RK3399 camera驅動開發
Android camera驅動開發
概述
目前板子上有兩路mipi rx,可以接雙攝像頭。
DTS配置
1、Enabled isp
- & isp0 {
status = "okay" ;
};
& isp1 {
status = "okay" ;
};
& isp0_mmu {
status = "okay" ;
};
& isp1_mmu {
status = "okay" ;
};
2、Enabled mipi對應的i2c
- & i2c1 {
status = "okay" ;
};
camera驅動(預設為OV9750)
1、android 驅動程式碼路徑
hardware/rockchip/camera/SiliconImage/isi/drv/OV9750_A
2、編譯生成的libisp_isi_drv_OV9750_A.so 放置於/vendor/lib/hw
3、cp hardware/rockchip/camera/SiliconImage/isi/drv/OV9750_A/calib/ OV9750_A.xml /vendor/etc/
4、cp hardware/rockchip/camera/Config/cam_board_rk3399.xml /vendor/etc/cam_board.xml
xml 配置
1、根據電路圖為camera上電,並配置rst,pdn,以下按mipi0配置電壓以及相關gpio,I2C通道(1),mipi phy 通道(0),IO 電壓 1.8v、CORE電壓1.8v、模擬電壓:3.2v,具體請看電路圖、以及OV9750 datasheet。
Linux camera驅動開發
概述
RK3399Pro toybrick 開發板分別帶有兩個MIPI,一個DVP攝像頭介面,MIPI支援最高4K拍照,並支援 1080P 30fps以上影片錄製。此外,開發板還支援 USB 攝像頭。
本文以 OV9750 攝像頭為例,講解在該開發板上的配置過程。
配置原理
由以下電路圖可知,兩路MIPI攝像頭連線的是不同的ISP和I2C通道。
MIPI0 :使用 ISP0 和 I2C1 ,還需配置 MIPI_MCLK0 、 MIPI_PDN 、 MIPI_RST
MIPI1 :使用 ISP1 和 I2C2 ,還需配置 MIPI_MCLK_T2 、 JMIPI_PDN2 、 JMIPI_RST2
DTS配置
配置isp節點
- cif_isp0 : cif_isp@ff910000 {
compatible = "rockchip,rk3399-cif-isp" ;
rockchip , grf = <& grf >;
reg = < 0x0 0xff910000 0x0 0x4000 >, < 0x0 0xff968000 0x0 0x8000 >;
reg - names = "register" , "dsihost-register" ;
clocks =
<& cru ACLK_ISP0_NOC >, <& cru ACLK_ISP0_WRAPPER >,
<& cru HCLK_ISP0_NOC >, <& cru HCLK_ISP0_WRAPPER >,
<& cru SCLK_ISP0 >, <& cru SCLK_DPHY_RX0_CFG >,
<& cru SCLK_CIF_OUT >, <& cru SCLK_CIF_OUT >,
<& cru SCLK_MIPIDPHY_REF >;
clock - names =
"aclk_isp0_noc" , "aclk_isp0_wrapper" ,
"hclk_isp0_noc" , "hclk_isp0_wrapper" ,
"clk_isp0" , "pclk_dphyrx" ,
"clk_cif_out" , "clk_cif_pll" ,
"pclk_dphy_ref" ;
interrupts = < GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH 0 >;
interrupt - names = "cif_isp10_irq" ;
power - domains = <& power RK3399_PD_ISP0 >;
rockchip , isp , iommu - enable = < 1 >;
iommus = <& isp0_mmu >;
status = "disabled" ;
};
& isp0 {
status = "okay" ;
};
& isp0_mmu {
status = "okay" ;
};
& cif_isp0 {
rockchip , camera - modules - attached = <& camera0 >;
status = "okay" ;
};
設定CPU MCLK引腳功能
- & pinctrl {
/* */
cam_mclk {
cam_default_pins : cam - default - pins {
rockchip , pins = < 2 11 RK_FUNC_3 & pcfg_pull_none >;
};
};
};
在i2c上配置camera節點,mipi0 camera連線到i2c1上
- & i2c1 {
status = "okay" ; /* 使能i2c1 */
/*
* 一般寫成cameraX:camera-module@ID,其中X為序號,ID為camera的7bit I2C地址
* camera0表示節點名,繫結isp節點時,將camera0 attach到isp0
*/
camera0 : camera - module @ 10 {
status = "okay" ;
compatible = "omnivision,ov9750-v4l2-i2c-subdev" ;
reg = < 0x10 >; /* 7bit I2C地址 */
device_type = "v4l2-i2c-subdev" ; /* 無需修改 */
clocks = <& cru SCLK_CIF_OUT >; /* 無需修改,時鐘源選擇 */
clock - names = "clk_cif_out" ; /* 無需修改,時鐘源名字 */
pinctrl - names = "default" ; /* 無需修改,透過pinctrl配置MCLK引腳 */
pinctrl - 0 = <& cam_default_pins >; /* 無需修改,與上文的pinctrl定義一致 */
rockchip , pd - gpio = <& gpio4 RK_PD1 GPIO_ACTIVE_LOW >; /* PD管腳分配及有效電平 */
rockchip , rst - gpio = <& gpio4 RK_PD2 GPIO_ACTIVE_LOW >; /* RST管腳分配及有效電平 */
rockchip , camera - module - mclk - name = "clk_cif_out" ; /* 無需修改 */
rockchip , camera - module - facing = "back" ; //前後置配置
rockchip , camera - module - name = "MDG001" ; //Camera 模組名稱
rockchip , camera - module - len - name = "NONE" ; //Camera 模組鏡頭
rockchip , camera - module - fov - h = "80" ; //模組水平可視角度配置
rockchip , camera - module - fov - v = "65" ; //模組垂直可視角度配置
rockchip , camera - module - orientation = < 0 >; //模組角度設定
rockchip , camera - module - iq - flip = < 0 >; //IQ 上下翻轉
rockchip , camera - module - iq - mirror = < 0 >; //IQ 左右映象
//以上 2 個屬性控制攝像頭的效果引數映象配置,一般都是設定成 0,但是發現以下現象:拍攝白牆,圖片的上半部偏色與下半部偏色不一致,或者左右半部偏不一致,即可以將這2個屬性置成1。
rockchip , camera - module - flip = < 1 >;
rockchip , camera - module - mirror = < 1 >;
//以上 2 個屬性控制攝像頭驅動中的映象配置,如果影像旋轉 180 度,可以將這 2 個屬性修改成相反的值即可旋轉 180。
rockchip , camera - module - defrect0 = < 1280 960 0 0 1280 960 >; //根據攝像頭解析度進行設定
rockchip , camera - module - flash - support = < 0 >; //閃光燈支援
rockchip , camera - module - mipi - dphy - index = < 0 >; //mipi口配置,根據物理連線定義
as - master = < 0 >;
};
};
驅動說明
與攝像頭相關的程式碼目錄如下:
- drivers / media / i2c / soc_camera / rockchip
|-- ov9750_v4l2 - i2c - subdev . c // OV9750驅動
|-- ov_camera_module . c // OV系列公共函式
|-- ov_camera_module . h //
|-- rk_camera_mclk . c // RK Camera MCLK時鐘訊號管理
|-- rk_camera_mclk . h
|-- rk_camera_module . c // RK 系列公共函式
`-- rk_camera_module_version.h //模組版本資訊
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69948385/viewspace-2657649/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 高通Camera模組驅動指南資料
- 抱怨驅動開發
- 驅動開發:配置Visual Studio驅動開發環境開發環境
- 驅動開發:探索DRIVER_OBJECT驅動物件Object物件
- 【敏捷開發】驅動測試開發敏捷
- 【Camera專題】Qcom-Camera驅動框架淺析(Hal層->Driver層)框架
- 驅動開發入門
- 白痴驅動開發方法
- "測試"驅動開發
- RK3399開發板 RK818 電量計 驅動檔案和 menuconfig
- 【Camera專題】你應該熟悉的Camera驅動框架一(Hal層->kernel層)框架
- 驅動開發書籍大全
- 驅動程式開發步驟
- Windows的驅動開發模型Windows模型
- 行為驅動開發iOSiOS
- Windows驅動開發入門Windows
- window驅動開發總結
- Android Camera開發指南Android
- 【Spring註解驅動開發】聊聊Spring註解驅動開發那些事兒!Spring
- 談“測試驅動的開發”
- 基於WDF的驅動開發
- 驅動篇——開發環境配置開發環境
- 領域模型驅動開發(1)模型
- 小議測試驅動開發
- 驅動開發常見縮寫
- 探索AI驅動Web開發動態UIAIWebUI
- RK3399的Android系統驅動UVC攝像頭Android
- RK3399方案設計RK3399嵌入式開發
- TDD(測試驅動開發)死了嗎?
- 用列舉來驅動 TableView 開發View
- linux驅動開發總結(一)Linux
- 開源驅動全球經濟發展
- 前端開發-領域驅動設計前端
- 測試驅動開發(TDD)的思考
- 你這不是測試驅動開發
- 功能驅動開發FDD的探討
- 什麼是測試驅動開發
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu