RDK X5 4GB基于x5-rdk-gen导入自研TOF sensor,该如何操作,求指导

公司自研TOF Sensor之前在RK平台基于v4l2有一套驱动,MIPI+I2C接口,RAW12

地平线上camera驱动好像又是另一套

我照着手册1.1 硬件简介 | RDK X3/X5 DOC

扫描出了3个i2c设备,但是我们设备只有一个,不清楚怎么回事。

有导入tof sensor的指导手册吗,有没有例子可以参考的,我们是自研的tof sensor,SDK里并没有包含。

root@ubuntu:~# echo 353 > /sys/class/gpio/export
root@ubuntu:~# echo out > /sys/class/gpio/gpio353/direction
root@ubuntu:~# echo 0 > /sys/class/gpio/gpio353/value
root@ubuntu:~# echo 1 > /sys/class/gpio/gpio353/value
root@ubuntu:~# i2cdetect -y -r 6
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: – – – – – – – –
10: – – – – – – – – – – – – – – – –
20: – – – – – – – – – – – – – – – –
30: – – – – – – – – – – – – – – – –
40: – – – – – – – – – 49 – – – – – –
50: 50 – – – – – – – 58 – – – – – – –
60: – – – – – – – – – – – – – – – –
70: – – – – – – – –

84cf4442182cb5d443ebc8607fdb52ec

这是另一篇贴子里的回复,是不是只能拿着方案找地平线定制开发了?

咱们是哪家公司 前期有商务层面的建联吗 也可以同步下项目背景 这一类论坛侧一般是通过开放的手册 或者 仓库提供一些解决方向和思路

聚芯微电子TOF Sensor

商务正和地平线接洽ISP算法相关事宜

没有地平线介入,驱动及数据流,能否自己打通

没有 TOF 专用教程,但 X5 有一套通用的 camera sensor bring-up 流程,按它适配是可行路径,能否走通取决于你 TOF 的 I2C 时序和 MIPI 输出格式(datatype、打包方式)能不能对应到 X5 的配置项里。另外 X5 用的是 hbn/VIN + sensor_module_t 框架,不是 RK 上的 V4L2 subdev,RK 那套驱动不能直接搬过来。

流程和例子都在 X5 SDK 文档里:

  • Camera 调试指南:dts 的 vin_vcon 节点里配 sensor 的 GPIO、I2C bus 和 lpwm_chn;MCLK 在对应 mipi_host 节点配置 pinctrl 和 snrclk-idx,使用 LPWM 时还需使能对应 LPWM 控制器 → 在 hbre/camsys/libcam/src/sensor/ 新增 <name>_utility.c 实现 sensor_module_t,./bd.sh hbre camsys/libcam 编译出 lib<name>.so,放到板端 /usr/hobot/lib/sensor/ → 在 app/samples/platform_samples/vp_sensors 里按 vp_sensor_config_t 配 MIPI/SIF/LPWM/ISP → 准备 <name>_tuning.json → 用 get_vin_data / get_isp_data 验证出图。
  • 可以直接当模板的三份完整例子:OmniVision os08c10、SmartSens sc132gs、Sony imx586。
  • 点亮过程中 i2c/MCLK/MIPI 的报错排查看 Camera 调试 FAQ。

要提前想清楚的是 ISP 这一环:X5 的 ISP 只接收 RAW(Bayer) 输入,FAQ 里“如何配置 yuv sensor”那节给的思路是跳过 ISP、把数据从 SIF 直出自己对接后级。所以先确认你的 RAW12 是标准 Bayer 排列,还是深度/相位一类数据:如果是后者,可参考这条跳过 ISP 的思路去找取数路径,但具体 datatype、pack_mode/stride 和数据解析方式要按 TOF 手册和 X5 支持的格式清单确认,这类数据也没有 ISP tuning 可用。

