日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RK3399适配OV8858摄像头

發布時間:2024/3/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RK3399适配OV8858摄像头 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

OV8858主要信息

設備樹修改

?添加編譯設置

修改上電時序

修改攝像頭配置文件


開發流程概述

添加I2c設備樹 --> 修改驅動中的上電時序 --> 讀取到攝像頭ID?--> 修改攝像頭配置文件

OV8858主要信息

1.供電

key specifications (typical)
active array size: 3264 x 2448
power supply:
analog: 2.6 to 3.0V (2.8V nominal)
core: 1.14 to 1.26V (1.2V nominal)
I/O: 1.7 to 3.0V (1.8V or 2.8V nominal)

2.如何判斷驅動中攝像頭配置是 RAW 還是 SOC 類型?

如果驅動中 xxxx_enum_mbus_code 配置為 MEDIA_BUS_FMT_UYVY/YUYV/VYUY 等,則為SOC 攝像頭;如果需要調試效果,找對應 Sensor 原廠。

如果驅動中 xxxx_enum_mbus_code 配置為 MEDIA_BUS_FMT_SBGGR/SRGGB/SGBRG 等,則為 RAW 攝像頭,

設備樹修改

1.添加對應的i2c設備

&i2c1{
?? ?status = "okay";
?? ?clock-frequency = <400000>;
?? ?ov8858: ov8858@36 {
?? ??? ?compatible = "ovti,ov8858";
?? ??? ?reg = <0x36>;
?? ??? ?clocks = <&cru SCLK_CIF_OUT>;
?? ??? ?clock-names = "xvclk";
?? ??? ?/* avdd-supply = <>; */? /*硬件pwm供電,軟件不需要配置*/
?? ??? ?/* dvdd-supply = <>; */
?? ??? ?/* dovdd-supply = <>; */
?? ??? ?/* flash-leds = <>; */
?? ??? ?pinctrl-names = "rockchip,camera_default";
?? ??? ?pinctrl-0 = <&cif_clkout>;
?? ??? ?//power-gpio = <&gpio2 RK_PB4 cc>;/*硬件pwm供電,軟件不需要配置*/
?? ??? ?reset-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_LOW>;? /*重啟設備*/
?? ??? ?pwdn-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_LOW>; /*復位設備寄存器*/
?? ??? ?rockchip,camera-module-index = <0>;
?? ??? ?rockchip,camera-module-mclk-name = "clk_cif_out";
?? ??? ?rockchip,camera-module-facing = "front";
?? ??? ?rockchip,camera-module-name = "CameraKing";
?? ??? ?rockchip,camera-module-lens-name = "Largan-9569A2";
?? ??? ?//power-domains = <&power RK3399_PD_VIO>;
?? ??? ?port {
?? ??? ??? ?ov8858_out: endpoint {
?? ??? ??? ??? ?remote-endpoint = <&mipi_in_ucam0>;
?? ??? ??? ??? ?data-lanes = <1 2 3 4>;
?? ??? ??? ?};
?? ??? ?};
?? ?};
};

&mipi_dphy_rx0{
?? ?status = "okay";

?? ?ports {
?? ??? ?#address-cells = <1>;
?? ??? ?#size-cells = <0>;

?? ??? ?port@0 {
?? ??? ??? ? reg = <0>;
?? ??? ??? ?#address-cells = <1>;
?? ??? ??? ?#size-cells = <0>;

?? ??? ??? ?mipi_in_ucam0: endpoint@1 {
?? ??? ??? ??? ?reg = <1>;
?? ??? ??? ??? ?remote-endpoint = <&ov8858_out>;
?? ??? ??? ??? ?data-lanes = <1 2 3 4>;
?? ??? ??? ? };
?? ??? ?};

?? ??? ?port@1 {
?? ??? ??? ?reg = <1>;
?? ??? ??? ?#address-cells = <1>;
?? ??? ??? ?#size-cells = <0>;

?? ??? ??? ?dphy_tx1rx1_out: endpoint@0 {
?? ??? ??? ??? ?reg = <0>;
?? ??? ??? ??? ?remote-endpoint = <&isp0_mipi_in>;
?? ??? ??? ?};
?? ??? ?};
?? ?};
};

&rkisp1_0{

?? ?status = "okay";
?? ?port {
?? ??? ?#address-cells = <1>;
?? ??? ?#size-cells = <0>;

?? ??? ?isp0_mipi_in: endpoint@0 {
?? ??? ??? ?reg = <0>;
?? ??? ??? ?remote-endpoint = <&dphy_tx1rx1_out>;
??????? };
?? ?};
};

&isp0_mmu{? /* rkisp1_0中指定了iommus = <&isp0_mmu> */
??? status = "okay";
};

