Other Parts Discussed in Thread: AM62A3-Q1, AM62A3
器件型号: AM62A3-Q1
主题: AM62A3 中讨论的其他器件
团队、
我们需要使用成像仪驱动程序将 AM62A3-Q1 连接到 ST 微型成像仪涩谷。
到目前为止、ST 仅为 rasperry Pi 提供驱动程序来连接 Libcamera。
系统在 Linux 上运行。
请告知如何继续。
谢谢您、Franz
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: AM62A3-Q1, AM62A3
器件型号: AM62A3-Q1
主题: AM62A3 中讨论的其他器件
团队、
我们需要使用成像仪驱动程序将 AM62A3-Q1 连接到 ST 微型成像仪涩谷。
到目前为止、ST 仅为 rasperry Pi 提供驱动程序来连接 Libcamera。
系统在 Linux 上运行。
请告知如何继续。
谢谢您、Franz
您好、
我可以提供一些背景信息:我们希望 将 vd1943.c 成像仪用于 OMS/DMS 应用。 该驱动程序使用“rpicam"应用“应用程序在采用最近发行版的 Rpi5 系统上工作。
我们 在这里找到了代码 、这意味着 libcameras “Simple pipeline “应该可以与基于“j721e-csi2rx"的“的器件配合使用;由于我们仍将使用 GStreamer(带 libcamerasrc)将视频流连接到“tiovxisp"库“库、因此我们认为应该可以使用“simple-cam"应用“应用程序进行流式传输。 (我们知道,根据 Omnivision 0x05b1s 成像仪应用手册、我们必须将 vd1943 成像仪与 tiovx 生态系统进行注册。)
此致
Stefan Birkholz
您好、Stefan:
感谢您提供了该传感器驱动程序的链接。 从快速看、这对我来说看起来很好。 一个问题是、我们电路板上的 CSI2RX 外设要求器件实现 v4l2_pad_ops get_frame_desc 函数。 这用于获取 CSI 完成滤波的虚拟通道。 默认虚拟通道取为 0。 所以,如果这是好的,我看不到一个问题。 我建议您实现这一点、尤其是在使用 SerDes 时。 有关实现示例、请参阅此处的 IMX219 传感器驱动程序: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/media/i2c/imx219.c?h=ti-linux-6.12.y#n490
对于流水线验证、我们可以帮助达到 v4l2 捕获工作的点 (yavta 或 gstreamer v4l2src)。 但除此之外、确保 libcamera 兼容性不是我们标准支持的一部分。
我们知道、根据 Omnivision 0x05b1S 成像仪的应用手册、我们必须将 vd1943 成像仪注册到 tiovx 生态系统。[/报价]您能解释一下此处参考的应用手册是什么吗? GStreamer 不使用 tiovx 捕获。 它在默认 Linux SDK 中使用 v4l2。
此致、
Jay
尊敬的 Jay:
感谢您的反馈! 我提到了“AM6xA ISP 调优指南“、在其中、如果我们的理解正确、则必须将成像仪添加到 TIOVX 模块中(以便通过“传感器名称“参数来称呼它)。
最初、我们将从最简单的设置开始:1 个虚拟通道、无需路由。 (目前也没有串行器/解串器。) 非常感谢您对管道验证的帮助;我们当然不是任何领域的专家、而且在很大程度上只是衡量我们前进的选择。
我将查看您提到的 get_frame_desc () 函数,但首先我必须击败我们的 Yocto 设置,将 libcamera 配方更新到更新的版本(我们目前有 libcamera-0.2.0 ,可能太旧了)。
周末愉快!
此致
Stefan
您好、Stefan:
感谢您的更新。 现在、我了解了通过将传感器添加到 TIOVX 是什么意思。
这是我的建议。 首先、使捕获正常工作。 为此、您无需担心 TIOVX。 GStreamer 支持 V4L2 捕获(v4l2src 节点)、我们就是这样使用。 更有可能,libcamera 也会使用类似的 V4L2 调用。 正常运行后、我们还可以帮助您进行 ISP 调优。
对于 Yocto、请随时在需要时提交另一个 E2E。 我对此不熟悉、我也更倾向于将这篇主题保留在主题上。
周末快乐!
此致、
Jay
尊敬的 Jay:
我们可以使用 Yocto — 无需再开一张票。
根据您的建议,我们实现了 get_frame_desc () 函数
--- vd1943.c-orig 2026-02-24 17:10:08.492811625 +0100
+++ vd1943.c 2026-02-24 17:28:06.048985785 +0100
@@ -1735,6 +1735,36 @@
.unsubscribe_event = v4l2_event_subdev_unsubscribe,
};
+static int vd1943_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad,
+ struct v4l2_mbus_frame_desc *fd)
+{
+ struct v4l2_subdev_state *state;
+ const struct v4l2_mbus_framefmt *fmt;
+ u8 bpp;
+ int ret = 0;
+
+ if (pad != 0)
+ return -EINVAL;
+
+ state = v4l2_subdev_lock_and_get_active_state(sd);
+ fmt = v4l2_subdev_state_get_format(state, 0);
+
+ memset(fd, 0, sizeof(*fd));
+ fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2;
+
+ bpp = vd1943_get_bpp(fmt->code);
+ fd->entry[0].stream = 0;
+ fd->entry[0].flags = V4L2_MBUS_FRAME_DESC_FL_LEN_MAX;
+ fd->entry[0].length = fmt->width * fmt->height * bpp / 8;
+ fd->entry[0].pixelcode = fmt->code;
+ fd->entry[0].bus.csi2.vc = 0;
+ fd->entry[0].bus.csi2.dt = vd1943_get_datatype(fmt->code);
+ fd->num_entries = 1;
+
+ v4l2_subdev_unlock_state(state);
+ return ret;
+}
+
static const struct v4l2_subdev_pad_ops vd1943_pad_ops = {
#if KERNEL_VERSION(6, 8, 0) > LINUX_VERSION_CODE
.init_cfg = vd1943_init_cfg,
@@ -1748,6 +1778,7 @@
#endif
.set_fmt = vd1943_set_pad_fmt,
.get_selection = vd1943_get_selection,
+ .get_frame_desc = vd1943_get_frame_desc,
};
static const struct v4l2_subdev_ops vd1943_subdev_ops = {
在我们的评估板上、设置如下:
Media controller API version 6.12.57
Media device information
------------------------
driver j721e-csi2rx
model TI-CSI2RX
serial
bus info platform:30102000.ticsi2rx
hw revision 0x1
driver version 6.12.57
Device topology
- entity 1: 30102000.ticsi2rx (7 pads, 7 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev0
pad0: Sink
[stream:0 fmt:Y8_1X8/2560x1440 field:none colorspace:raw]
<- "cdns_csi2rx.30101000.csi-bridge":1 [ENABLED,IMMUTABLE]
pad1: Source
[stream:0 fmt:Y8_1X8/2560x1440 field:none colorspace:raw]
-> "30102000.ticsi2rx context 0":0 [ENABLED,IMMUTABLE]
pad2: Source
-> "30102000.ticsi2rx context 1":0 [ENABLED,IMMUTABLE]
pad3: Source
-> "30102000.ticsi2rx context 2":0 [ENABLED,IMMUTABLE]
pad4: Source
-> "30102000.ticsi2rx context 3":0 [ENABLED,IMMUTABLE]
pad5: Source
-> "30102000.ticsi2rx context 4":0 [ENABLED,IMMUTABLE]
pad6: Source
-> "30102000.ticsi2rx context 5":0 [ENABLED,IMMUTABLE]
- entity 9: cdns_csi2rx.30101000.csi-bridge (5 pads, 2 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev1
pad0: Sink
[stream:0 fmt:Y8_1X8/2560x1440 field:none colorspace:raw]
<- "vd1943 4-0010":0 [ENABLED,IMMUTABLE]
pad1: Source
[stream:0 fmt:Y8_1X8/2560x1440 field:none colorspace:raw]
-> "30102000.ticsi2rx":0 [ENABLED,IMMUTABLE]
pad2: Source
pad3: Source
pad4: Source
- entity 15: vd1943 4-0010 (1 pad, 1 link, 0 routes)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev2
pad0: Source
[stream:0 fmt:Y8_1X8/2560x1440 field:none colorspace:raw xfer:none quantization:full-range
crop.bounds:(0,0)/2560x1984
crop:(0,272)/2560x1440]
-> "cdns_csi2rx.30101000.csi-bridge":0 [ENABLED,IMMUTABLE]
- entity 21: 30102000.ticsi2rx context 0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video2
pad0: Sink
<- "30102000.ticsi2rx":1 [ENABLED,IMMUTABLE]
但是、尝试捕获帧失败:
v4l2-ctl --verbose --device /dev/video2 --set-fmt-video=width=2560,height=1440 --stream-mmap --stream-to=test-frame.raw
VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture:
Width/Height : 2560/1440
Pixel Format : 'GREY' (8-bit Gr[ 67.619609] cdns-csi2rx 30101000.csi-bridge: Failed to start streams 0x1 on subdev
eyscale)
Field : None
Bytes per Line : 2560
Size Image : 3686400
Colorspace : sRGB
Transf[ 67.640361] cdns-csi2rx 30101000.csi-bridge: Failed to stop streaming on pad0
er Function : sRGB
YCbCr/HSV Encoding: ITU-R 601
Quantization : Limited Range
Flags :
VIDIOC_REQBUFS [ 67.658535] cdns-csi2rx 30101000.csi-bridge: Failed to stop streaming on pad1
returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned[ 67.676770] cdns-csi2rx 30101000.csi-bridge: Failed to stop streaming on pad2
0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
[ 67.694936] cdns-csi2rx 30101000.csi-bridge: Failed to stop streaming on pad3
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_STREAMON returned -1 (Permission denied)
此致
Stefan
您好、Stefan:
我看不到 media-ctl -p 输出中定义了任何路由。 请参阅以下脚本: https://github.com/TexasInstruments/edgeai-gst-apps/blob/main/scripts/setup_camera_ox05b.sh
具体指第 4 行和第 9 行。
此致、
Jay
尊敬的 Jay:
抱歉耽误您的时间 — 自上周以来,我无法在此论坛上发布/回复! (我总是收到“发生错误。 请重试或联系您的管理员。“ 错误消息。)
在尝试设置路由时、我总是会收到“无法设置路由:设备的 ioctl 不适当 (25)“错误。 这是否与“v4l2_subdev_pad_ops".set_routing“.set_routing 函数相关? 我在其他驱动程序中看到了这种情况、但 im219.c 驱动程序 (...) 中也没有这种情况 — 或者您认为这可能与其他缺少的函数有关吗?
此致
Stefan
您好、Stefan:
您实际上并不需要在传感器上设置布线。 对于可以处理多个流的器件(例如 RGB+CSI 传感器或 IR 外设)、这些参数非常重要。 在您的情况下、这可能不是必需的。
我还在日志中看到权限问题、这似乎很不寻常。 您能否尝试查看权限错误发生的位置?
抱歉耽误您的时间 — 自上周以来,我无法在此论坛上发布/回复! (我总是收到“发生错误。 请重试或联系您的管理员。“ 错误消息。)
真的很抱歉、您不得不面对这个问题。 如果将来出现此类问题(希望不会)、请联系您的现场代表。
此致、
Jay
尊敬的 Jay:
可悲的是,我无法精确定位权限错误的来源:我在目标上运行每个命令作为 root 用户,文件权限是可以的,增加内核的控制台日志级别只会产生:
[ 1812.479696] cdns-csi2rx 30101000.csi-bridge: Failed to start streams 0x1 on subdev [ 1812.500961] cdns-csi2rx 30101000.csi-bridge: Failed to stop streaming on pad0 [ 1812.519146] cdns-csi2rx 30101000.csi-bridge: Failed to stop streaming on pad1 [ 1812.537390] cdns-csi2rx 30101000.csi-bridge: Failed to stop streaming on pad2 [ 1812.555542] cdns-csi2rx 30101000.csi-bridge: Failed to stop streaming on pad3
顺便说一句,如果我要破坏思想的火车,对不起提前,但在 ti-linux-kernel 中,我看到了 vgxy61 成像仪的驱动程序,这似乎与我们的 vd1943 (...) 相似,您现在是否可以将此驱动程序与 AM62A3 评估套件配合使用?
此致
Stefan Birkholz
您好、Stefan:
我的意思是、如果您可以确定驱动程序代码中出现错误的位置。 在此函数中添加调试打印: https://github.com/STMicroelectronics/vd1943-linux-driver/blob/master/vd1943.c#L1358 应该没问题。 然后、我们可以看到哪个调用失败。
对于 vgxy61 传感器、该传感器来自上游内核。 如果您查看我们的 kernel .config、我们不会为其设置 config 变量: https://github.com/TexasInstruments/ti-linux-kernel/blob/ti-linux-6.12.y/kernel/configs/ti_arm64_prune.config
此致、
Jay