I2C 的疑问:bus6 是靠网口那路 mipi_host0,对应手册里 gpio353 那套命令,总线你没扫错。官方示例里的单地址结果(IMX219 的 0x10)是在另一路 mipi_host2/bus4 上扫到的,文档没有列出 bus6 上除模组自身以外还有哪些固定从设备;所以 0x49/0x50/0x58 到底来自板卡、模组还是转接板,实测确认前判断不了,不能只看地址数量。做法是对照你模组的 7bit 地址表、读各地址的 chip ID 寄存器,确认哪个是 TOF。扫描时除了 reset,也把 MCLK 给上:echo 24000000 > /sys/class/vps/mipi_host0/param/snrclk_freq、echo 1 > /sys/class/vps/mipi_host0/param/snrclk_en。

我会在 X5 4GB 上核一下这两条相机总线在空载和按官方时序使能后的地址分布(看是否存在板卡侧固定从设备),并列出板端现成的 sensor 库清单;没有接你的模组,所以只能说明板卡侧的情况。另外麻烦同步两点:TOF 的 7bit I2C 地址,以及 RAW12 是不是 Bayer 排列。

先纠正我上一条里的一个错处:官方手册给的 sysfs 开 MCLK 那两条命令(echo 24000000 > /sys/class/vps/mipi_host0/param/snrclk_freq、echo 1 > .../snrclk_en)在一台 RDK X5 4GB(3.5.0-beta、6.1.83、运行 x5-rdk-v1p0.dtb、未接相机模组)上写入会被拒,返回 Operation not permitted,dmesg 是 vin mipi0: snrclk set freq not support / set en not support。原因是该 DTB 的 mipi_host0/2 节点没有 pinctrl-0/1 和 snrclk-idx;EVB 系 DTB 里 snrclk-idx=0,SOM/SVB 上是 2,所以不能理解成"只有官方 EVB 才配 MCLK"。若你的 TOF 需要 X5 提供主时钟,要按 Camera 调试指南 5.17.2.5 第 3 节在自己的 DTS 里给对应 mipi_host 补 pinctrl-names/pinctrl-0/pinctrl-1 + snrclk-idx;模组自带晶振则不需要。核对时可以先 cat /sys/class/vps/mipi_host0/status/snrclk 看支持项,但最终要以 snrclk_freq/snrclk_en 实际写入成功、并从读回值和 dmesg 确认,不能只凭 status 行判定可用(Camera 调试 FAQ 的 MCLK 一节也是这个思路)。

bus6 那 3 个地址:同一块板子上,我分别在 reset GPIO 未动作、只做 gpio353 低→高、以及释放后各扫一遍,bus6 和 bus4 都没有任何从设备地址,板卡侧没有可复现的固定从设备。所以 0x49/0x50/0x58 应来自你接的模组或转接板(0x50 通常是模组 EEPROM,但这是经验判断,要用 i2cget -y -f 6 <addr> <chip_id_reg> 读 chip ID 或对照 datasheet 确认哪个是 TOF)。另外 gpio353 对应本板 vcon@0/bus6,你扫 bus6 没扫错,地址数量对不上不代表板子有问题。

驱动有两条路,都可行但都要你自己跑通验证:一是手册主推的 HBN 路径(hbre/camsys/libcam/src/sensor/<name>_utility.c 实现 sensor_module_t → ./bd.sh hbre camsys/libcam → lib<name>.so 放 /usr/hobot/lib/sensor/);二是本板 /usr/hobot/lib/sensor 里已有 5 个 V4L2 型库(libimx219_v4l2、libimx477_v4l2、libov5640_v4l2、libov5647_v4l2、libsc230ai_v4l2)配对应 imx219.ko/imx477.ko/ov5640.ko/ov5647.ko/sc230ai.ko 内核模块,libsensor_drv.so 就是按 lib<name>_v4l2.so 加载并用 V4L2 CID 控增益/曝光的。你们已有 RK 下的 V4L2 驱动,这条更贴近你们的代码,可以当模板,但 X5 侧的接入仍要自己适配。数据通路这边边界不变:X5 ISP 只吃 RAW Bayer,如果 TOF 出的是深度/相位这类非 Bayer 数据,就按 FAQ 里 yuv sensor 那节的写法跳过 ISP、从 SIF 直出给后级。