?其他的一些修改

&pinctrl {

????????isp {

????????????????cif_clkout: cif-clkout {

????????????????????????rockchip,pins =

????????????????????????/*cif_clkout*/

????????????????????????<2 11 RK_FUNC_3 &pcfg_pull_none>;

????????????????};

-?????????????? bat_detect_gpio: bat-detect-gpio {
+?????????????? /*bat_detect_gpio: bat-detect-gpio {? /*去除一些重復的引腳,以免出問題*/
??????????????????????? rockchip,pins = <2 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
??????????????? };
+?????????????? */

?&io_domains {
??????? status = "okay";
-?????? bt656-supply = <&vcc_3v0>;
+?????? bt656-supply = <&vcc1v8_dvp>;?
??????? audio-supply = <&vcca1v8_codec>;
??????? sdmmc-supply = <&vccio_sd>;
??????? gpio1830-supply = <&vcc_3v0>;

?添加編譯設置

路徑:arch/arm64/configs/tab23_rk99_fr_gen2_defconfig

-# CONFIG_VIDEO_OV8858 is not set
+CONFIG_VIDEO_OV8858=y

路徑:drivers/media/i2c/Kconfig

config VIDEO_OV8858
??????? tristate "OmniVision OV8858 sensor support"
??????? depends on I2C && VIDEO_V4L2
??????? depends on MEDIA_CAMERA_SUPPORT
+?????? default y

修改上電時序

static int __ov8858_power_on(struct ov8858 *ov8858)}if (!IS_ERR(ov8858->reset_gpio)) - gpiod_set_value_cansleep(ov8858->reset_gpio, 0); - + gpiod_set_value_cansleep(ov8858->reset_gpio, 1); + if (!IS_ERR(ov8858->pwdn_gpio)) + gpiod_set_value_cansleep(ov8858->pwdn_gpio, 1);ret = regulator_bulk_enable(OV8858_NUM_SUPPLIES, ov8858->supplies);if (ret < 0) {dev_err(dev, "Failed to enable regulators\n");goto disable_clk;} - + usleep_range(2500, 3000);if (!IS_ERR(ov8858->reset_gpio)) - gpiod_set_value_cansleep(ov8858->reset_gpio, 1); + gpiod_set_value_cansleep(ov8858->reset_gpio, 0); +- usleep_range(1000, 2000);if (!IS_ERR(ov8858->pwdn_gpio)) - gpiod_set_value_cansleep(ov8858->pwdn_gpio, 1); + gpiod_set_value_cansleep(ov8858->pwdn_gpio, 0);

修改攝像頭配置文件

/FR/hardware/rockchip/camera/etc/camera/camera3_profiles_rk3399.xml

從其他的使用8858的項目里把8858的配置都抄過來

<Profiles cameraId="0" name="ov8858" moduleId="m00">?? 只有1個攝像頭moduleId為0

<sensor.orientation value="90"/> ??????? 攝像頭旋轉的角度

<sensorType value="SENSOR_TYPE_RAW"/>? 攝像頭的類型,另一個為SENSOR_TYPE_SOC,如果設置為SOC,這里面的配置都不在生效,攝像的畫面會很幽暗。

關于攝像頭的效果

/FR/hardware/rockchip/camera/etc/camera/rkisp1/ov8858_CameraKing_Largan-9569A2.xml

源文件:FR/device/rockchip/rk3399/media_profiles_default.xml(拷其他項目的)

這個文件會拷貝為機器的 /vendor/etcmedia_profiles_V1_0.xml 控制攝像頭拍照和錄像的分辨率,如果這個文件不對會導致錄像功能崩潰

問題1:mclk時鐘如果沒有輸出,很有可能是電源閾沒有配置正確。

由上圖可見mclk的引腳是GPIO2-B3.由原理圖可知GPIO2用的電源域對應APIO2,?

APIO2_VDD? ---> VCC1V8_DVP

查看kernel文檔Documentation/devicetree/bindings/power/rockchip-io-domain.txt

Possible supplies for rk3399:
- bt656-supply:? The supply connected to APIO2_VDD.

RK3399 GPIO配置問題/電源域配置

問題2:上層未識別到攝像頭,使用 APK 打不開攝像頭
使用命令: dumpsy media.camera
Number of camera devices: 0,說明 framework 層沒有識別到攝像頭;

問題3:拍照功能正常,點擊錄像就會崩潰

logcat報錯信息:

10-10 14:27:43.464 1511 2025 E CAM_Storage: getOtherAvailableSpace DIRECTORY:/DCIM/Camera UNAVAILABLE

10-10 14:27:43.468 1511 1511 I CAM_VideoModule: initializeRecorder: Thread[main,5,main]

10-10 14:27:43.469 1511 1511 D CAM_VideoModule: camera isReleased:false

10-10 14:27:43.482 417 1718 W StagefrightRecorder: Max file duration is not positive: 0 us. Disabling duration limit.

10-10 14:27:43.482 417 1718 W StagefrightRecorder: Target duration (0 us) too short to be respected

10-10 14:27:43.483 1511 1511 D CAM_LcyLocProvider: No location received yet.

10-10 14:27:43.484 1511 1511 D CAM_LcyLocProvider: No location received yet.

10-10 14:27:43.484 1511 1511 V CAM_VideoModule: New video filename: /storage/emulated/0/DCIM/Camera/VID_20221010_142743.mp4.tmp

10-10 14:27:43.490 417 592 E CameraSource: Video dimension (1920x1080) is unsupported

10-10 14:27:43.490 1511 1511 E MediaRecorder: start failed: -19

10-10 14:27:43.491 1511 1511 E CAM_VideoModule: Could not start media recorder.

修改device/rockchip/rk3399/media_profiles_default.xml文件,

修改前前置攝像頭視頻為? HD1080P HD720P? CIF

修改后前置攝像頭視頻為? HD720 SD480P? QVGA

問題4: 關于數據鏈路的確定

如何使用 v4l2 獲取底層數據流?
4.8.1 首先配置鏈路 First configure the link
目前 RK 的 Camera 驅動使用的 media-ctl 框架,有以下四種常見鏈路:
1、 MIPI-RAW-Sensor -> MIPI 接口->ISP
2、 MIPI-YUV-Sensor -> MIPI 接口->ISP
3、 Parallel-Sensor ->ISP
4、 Parallel-Sensor ->CIF

其中MIPI-RAW-Sensor -> MIPI interface->ISP對應的鏈路圖為

配置鏈路命令如下:(設備樹都配置過了,一般不用手動配置

media-ctl -l '"ov5648 2-0036":0->"rockchip-mipi-dphy-rx":0[1]'??????? ??????????????????????? //設備樹只有 mipi-dphy-rx0

media-ctl -l '"rockchip-mipi-dphy-rx":1->"rkisp1-isp-subdev":0[1]'?????????????????????????? //設備樹有? rkisp1_0 和 rkisp1_1 ,都試試看看那個可用

配置好后,使用 media-ctl -p 命令查看如下:會顯示 ENABLED(下同),說明鏈路配置連接成功。

打開log開關后,可見如下的綁定關系

10-09 10:38:45.761 290 455 I RkCamera: <HAL> MediaController: @configureLink: disable "m00_f_ov8858 1-0036" [0] --> "rockchip-mipi-dphy-rx" [0]

10-09 10:38:45.761 290 455 I RkCamera: <HAL> MediaController: @setupLink

10-09 10:38:45.761 290 455 I RkCamera: <HAL> MediaController: @enumLinks

10-09 10:38:45.762 290 455 I RkCamera: <HAL> MediaEntity: @updateLinks

10-09 10:38:45.762 290 455 I RkCamera: <HAL> MediaEntity: link 0: pad 0 --> sink entity 7:0 (disabled)

10-09 10:38:45.762 290 455 D RkCamera: <HAL> MediaCtlHelper: @resetLinks

10-09 10:38:45.762 290 455 I RkCamera: <HAL> MediaController: @configureLink: disable "rockchip-mipi-dphy-rx" [1] --> "rkisp1-isp-subdev" [0]

tab23_rk99_fr:/ # media-ctl -p

........

........

- entity 7: rockchip-mipi-dphy-rx (2 pads, 2 links)

type V4L2 subdev subtype Unknown

device node name /dev/v4l-subdev1

pad0: Sink

[fmt:SBGGR10/3264x2448]

<- "m00_f_ov8858 1-0036":0 [ENABLED]

pad1: Source

[fmt:SBGGR10/3264x2448]

-> "rkisp1-isp-subdev":0 [ENABLED]

- entity 8: m00_f_ov8858 1-0036 (1 pad, 1 link)

type V4L2 subdev subtype Sensor

device node name /dev/v4l-subdev2

pad0: Source

[fmt:SBGGR10/3264x2448]

-> "rockchip-mipi-dphy-rx":0 [ENABLED]

camera hal3 的 LOG 抓取?
打開 camerahal 的 debug 命令;
setprop persist.vendor.camera.hal.debug 5
關閉命令
setprop persist.vendor.camera.hal.debug 0

參考資料:rk3566 ov8858攝像頭調試

總結

以上是生活随笔為你收集整理的RK3399适配OV8858摄像头的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。