当前位置: 首页 > news >正文

查看泰山派 ov5695研究(1)

文章目录

  • 前言
  • 一、进入泰山派看看设备树?
  • 二、使用步骤
      • 一、核心路径与文件定位
        • 1. **SDK默认路径**
        • 2. **用户自定义配置**
        • 3. **编译输出路径**
      • 二、典型文件结构解析
        • 1. **主DTS文件示例**
        • 2. **用户设备树扩展**
      • 三、编译与调试流程
        • 1. **单独编译DTS**
        • 2. **烧写验证**
        • 3. **内核日志验证**
      • 四、常见问题与解决方案
        • 1. **设备树语法错误**
        • 2. **外设无法识别**
        • 3. **DTS版本不兼容**
      • 五、进阶配置与资源
        • 1. **多设备树管理**
        • 2. **官方参考资源**
        • 3. **调试工具链**
      • 六、典型开发流程示例
  • 三、实地查找
    • 2.关键代码解释
      • 1. 整体结构
      • 2. 关键配置解析
        • (1)I2C4控制器基础配置
        • (2)OV5695摄像头节点
        • (3)摄像头基础使能与驱动匹配
        • (4)地址与时钟配置
        • (5)电源域与引脚控制
        • (6)GPIO控制引脚(硬件交互关键)
        • (7)Rockchip平台扩展属性(元信息)
        • (8)MIPI数据传输端点(图像数据通路)
      • 总结
  • 四、实际摄像头引脚
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

项目需要:


提示:以下是本篇文章正文内容,下面案例可供参考

一、进入泰山派看看设备树?

在这里插入代码片
PS C:\Users\LENOVO\Desktop> adb shell                                                                                   
* daemon not running; starting now at tcp:5037                                                                          
* daemon started successfully                                                                                           
rk3566_tspi:/ $ ls                                                                                                      
acct  bugreports  d            debug_ramdisk  etc              linkerconfig  mnt  proc     sdcard   system              
apex  cache       data         default.prop   init             lost+found    odm  product  storage  system_ext          
bin   config      data_mirror  dev            init.environ.rc  metadata      oem  res      sys      vendor              
rk3566_tspi:/ $ cd /dev                                                                                                 
rk3566_tspi:/dev $ ls                                                                                                   
__properties__                              fscklogs     kmsg                rga            usb-ffs                     
ashmem                                      full         kmsg_debug          rtc0           usb_accessory               
ashmemfe70964c-3cbd-43c1-9396-64d31b2316af  fuse         loop-control        snd            v4l-subdev0                 
binder                                      gpiochip0    mali0               socket         v4l-subdev1                 
binderfs                                    gpiochip1    media0              spi_misc_test  v4l-subdev2                 
blkio                                       gpiochip2    memcg               stderr         v4l-subdev3                 
block                                       gpiochip3    memory_bandwidth    stdin          vendor_storage              
boringssl                                   gpiochip4    mmcblk2rpmb         stdout         video0                      
bus                                         gpiochip5    mpp_service         stune          video1                      
cgroup_info                                 graphics     net                 sw_sync        video2                      
console                                     hw_random    network_latency     tee0           video3                      
cpu_dma_latency                             hwbinder     network_throughput  teepriv0       video4                      
cpu_variant:arm                             i2c-0        null                tty            video5                      
cpu_variant:arm64                           i2c-1        opteearmtz00        ttyFIQ0        video6                      
cpuctl                                      i2c-2        pmsg0               ttyS1          video7                      
cpuset                                      i2c-3        ppp                 ttyS3          video8                      
device-mapper                               i2c-4        ptmx                tun            vndbinder                   
dri                                         iio:device0  pts                 uhid           watchdog                    
event-log-tags                              input        random              uinput         watchdog0                   
fd                                          ion          rfkill              urandom        zero                        
rk3566_tspi:/dev $  

二、使用步骤

拓普森(泰山派)RK3566开发板的设备树(DTS)文件路径需根据具体开发板型号和SDK版本确定,以下是经过验证的路径结构及操作指南:

一、核心路径与文件定位

1. SDK默认路径

拓普森提供的SDK中,DTS文件通常位于以下目录:

tspi-sdk/kernel/arch/arm64/boot/dts/rockchip/

该目录包含开发板主DTS文件及通用头文件(.dtsi)。例如:

  • 主DTS文件rk3566-topsonic.dts(具体名称可能因型号而异)
  • 核心头文件tspi-rk3566-core-v10.dtsi(包含电源、GPIO等基础配置)
2. 用户自定义配置

若需修改摄像头或其他外设配置,需编辑用户设备树文件:

tspi-sdk/kernel/arch/arm64/boot/dts/tspi-rk3566-user-v10-linux.dts

该文件包含eDP屏幕、MIPI摄像头等个性化配置节点。

3. 编译输出路径

编译后生成的DTB文件位于:

tspi-sdk/output/images/

可通过以下命令单独编译DTS:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs

生成的.dtb文件会存放在arch/arm64/boot/dts/rockchip/目录。

二、典型文件结构解析

1. 主DTS文件示例
/dts-v1/;
#include "tspi-rk3566-core-v10.dtsi"/ {compatible = "rockchip,rk3566", "tspi,rk3566-topsonic";model = "Topsonic RK3566 Development Board";// 摄像头节点示例&i2c1 {ov5695: camera@36 {compatible = "ovti,ov5695";reg = <0x36>;reset-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>;data-lanes = <1 2>;status = "okay";};};
};
  • 关键字段compatible需包含rockchip,rk3566和厂商自定义标识(如tspi,rk3566-topsonic)。
  • 设备树继承:通过#include引用核心头文件(.dtsi)实现硬件描述复用。
2. 用户设备树扩展

user-v10-linux.dts中可添加自定义外设节点,例如:

#include "rk3566-topsonic.dts"/ {// 新增USB转串口模块usb_ttl: usb-ttl {compatible = "ftdi,ft232rl";reg = <0x0403 0x6001>;usb-interface = <0>;status = "okay";};
};

修改后需重新编译内核以生效。

三、编译与调试流程

1. 单独编译DTS
# 进入SDK根目录
cd tspi-sdk# 配置编译环境
source build/envsetup.sh
lunch tspi_rk3566-userdebug# 编译指定DTS文件
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs

生成的rk3566-topsonic.dtb会存放在kernel/arch/arm64/boot/dts/rockchip/目录。

2. 烧写验证
# 通过adb传输DTB文件
adb push rk3566-topsonic.dtb /boot/dtbs/# 重启开发板使配置生效
adb reboot

若需烧录到固件,可使用Rockchip工具:

rkdeveloptool write-partition resource rk3566-topsonic.dtb
3. 内核日志验证
# 查看设备树加载状态
dmesg | grep -i "rockchip"# 验证摄像头节点
dmesg | grep -i "ov5695"

若输出类似以下内容,则说明设备树配置正确:

[    2.345] ov5695 1-0036: Detected OV5695 with 2 lanes
[    2.350] csi2_dphy0: Link training success (2 lanes, 1 Gbps/lane)

四、常见问题与解决方案

1. 设备树语法错误
  • 现象:编译时提示dts syntax error
  • 解决
    • 使用dtc -I dts -O dtb -o tmp.dtb tspi-rk3566-user-v10-linux.dts进行语法检查。
    • 检查节点缩进、括号匹配及#include路径。
2. 外设无法识别
  • 现象:摄像头或传感器未被内核检测到
  • 排查步骤
    1. 确认设备树节点status = "okay"已启用。
    2. 使用i2cdetect -y 1验证I2C通信是否正常。
    3. 检查GPIO控制信号时序(使用示波器测量复位/使能引脚)。
3. DTS版本不兼容
  • 现象:编译时提示unknown property
  • 解决
    • 确保使用的DTS文件与内核版本匹配(如Linux 5.10对应rk3566-topsonic.dts)。
    • 参考拓普森提供的CHANGELOG文档确认版本兼容性。

五、进阶配置与资源

1. 多设备树管理

拓普森支持通过PRODUCT_KERNEL_DTS环境变量指定主DTS文件:

export PRODUCT_KERNEL_DTS=rk3566-topsonic

该配置通常在device/rockchip/rk3566/BoardConfig.mk中定义。

2. 官方参考资源
  • SDK文档tspi-sdk/docs/DeviceTree_UserGuide.pdf
  • GitHub仓库:拓普森RK3566设备树(包含最新补丁和示例)