本次没接你们的模组,板侧只核到两条总线的空载状态和 MCLK 配置路径,出图与 MIPI 数传没验证。给三个信息我能判断得更具体:TOF 的 7bit I2C 地址、RAW12 是标准 Bayer 排列还是深度/相位数据(及 MIPI 的 datatype/打包方式)、MCLK 是否需要 X5 提供。

一个相机模组上可能还有 EEPROM、温度传感器等器件,所以扫到多个 I2C 地址不一定异常,但这三个地址具体对应什么,需要查你们的模组原理图或现有 RK 驱动。

建议先找到 Sensor 的 I2C 地址和芯片 ID 读取方式,再读取 ID 确认。注意区分 7 位地址和 8 位读写地址,i2cdetect 显示的是 7 位地址。也可以断电拔掉模组后重新开机扫描,对比哪些地址消失,先确认哪些响应来自模组。

确认通信正常后,可以参考 X5 已有的 TOF 实现开展适配:

  • Sensor 驱动:迁移你们的初始化、上下电和开关流逻辑,接入 X5 Sensor 接口。
  • RAW12 采集配置:按实际参数配置 lane、速率、VC、传输宽高和帧率,并核对设备树中的接口配置。
  • get_vin_data 示例:先抓 RAW,验证数据完整性和帧率,再接后续算法。

相关仓库可以按 x5-manifest 拉取。这部分有公开的适配路径,具体需要结合你们的 Sensor 资料做实机验证。这边可以点击上面的“商务”,然后走DGP,之后会有对应的FAE来帮助协助进行senosr接入。论坛侧暂时能协助进行信息排查。只能基于你这边提供的信息来给出一些建议或者方向。

