ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RV1103B平台SC132GS全局快门Sensor设备树配置避坑指南

RV1103B平台SC132GS全局快门Sensor设备树配置避坑指南 1. 为什么SC132GS在RV1103B上值得单独写一篇避坑指南SC132GS这颗Sensor在RV1103B平台上属于典型的看起来简单、配起来要命的器件。它是一颗132万像素的全局快门CMOS图像传感器MIPI CSI-2接口输出常见于智能车视觉、工业扫码、机器视觉这类对运动模糊敏感的场景。RV1103B则是瑞芯微面向低功耗IPC和AI视觉终端推出的SoC内置NPU、ISP和MIPI CSI接收控制器主打的就是小体积低功耗能跑轻量AI模型。把这两者凑到一起理论上是很自然的组合Sensor出图SoC接收、处理、编码。但实际动手你会发现设备树Device Tree这一关就能卡住不少人。原因不复杂——RV1103B的DTS文件结构、I2C挂载方式、MIPI CSI端口映射、时钟与复位GPIO的写法跟RK3568、RK3588那套有相似之处但细节差异不小网上能直接抄的完整示例又少。很多人第一次配的时候要么I2C探测不到设备要么Media Controller里看不到entity要么出图花屏、绿屏、只有一半画面。这篇内容就是把我自己在RV1103B上给SC132GS加设备树节点的完整过程拆开讲。适合两类人看一类是刚拿到RV1103B开发板、想把SC132GS点亮的嵌入式新手另一类是从RK3568/RK3588平台转过来、被看起来差不多的DTS坑过的老手。我会把每个节点为什么这么写、参数怎么算、哪些地方最容易翻车都讲清楚尽量让你少走我走过的弯路。需要提前说明的是不同厂家的RV1103B核心板/开发板在GPIO编号、I2C总线号、MIPI CSI lane分配上可能有差异下面给出的具体数值以我手头这块板子的原理图为准你移植时一定要对照自己的原理图改。这是嵌入式调试的铁律没有之一。2. 动手前必须搞清楚的硬件与软件前提2.1 硬件连接关系先理一遍在写任何一行DTS之前我习惯先把硬件关系画在纸上。SC132GS和RV1103B之间的连接无非这么几组供电Sensor通常需要几路电源SC132GS常见的是AVDD模拟约2.8V、DVDD数字核心约1.2V、DOVDDIO1.8V或2.8V。这些一般由板载LDO或PMIC提供DTS里通常不需要你直接管但要知道它们存在因为供电不对一切免谈。I2C用于读写Sensor寄存器SC132GS的7位从地址常见为0x30写0x60/读0x61。它挂在RV1103B的某一路I2C上具体哪一路看原理图。MIPI CSI-2图像数据通道包含1对或2对差分数据lane加1对时钟lane。SC132GS常见配置是2 lane。MCLK主时钟输入通常由SoC的某个时钟输出引脚提供频率常见24MHz。复位RESET和电源使能PWDN两个GPIO用于上电时序控制。中断可选有些设计会接但SC132GS在很多应用里用轮询或直接流式采集不一定用中断。这几组里I2C、MIPI、MCLK、GPIO是DTS里必须体现的缺一个都点不亮。2.2 软件环境与内核版本确认RV1103B的SDK一般基于Linux 5.10或相近版本的内核瑞芯微的BSP里已经带了完整的V4L2 Media Controller框架和Rockchip ISP驱动rkisp。你需要确认几件事内核版本uname -r或者直接看SDK里的Makefile。设备树目录通常在arch/arm/boot/dts/RV1103B是ARM Cortex-A732位或者arch/arm64/boot/dts/rockchip/具体看SDK组织方式。RV1103B是32位核所以大概率在arch/arm/boot/dts/下。是否已有类似Sensor的DTS示例SDK里一般会带sc3336、gc2053之类的参考这些是你最好的模板。我强烈建议先grep一下SDK里现成的Sensor节点比如grep -rn sc3336 arch/arm/boot/dts/找到参考文件后整个移植过程就变成了照着改而不是从零编。这一步能省你至少半天时间。2.3 确认I2C地址和MIPI lane数这两个参数如果搞错后面所有调试都是白费。确认方法I2C地址查SC132GS数据手册或者用i2cdetect在总线上扫。前提是Sensor已经上电且MCLK有输出否则扫不到。MIPI lane数看原理图SC132GS的MIPI输出lane数由寄存器配置决定但硬件上走几对差分线是固定的。DTS里的>i2c3 { status okay; clock-frequency 400000; sc132gs: sc132gs30 { compatible smartsens,sc132gs; reg 0x30; clocks cru CLK_MIPI_CAMARAOUT_M2; clock-names xvclk; power-domains power RV1103B_PD_VI; pinctrl-names default; pinctrl-0 mipim0_camera2_clk; reset-gpios gpio1 RK_PB0 GPIO_ACTIVE_LOW; pwdn-gpios gpio1 RK_PB1 GPIO_ACTIVE_HIGH; rockchip,grf grf; rockchip,camera-module-index 0; rockchip,camera-module-facing back; rockchip,camera-module-name SC132GS; rockchip,camera-module-lens-name default; port { sc132gs_out: endpoint { remote-endpoint mipi_in_sc132gs; >reset-gpios gpio1 RK_PB0 GPIO_ACTIVE_LOW; pwdn-gpios gpio1 RK_PB1 GPIO_ACTIVE_HIGH;这两行的关键是极性。GPIO_ACTIVE_LOW表示低电平有效也就是驱动拉低这个GPIO时执行复位。GPIO_ACTIVE_HIGH表示高电平有效。极性搞反Sensor要么一直复位要么一直掉电。确认极性的方法查原理图看复位引脚是接上拉还是下拉以及Sensor手册里复位是低有效还是高有效。SC132GS一般是复位低有效、PWDN高有效但不同模组设计可能不同。3.6 port/endpointMIPI链路描述port { sc132gs_out: endpoint { remote-endpoint mipi_in_sc132gs; >mipi_csi2 { status okay; ports { #address-cells 1; #size-cells 0; port0 { reg 0; #address-cells 1; #size-cells 0; mipi_in_sc132gs: endpoint0 { reg 0; remote-endpoint sc132gs_out; >rkisp { status okay; ports { port0 { reg 0; #address-cells 1; #size-cells 0; isp_in: endpoint0 { reg 0; remote-endpoint mipi_csi2_out; }; }; }; };这样整条链路就是SC132GS - MIPI CSI2 - ISP - 视频节点/dev/videoX。任何一环断了media-ctl -p都能看出来。4.4 用media-ctl验证链路DTS编译烧录后第一件事不是急着出图而是验证Media Controller链路media-ctl -p正常的话你应该能看到类似这样的拓扑- entity 1: sc132gs 0-0030 (1 pad, 1 link) pad0: Source - rockchip-mipi-csi2:0 [ENABLED] - entity 2: rockchip-mipi-csi2 (2 pads, 2 links) pad0: Sink - sc132gs 0-0030:0 [ENABLED] pad1: Source - rkisp-isp-subdev:0 [ENABLED]如果某个link显示[IMMUTABLE]或者根本没出现说明DTS里的remote-endpoint没对上。如果entity出现了但link是disabled可能是status没设成okay。5. 实操全流程从改DTS到出图5.1 第一步找到并修改板级DTS假设你的板级DTS是rv1103b-myboard.dts先确认它include了SoC级的dtsi#include rv1103b.dtsi然后在文件末尾添加或修改I2C、MIPI CSI、ISP相关节点。我习惯把Sensor节点放在I2C节点内部MIPI和ISP的修改放在文件靠后的位置保持结构清晰。5.2 第二步编译设备树RV1103B SDK一般用make加dtb目标make ARCHarm rv1103b-myboard.dtb或者直接编译整个内核make ARCHarm -j$(nproc)编译报错最常见的是语法问题比如少了大括号、#address-cells写错、引用了不存在的label。DTC的报错信息一般比较明确照着改就行。5.3 第三步烧录并检查probe烧录dtb后重启看内核日志dmesg | grep -iE sc132gs|mipi|csi|rkisp正常应该看到sc132gs 3-0030: probing... sc132gs 3-0030: Detected SC132GS sensor, id(0x1326) rockchip-mipi-csi2: probe success rkisp: probe success如果看到probe failed或者根本没有sc132gs的日志说明compatible没匹配上或者I2C没通。5.4 第四步I2C手动验证在probe之前可以先手动确认I2Ci2cdetect -y 3如果0x30位置显示30说明I2C通了。显示--说明没通回去查MCLK、复位、供电。5.5 第五步配置Media Controller并出图链路验证通过后用v4l2-ctl配置格式并抓帧media-ctl -d /dev/media0 --set-v4l2 sc132gs 3-0030:0[fmt:SBGGR10_1X10/1280x720] media-ctl -d /dev/media0 --set-v4l2 rockchip-mipi-csi2:0[fmt:SBGGR10_1X10/1280x720] v4l2-ctl -d /dev/video0 --set-fmt-videowidth1280,height720,pixelformatBG10 v4l2-ctl -d /dev/video0 --stream-mmap --stream-count10 --stream-toframe.raw抓到的raw帧可以用工具转成图片查看。如果图正常恭喜你DTS配置成功。5.6 参数选择记录表下面是我这次配置的关键参数记录供对照参数值说明I2C总线i2c3对照原理图I2C地址0x307位地址MCLK源CLK_MIPI_CAMARAOUT_M2对应物理引脚MCLK频率24MHzSensor手册要求复位GPIOgpio1 PB0低有效PWDN GPIOgpio1 PB1高有效>
返回列表