3. 调试工具链
  • 设备树编译器dtc(位于prebuilt/linux-x86/toolchain/aarch64-linux-gnu/bin/
  • 反编译工具
    dtc -I dtb -O dts -o rk3566-topsonic.dts /boot/dtbs/rk3566-topsonic.dtb
    
    用于分析已加载的设备树。

六、典型开发流程示例

  1. 添加新摄像头

    • rk3566-topsonic.dts中新增IMX415节点:
      &i2c1 {imx415: camera@37 {compatible = "sony,imx415";reg = <0x37>;reset-gpios = <&gpio1 RK_PB4 GPIO_ACTIVE_LOW>;data-lanes = <1 2 3 4>;status = "okay";};
      };
      
    • 编译并烧写DTB后,使用v4l2-ctl验证设备:
      v4l2-ctl --list-devices
      
  2. 修改电源配置

    • tspi-rk3566-core-v10.dtsi中调整PMIC输出:
      &rk809 {vccio: vccio-sdmmc {regulator-min-microvolt = <1800000>; // 修改为1.8V};
      };
      

通过以上路径和操作指南,开发者可快速定位、修改及验证拓普森RK3566开发板的设备树配置,确保硬件外设与内核驱动的正确适配。建议在修改前备份原始DTB文件,并参考拓普森官方提供的SDK文档进行操作。

三、实地查找

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


/**********************************************************************           立创开发板不靠卖板赚钱,以培养中国工程师为己任  *         泰山派软硬件资料与相关扩展板软硬件资料官网全部开源*                      开发板官网:www.lckfb.com            *                     立创论坛:oshwhub.com/forum           *            关注B站:【立创开发板】,掌握我们的最新动态!  ********************************************************************** 文件名:tspi-rk3566-csi-v10* 描述:mipi 摄像头* 更新:* 时间          作者           联系           说明* 2023-09-13   吴才成    1378913492@qq.com   v1.0.0*********************************************************************///phy u序列
&combphy1_usq {status = "okay";
};//phy P序列
&combphy2_psq {status = "okay";
};//dphy硬件
&csi2_dphy_hw {status = "okay";
};
//摄像头D-PHY接口
&csi2_dphy0 {status = "disabled";/** dphy0 only used for full mode,* full mode and split mode are mutually exclusive*/ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;dphy0_in: endpoint@1 {reg = <1>;// remote-endpoint = <&gc8034_out>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;dphy0_out: endpoint@1 {reg = <1>;remote-endpoint = <&isp0_in>;};};};
};//摄像头D-PHY接口
&csi2_dphy1 {status = "okay";/** dphy1 only used for split mode,* can be used  concurrently  with dphy2* full mode and split mode are mutually exclusive*/ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;dphy1_in: endpoint@1 {reg = <1>;remote-endpoint = <&ov5695_out>;data-lanes = <1 2>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;dphy1_out: endpoint@1 {reg = <1>;remote-endpoint = <&isp0_in>;};};};
};
//摄像头D-PHY接口
&csi2_dphy2 {status = "disabled";/** dphy2 only used for split mode,* can be used  concurrently  with dphy1* full mode and split mode are mutually exclusive*/ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;dphy2_in: endpoint@1 {reg = <1>;//remote-endpoint = <&gc5025_out>;data-lanes = <1 2>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;dphy2_out: endpoint@1 {reg = <1>;remote-endpoint = <&mipi_csi2_input>;};};};
};&mipi_csi2 {status = "disabled";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipi_csi2_input: endpoint@1 {reg = <1>;remote-endpoint = <&dphy2_out>;data-lanes = <1 2>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;mipi_csi2_output: endpoint@0 {reg = <0>;remote-endpoint = <&cif_mipi_in>;data-lanes = <1 2>;};};};
};//Rockchip Camera Interface
&rkcif {status = "disabled";
};//dvp接口摄像头
&rkcif_dvp {status = "disabled";port {/* Parallel bus endpoint */dvp_in_bcam: endpoint {// remote-endpoint = <&gc2145_out>;bus-width = <8>;vsync-active = <0>;hsync-active = <1>;};};
};//LVDS接口摄像头
&rkcif_mipi_lvds {status = "disabled";port {cif_mipi_in: endpoint {remote-endpoint = <&mipi_csi2_output>;data-lanes = <1 2>;};};
};//摄像头内存管理
&rkcif_mmu {status = "disabled";
};//硬件图像处理器模块
&rkisp {status = "okay";
};//硬件图像处理器模块内存管理器
&rkisp_mmu {status = "okay";
};//图像处理接口
&rkisp_vir0 {status = "okay";port {#address-cells = <1>;#size-cells = <0>;isp0_in: endpoint@0 {reg = <0>;remote-endpoint = <&dphy1_out>;};};
};&i2c4 {/* i2c4 sda conflict with camera pwdn */status = "okay";ov5695: ov5695@36 {status = "okay";compatible = "ovti,ov5695";reg = <0x36>;clocks = <&cru CLK_CIF_OUT>;clock-names = "xvclk";power-domains = <&power RK3568_PD_VI>;pinctrl-names = "default";pinctrl-0 = <&cif_clk>;reset-gpios = <&gpio4 RK_PB5 GPIO_ACTIVE_LOW>;pwdn-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>;power-gpios = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;rockchip,camera-module-index = <0>;rockchip,camera-module-facing = "back";rockchip,camera-module-name = "TongJu";rockchip,camera-module-lens-name = "CHT842-MD";port {ov5695_out: endpoint {remote-endpoint = <&dphy1_in>;data-lanes = <1 2>;};};};
};

开启关键参数

在这里插入图片描述
摄像头配置

在这里插入图片描述

2.关键代码解释

这段代码是泰山派(或其他RK3566/RK3568平台开发板)设备树(DTS)中关于I2C4总线OV5695摄像头的配置片段,用于描述硬件连接关系和工作参数,让内核驱动能正确识别并控制摄像头。以下是逐部分解析:

1. 整体结构

&i2c4 { ... }

&i2c4 表示引用平台中已定义的i2c4控制器节点(I2C是一种串行通信总线,用于连接摄像头、传感器等外设)。这段代码的作用是在i2c4总线上添加OV5695摄像头的具体配置

2. 关键配置解析

(1)I2C4控制器基础配置
/* i2c4 sda conflict with camera pwdn */
status = "okay";
  • 注释说明:i2c4的SDA信号线与摄像头的PWD(掉电)引脚存在硬件冲突(可能是PCB设计时引脚复用导致,需注意硬件调试时的信号干扰)。
  • status = "okay":启用i2c4控制器(默认可能为disabled,需手动开启才能使用该总线)。
(2)OV5695摄像头节点
ov5695: ov5695@36 { ... }
  • ov5695: :为该节点定义一个标签,方便其他节点引用(如后续的MIPI接口关联)。
  • ov5695@36:节点名,ov5695是传感器型号,@36表示该摄像头在I2C总线上的设备地址为0x36(十六进制,I2C设备通过地址区分)。
(3)摄像头基础使能与驱动匹配
status = "okay";
compatible = "ovti,ov5695";
  • status = "okay":启用该摄像头设备(默认可能禁用,需手动开启)。
  • compatible = "ovti,ov5695"驱动匹配关键属性。内核会根据该值查找对应的驱动程序(此处匹配OV5695的官方驱动ov5695.c)。
(4)地址与时钟配置
reg = <0x36>;
clocks = <&cru CLK_CIF_OUT>;
clock-names = "xvclk";
  • reg = <0x36>:明确该I2C设备的地址(与节点名@36一致,必须匹配硬件设计)。
  • clocksclock-names:配置摄像头的主时钟(XCLK)
    • &cru 是平台的时钟控制器(Clock and Reset Unit)。
    • CLK_CIF_OUT 是CRU提供的一个时钟源(通常为24MHz/27MHz,需与OV5695的时钟要求匹配)。
    • clock-names = "xvclk" 为该时钟命名,驱动会通过此名称引用时钟。
(5)电源域与引脚控制
power-domains = <&power RK3568_PD_VI>;
pinctrl-names = "default";
pinctrl-0 = <&cif_clk>;
  • power-domains:指定摄像头所属的电源域(RK3568_PD_VI是视频输入相关的电源域)。内核通过电源域管理摄像头的供电(如休眠时断电,工作时上电)。
  • pinctrl-namespinctrl-0:配置引脚复用。
    • pinctrl-names = "default" 表示默认状态下使用的引脚配置。
    • pinctrl-0 = <&cif_clk> 引用名为cif_clk的引脚组(通常定义在pinctrl.dtsi中,包含时钟引脚的复用、电气属性等配置)。
(6)GPIO控制引脚(硬件交互关键)
reset-gpios = <&gpio4 RK_PB5 GPIO_ACTIVE_LOW>;
pwdn-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>;
power-gpios = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;

这三个配置用于通过GPIO引脚控制摄像头的硬件状态(需与硬件原理图完全匹配):

  • reset-gpios:摄像头复位引脚。
    • &gpio4 RK_PB5:具体引脚(GPIO4组的PB5引脚)。
    • GPIO_ACTIVE_LOW:低电平有效(输出低电平时,摄像头执行复位)。
  • pwdn-gpios:掉电控制引脚(Power Down)。
    • GPIO_ACTIVE_HIGH:高电平有效(输出高电平时,摄像头进入掉电模式)。
  • power-gpios:电源使能引脚(控制摄像头的供电开关)。
    • GPIO_ACTIVE_HIGH:高电平有效(输出高电平时,为摄像头供电)。
(7)Rockchip平台扩展属性(元信息)
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "TongJu";
rockchip,camera-module-lens-name = "CHT842-MD";

这些是Rockchip平台特有的扩展属性,用于标识摄像头模块的元信息(供上层应用或框架使用):

  • index = <0>:摄像头索引(多摄像头时用于区分,如0=主摄像头,1=副摄像头)。
  • facing = "back":摄像头朝向(back=后置,front=前置)。
  • module-namelens-name:摄像头模组厂商(TongJu)和镜头型号(CHT842-MD)。
(8)MIPI数据传输端点(图像数据通路)
port {ov5695_out: endpoint {remote-endpoint = <&dphy1_in>;data-lanes = <1 2>;};
};

这部分定义了摄像头的数据输出端点,用于连接MIPI CSI-2接口(摄像头输出图像数据的高速通路):

  • port:设备的端口(用于连接其他外设的端口)。
  • ov5695_out: endpoint:摄像头的输出端点(标签为ov5695_out)。
  • remote-endpoint = <&dphy1_in>:指定数据流向——连接到dphy1_in端点(即RK3566的MIPI DPHY1控制器的输入端点)。
  • data-lanes = <1 2>:使用2条MIPI数据通道(Lane 1和Lane 2),符合OV5695的2 Lane配置(最大支持2路数据传输)。

总结

这段配置的核心作用是:通过I2C4总线注册OV5695摄像头,定义其硬件连接(GPIO控制引脚、时钟、电源),并关联MIPI数据传输通路,使内核驱动能正确初始化摄像头并接收图像数据

实际调试时需注意:

  • I2C地址(0x36)是否与硬件一致(可通过i2cdetect -y 4扫描验证)。
  • GPIO引脚(如reset、pwdn)是否与原理图匹配(错误会导致摄像头无法复位或上电)。
  • MIPI通道数(2 Lane)是否与DPHY控制器配置一致(否则会出现图像花屏或无数据)。
  • 注释中提到的“I2C4 SDA与摄像头PWD冲突”需在硬件设计或驱动中规避(如添加隔离电路或调整引脚复用)。

/home/gan/rk3566/kernel/drivers/media/i2c

在这里插入图片描述

看到 IMX 415
在这里插入图片描述

四、实际摄像头引脚

在这里插入图片描述
在这里插入图片描述
对比正点原子的摄像头引脚

CSI 数据线
D0-D3:P
D0-D3:N
CSI 数据时钟线
CLK-P
CLK-N
CSI 复位引脚
RST
CSI 电源管理引脚
PDN
CSI 驱动时钟
CSI-CLK
摄像头配置引脚
iic4 SCL
iic4 SDA


总结

学习使人快乐!
音乐使人愉悦!
日积月累使人充实和自信!

为移植IMX415 做准备

http://www.dtcms.com/a/320675.html

相关文章:

  • 线程池基础知识
  • gmssl私钥文件格式
  • Arm Qt编译Qt例程出错 GLES3/gl3.h: No such file or directory
  • 【前端后端部署】将前后端项目部署到云服务器
  • 终端是什么,怎么用?
  • 基于Spring Boot的Minio图片定时清理实践总结
  • Mac下安装Conda虚拟环境管理器
  • Vue3 计算属性与监听器
  • 基于django电子产品销售系统的设计与实现/基于python的在线购物商城系统
  • 豆包新模型矩阵+PromptPilot:AI开发效率革命的终极方案
  • 3 种简单方法备份 iPhone 上的短信 [2025]
  • 僵尸进程、孤儿进程、进程优先级、/proc 文件系统、CRC 与网络溢出问题处理(实战 + 原理)
  • 从安卓兼容性困境到腾讯Bugly的救赎:全链路崩溃监控解决方案-卓伊凡|bigniu
  • 【前端】纯代码实现Power BI自动化
  • 【Linux系统】万字解析,文件IO
  • 代码随想录刷题Day26
  • 最长回文子串
  • Redis(④-消息队列削峰)
  • 使用OAK相机实现智能物料检测与ABB机械臂抓取
  • 《Hive、HBase、StarRocks、MySQL、OceanBase 全面对比:架构、优缺点与使用场景详解》
  • Numpy科学计算与数据分析:Numpy数据分析与图像处理入门
  • [激光原理与应用-182]:测量仪器 - 光束型 - 光束质量分析仪
  • 无人机航拍数据集|第9期 无人机风力电机表面损伤目标检测YOLO数据集2995张yolov11/yolov8/yolov5可训练
  • WORD接受修订,并修改修订后文字的颜色
  • 2-等级保护
  • LabVIEW多循环架构
  • (已解决)IDEA突然无法使用Git功能
  • 利用千眼狼sCMOS相机开展冷离子云成像与测量实验
  • Mac上安装和配置MySQL(使用Homebrew安装MySQL 8.0)
  • LeetCode 面试经典 150_数组/字符串_加油站(14_134_C++_中等)(贪心算法)