结论:能自己打通。 X5 有公开的 camera bring-up 流程(dts + sensor_module_t 驱动 + app 配置 + 效果库),你们的 I2C/上下电时序和 MIPI 出数按它接就行,不必先等定制开发。要商务/DGP 配合的是 ISP 这一层:X5 ISP 只吃 RAW Bayer。如果 RAW12 出的是深度/相位这类非 Bayer 数据,就按 FAQ 的 yuv sensor 一节 的思路跳过 ISP、从 SIF 直出,效果由模组保证,也没有 ISP tuning 可用;如果是标准 Bayer,就正常走 ISP,调效果才是 DGP(https://developer.d-robotics.cc/dgp)那条线的价值。

I2C 那 3 个地址:在 X5 4GB(3.5.0-beta、6.1.83、运行 x5-rdk-v1p0.dtb、未接相机模组)上,我分别测了 reset 未动作、gpio353 低→高、以及释放后三种状态,bus6 和 bus4 都没有任何从设备地址——板卡侧没有可复现的固定地址。所以 0x49/0x50/0x58 来自你们模组或转接板;用 i2cget -y -f 6 <addr> <chip_id 寄存器> 读 chip ID 对照 datasheet 确认哪个是 TOF(0x50 常见是模组 EEPROM,这只是经验判断)。本板 vcon@0 就是 bus6/gpio353,你扫 bus6 没扫错。

MCLK:手册里的 sysfs 命令(echo 24000000 > /sys/class/vps/mipi_host0/param/snrclk_freq、echo 1 > .../param/snrclk_en)在这台机器上写入被拒,dmesg 是 vin mipi0: snrclk set freq not support——x5-rdk-v1p0.dtb 的 mipi_host 节点里没有 pinctrl-0/1 和 snrclk-idx(同一镜像的 EVB 系 DTB 这两个值是 snrclk-idx=0,SOM/SVB 是 2,不是"只有 EVB 才配")。模组自带晶振就不用管;要 X5 出时钟,就在自己的 dts 里给对应 mipi_host 补 pinctrl-names/pinctrl-0/pinctrl-1 + snrclk-idx(写法见 5.17.2.5 修改平台设备树),判定以 snrclk_freq/snrclk_en 实际写入成功并读回/dmesg 为准,.../status/snrclk 只作辅助。

驱动落点:手册主路径是 hbre/camsys/libcam/src/sensor/<name>_utility.c 实现 sensor_module_t → ./bd.sh hbre camsys/libcam → 把 lib<name>.so 放到 /usr/hobot/lib/sensor/ → app 侧照 app/samples/platform_samples/vp_sensors 配 vp_sensor_config_t → 放 <name>_tuning.json → 用 get_vin_data / get_isp_data 抓 raw 验证。板端另外还有 5 个 V4L2 型库(libimx219_v4l2、libimx477_v4l2、libov5640_v4l2、libov5647_v4l2、libsc230ai_v4l2,配 imx219.ko/imx477.ko/ov5640.ko/ov5647.ko/sc230ai.ko),libsensor_drv.so 里能看到按 lib<name>_v4l2.so 加载、用 V4L2 CID 控增益曝光的字符串:你们现有的 RK V4L2 驱动更贴近这条,但手册没公开这条路径的适配步骤,两条都要你们自己跑通验证。板端也有 libirs2875.so,公开仓库 x5-libcam-sensor 里有对应的 irs2875 实现,可当同类参考。

本次没接你们的模组,只核到板卡侧的总线状态和 MCLK 配置路径,MIPI 数传和出图没验证。给我三个信息就能判断该走哪条路:TOF 的 7bit I2C 地址、RAW12 是标准 Bayer 还是深度/相位(含 MIPI datatype、打包方式)、MCLK 是否要 X5 提供。

需要X5提供时钟及复位信号,TOF 7bit i2c地址是0x26,扫描出来对应不上很奇怪

MIPI数据流格式RAW12,一帧数据包含多幅图像,包括相位+灰度+背景,数据格式通常是640x(480+1)x2x10,

长度:640

宽度:480 + 1行 info信息

位宽:2

帧数:10(10帧经过算法出一帧深度图像)

另外,x5-rdk-gen没找到hbre/camsys/libcam/src/sensor/_utility.c,也没有找到任何sensor的驱动代码,在哪里能访问

驱动源码在哪:手册 5.17.2.6 写的 hbre/camsys/libcam/src/sensor/ 是 BSP 源码包(platform_source_code 那套)的组织方式,x5-rdk-gen 里没有这一层。你截图里 /work 下 source/hobot-camera/drivers/ 的那批 *_utility.c 就是全部 sensor 实现(imx219/imx477/ov5647/sc132gs/dummy…),头文件在 source/hobot-camera/drivers/inc/hb_cam_utility.h;接口按 Camera 调试指南 5.17.2.6 的 sensor_module_t 写,最终产物落到板端 /usr/hobot/lib/sensor/lib<name>.so。同类参考还可以看板端自带的 libirs2875.so(Melexis ToF),公开仓库 x5-libcam-sensor 里有它的实现。x5-rdk-gen 仓库本身见 RDK OS 开发指南。

0x26 扫不到:i2cdetect 显示的就是 7bit 地址,0x26 应该直接出现(0x4C 才是 8bit 写法),所以不是地址格式问题。之前在一台 RDK X5 4GB(3.5.0-beta、6.1.83、x5-rdk-v1p0.dtb)上空载扫 bus6/bus4 没有任何地址,因此 0x49/0x50/0x58 来自你们模组/转接板(0x50 一般是 EEPROM,属经验判断)。模组侧有器件应答说明 I2C 供电和上拉是通的,更可能是 TOF 本身没起来——按 FAQ 的 i2c 不通 顺序核对:XCLR 电平、MCLK 管脚实测有 24M 波形、1.2/1.8/2.8V 供电、以及你们原理图上 PC_GATE_SIF2610 这个使能脚由谁控制、当前什么电平。

要 X5 出 24MHz 的话:echo 24000000 > /sys/class/vps/mipi_host0/param/snrclk_freq 在那台板子上会被拒(Operation not permitted,dmesg vin mipi0: snrclk set freq not support),原因是运行的 x5-rdk-v1p0.dtb 里 mipi_host 节点没有 pinctrl-0/1 和 snrclk-idx(同镜像 EVB 系 DTB 有,snrclk-idx=0)。你板子先 cat /sys/class/vps/mipi_host0/status/snrclk 确认是不是同样情况,然后在自己的 dts 按 5.17.2.5 第 3 节给对应 mipi_host 补:

&mipi_host0 {
    pinctrl-names = "enable", "disable";
    pinctrl-0 = <&pinctrl_sensor0_mclk>;  /* 用你们源码里 mclk 那组的标签 */
    pinctrl-1 = <&lsio_gpio0_24>;
    snrclk-idx = <0>;                     /* 索引要和你们实际接的 mclk 一致 */
};

重编 DTB 后以 snrclk_freq/snrclk_en 写入成功 + 读回 + dmesg 判定(status/snrclk 只作辅助),时钟起来再拉 XCLR 扫 bus6。

数据流:RAW12 但一帧是 640x(480+1)、10 个子帧才出一帧深度、又不是 Bayer 排列 → ISP 这条路直接排除,按 FAQ yuv sensor 那节的结论从 SIF 直出到 DDR/后级模块,解析由你们自己写,效果由模组保证,也就不存在必须走 DGP 的 ISP 调优环节。

两个信息能让我把配置说具体:① 这 24MHz 是从 X5 哪根脚给的(你们那张 22pin FPC 脚位里没有时钟脚,是飞线还是模组自带晶振)?② 10 个子帧在 MIPI 上是 10 个独立帧还是一个长帧,12bit 是 1.5B/px packed 还是 2B/px 容器?

这次没有再上板核对,上面的板端读数是此前在那台 RDK X5 4GB 上做的只读检查,出图与 MIPI 数传未验证。

看图,X5_XCLR为模组复位信号,X5_XVS为24M时钟信号,需要X5提供,这两路对应X5原理图J14接口的GPIO1/GPIO2,该如何配制DTS(看了手册也不清楚DTS里的配制该如何填写)

10个子帧是一个长帧,12bit是1.5B/px packed,DMA搬到BUF会往raw12高位填0组成2byte数据

复位/使能这类 GPIO 填在 vin_vcon* 节点,24M 主时钟填在对应的 mipi_host* 节点——两处都要用你们板子实际的那根 pad,不能照抄文档 EVB 示例里的 I2C4/498/mclk0(RDK X5 是另一套)。节点名/索引按你们源码 dtsi 和原理图定,vcon 号与 mipi_host 号一一对应。

时钟(X5 供 24M):只能配在 mipi_host 节点里,sysfs 那两条 snrclk 命令能写的前提就是节点里有这三个属性:

&mipi_host<N> {
    status = "okay";
    pinctrl-names = "enable", "disable";
    pinctrl-0 = <&该口 mclk 对应的 pinctrl 标签>;
    pinctrl-1 = <&同一根 pad 的 gpio 态标签>;
    snrclk-idx = <该口使用的 mclk 索引>;
};

标签和索引从你们源码 dtsi 的 pinctrl 节点按 pad 名找;同一 SDK 里 EVB 的 dtsi 已给 mipi_host 配过这几个属性,照写法换成你们的 pad 即可。MCLK 默认是 GPIO pin,使能 snrclk 时驱动才通过 pinctrl 切到 mclk 功能(FAQ MCLK 一节)。

复位/使能:填在对应 vin_vcon 里,gpio_oth 支持多个控制脚,按顺序列;编号用 hb_gpioinfo 查 PinName↔GPIO 得到(工具说明):

&vin_vcon<N> {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&XCLR 那根 pad 的 gpio 组>;
    gpio_oth = <XCLR 编号 其他控制脚编号 …>;
    bus = <6>;              /* 与 mipi_host 绑定的 I2C 号,不是 6 就以你们实际接线为准 */
    /* 若模组需要 X5 出同步/触发:lpwm_chn = <N>; 并在对应 &lpwmX 里使能该通道 pinctrl */
};

你们的 PC_GATE_SIF2610 若也由 X5 控制,同样列进 gpio_oth。XCLR 极性、上电时序按模组手册,不要沿用 EVB 的 0→1。

要先分清的一点:你们模组侧 CLK_24MHz 与 XVS 是两根网络,而 X5 侧「24M 主时钟」和「帧同步/触发」是两条不同路径——时钟是上面的 mipi_host/snrclk,同步/触发是 LPWM(lpwm_chn,属 slave mode 才需要)。所以请按转接板网表确认 FPC pin18(X5_XVS)在模组侧落到 CLK_24MHz 还是 XVS:落到 XVS 而只配了 MCLK,模组仍拿不到时钟,你的 0x26 就不会出现;反之则是不出流。

验证:重编 DTB 后按手册 5.17.2.5 第 5 节手动开复位 + snrclk,再 i2cdetect -y -r 6 应看到 0x26。若 snrclk_freq 写入返回 Operation not permitted、dmesg 是 vin mipi0: snrclk set freq not support,说明该 mipi_host 节点还缺 pinctrl-0/1 和 snrclk-idx(此前在一台 RDK X5 4GB、3.5.0-beta、运行 x5-rdk-v1p0.dtb 时读到过这个状态;同镜像 EVB/SOM 的 DTB 里这两个属性是有的,属 DTB 配置差异)。写入成功以读回 freq/state 为准,再用万用表/示波器量 XCLR 与时钟脚波形。J14 各脚网络可对照 RDK X5 原理图。

数据通路:10 子帧拼一个长帧 + RAW12 1.5B/px packed + 落 buf 为 2B/px 高位补 0,这就是「非 Bayer 长帧」——ISP 不能用,只能从 SIF/VIN 直出、你们自己按 640×(480+1)×10 解析。能否整帧收下、SIF 的宽高/行数上限与 stride/pack_mode/mipi host 的 ipi_16bit 怎么配,文档里没有这种非 Bayer 长帧的现成例子,要按实际 datatype、VC 和数据量在 vp_sensor_config_t 的 MIPI/SIF 配置里核对,只有实际推流才算验证。

两个信息能让我把填法说具体:① 转接板上 pin18 究竟接到模组 CLK_24MHz 还是 XVS;② XCLR 极性与 PC_GATE_SIF2610 由谁驱动(模组手册/你们原理图)。

这次板卡环境不可用、没有上板,上面的板端读数都是此前在那台 RDK X5 4GB 上做的只读检查,出流与帧组织未验证。时钟/复位这类要拿模组手册、原理图和实测波形对齐的适配,论坛可以先帮你们把配置和数据通路梳理清楚;真正联调时可能还需要通过 DGP 做项目层面对接,协调 FAE 一起看原理图和波形。

主要还是资料不全,没有RDK X5 4GB的硬件原理图,我不知道复位和mclk用的哪路gpio

代码x5_rdk.dtsi里注释写到,mclk用外部晶震,不知是什么意思

两个问题分开答,都不需要先拿到 X5 4GB 主板原理图。

1. 复位用哪路 GPIO,读你自己的运行设备树就有。 vcon@N 的 gpio_oth 就是这一路的复位(时序控制)GPIO,bus 是它绑定的 I2C 号,vcon 号与 mipi_host 号一一对应(手册 5.17.2.5 第 1、2 节)。在这台 RDK X5 4GB(3.5.0-beta、6.1.83、x5-rdk-v1p0.dtb)上读到:vcon@0 bus=6、gpio_oth=353、lpwm_chn=4;vcon@2 bus=4、gpio_oth=351、lpwm_chn=5。也就是你扫 bus6 那路复位就是 353,和你已经 export 的 gpio 对得上。你自己核一遍:

dtc -I fs -O dtb -f -o /tmp/board.dtb /sys/firmware/devicetree/base
fdtget -t u /tmp/board.dtb /soc/cam/vcon@0 gpio_oth   # 复位 GPIO
fdtget -t u /tmp/board.dtb /soc/cam/vcon@0 bus        # I2C 号
fdtget -t u /tmp/board.dtb /soc/cam/mipi_host@3d060000 snrclk-idx

(把 vcon@0 / mipi_host@3d060000 换成你实际用的那一路。)手册 5.17.2.3 的表格里 353 标为 LSIO_GPIO1_06,可用 hb_gpioinfo 核对管脚名;"编号 → J14 第几脚"这一步才需要原理图或转接板网表,RDK X5 原理图在下载汇总里有:RDK_X5_IO_CONN_PUBLIC_V1.1.pdf。

2. "mclk 用外部晶振"的意思:5.17.2.5 第 3 节写的是 MCLK「若由 X5 提供」才需要在对应 mipi_host 节点配 pinctrl 和 snrclk-idx。这句注释是说这条板级路径上 sensor 主时钟不由 X5 的 snrclk 输出提供,所以 mipi_host 里没有 mclk 引脚可配。同一台板子上确实如此:mipi_host@3d060000/@3d080000 没有 pinctrl-0/1 和 snrclk-idx,写 snrclk_freq/snrclk_en 直接被拒,dmesg 是 vin mipi0: snrclk set freq not support(同镜像的 EVB 系 DTB 有这两个属性、snrclk-idx=0)。这只说明当前 DTB 没配这条路径,硬件上是否真拉不出时钟,要看原理图里对应脚有没有接到连接器。

所以下一步只有一个判断点:你们模组/转接板上 CLK_24MHz 这根的驱动源是谁——模组自带晶振、转接板上的晶振,还是 X5 的引脚?前两种,X5 侧不需要任何时钟配置;确实要 X5 出,再确认那根脚在 X5 侧是否可复用为 mclk(源码 pinctrl 里 pinctrl_sensorN_mclk 组对应哪根 pad),然后才谈 mipi_host 的 pinctrl-0/1 + snrclk-idx,以写入成功 + 读回 + dmesg 判定。同时按网表确认 X5_XVS 在模组侧落的是 CLK_24MHz 还是 XVS:手册里同步/触发走 LPWM(lpwm_chn,slave mode 用),MCLK 走 mipi_host/snrclk,是两条不同的路径,别直接把它当时钟脚去配 mclk。

时钟/复位这类最后要拿模组手册、网表和实测波形对齐;论坛先帮着把 X5 侧这路和配置项定下来,具体到你们模组的适配联调可能还需要走 DGP 做项目层对接,由 FAE 结合实际原理图和波形一起看。

这次没有上板验证,上面的板端读数来自此前在那台 RDK X5 4GB 上的只读检查。

哪里有《X5 PIN SW Reg.xlsx》下载

这份表不在文档正文里,正式文件名是 《X5 PIN SW Reg-V1.1.xlsx》,放在官网 datasheets 下载目录:Index of /downloads/datasheets/ 。出处是 GPIO 调试指南 和 Pinctrl 调试指南 的“管脚查询”一节,两页都指向这个目录。

下载后按要查的东西选 sheet:

  • PIN Mux List:按 PinName 查默认 function 和每个 function 的 mux 值(对应代码里的 MUX_ALT0/1/2/3);
  • LSIO PIN Control Register:查复用/上下拉等寄存器偏移,地址 = 基地址 + 偏移;
  • DW_apb_gpio8_mem_map、DW_apb_gpio32_mem_map:查 GPIO 方向寄存器和数据寄存器。

如果只是要确认某个引脚的 PinName、GPIO 编号和当前复用功能,板端用 hb_gpioinfo 更快;手册里说明板卡上没这个工具时,可通过 apt 更新 hobot-io 获取。X5 的规格书、原理图在下载资源汇总里,其它资料可在 RDK 资料中心 统一查。

这轮没有做板端验证,以上给的是文档里的下载入口。