Other Parts Discussed in Thread: AM62P
部件号: AM62P
您好、
我们将使用 MAX96724 解串器+ MAX96717 串行器解决方案在 AM62P 平台上调整 ISX031 摄像头。 目前、可以稳定输出 3 个视频流、但 当连接 4 个摄像头时、视频流会变得不稳定、卡住、并且不会生成错误日志。
您能建议如何解决此问题吗? 谢谢!
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.
root@am62pxx-evm:~/output# gst-launch-1.0 v4l2src device="/dev/video4" ! video/x-raw, width=1920, height=1536, format=UYVY, framerate=30/1 ! queue ! kmssink driver-name=tidss sync=false Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock Redistribute latency... ^Chandling interrupt. Interrupt: Stopping pipeline ... Execution ended after 0:00:01.407935685 Setting pipeline to NULL ... Freeing pipeline ...
尊敬的 Ying:
在您共享的设备树中、我看到第 93 行和第 611 行中存在链路频率不匹配问题。
如果这不起作用、请帮助我进一步了解问题。
在您在上次答复中分享的日志中、我看到您仅尝试从一台摄像机串流。 那么、启用所有四个流后、即使是单个摄像头流也无法正常工作吗?
在器件树中、您正在使用 UB960 和 UB953 节点。 我假设这些是被调用驱动器实际上是正确串行器/解串器的占位符。 这是正确的吗?
此外、请分享您在从三个传感器移动到四个传感器时所做的更改。
此致、
Jay
尊敬的 Jay:
1. 参考 E2E 上的常见做法、尽管使用的硬件组合是 MAX96724 + MAX96717 + ISX031、但该驱动程序是基于 DS90UB960 + DS90UB953 + IMX219 进行修改的。 由于 DS90UB960 驱动程序已验证link-frequencies第 93 行的现场、如果修改了其他值、则会报告错误、如下所示:
root@am62pxx-evm:~# yavta /dev/video3 -c1 -n1 -s1920x1536 -fUYVY -Fvideo.yuv Device /dev/video3 opened. Device `j721e-csi2rx' on `platform:30102000.ticsi2rx' (driver 'j721e-csi2rx') supports video, capture, without mplanes. Video[ 119.882762] cdns-csi2rx 30101000.csi-bridge: Failed to configure external DPHY: -95 format set: UYVY (59565955) 1920x1536 (stride 3840) field none buffer size 5898240 Video format: UYVY (59565955) 1920x1536 (stride 3840) field none buffer size 5898240 2 buffers requested. length: 5898240 offset: 0 timestamp type/source: mono/EoF Buffer 0/0 mapped at address 0xffff9e720000. length: 5898240 offset: 32768 timestamp type/source: mono/EoF Buffer 1/0 mapped at address 0xffff9e180000. Unable to start streaming: Operation not supported (95). 2 buffers released.
2、 测试程序如下:
而不更改软件的情况 摄像头数量不超过 3 个 连接后、可以正常输出单通道和多通道视频流。
然而,当 4 个摄像头 已连接、异常发生:
4 个通道中的任何一个没有输出、或不稳定/随机输出。 同一命令可以在一次运行中生成输出、但在下一次运行中不会生成输出。
3. 我怀疑可能有 通道争用 问题、或 实际未成功配置带宽 。
此外、当视频流无法输出时、有时会发生以下错误:
root@am62pxx-evm:~/output# v4l2-ctl --device /dev/video4 --set-fmt-video=width=1920,height=1536,pixelformat=UYVY --stream-mmap ^C^[[A^C[ 75.047567] ti-udma 4e230000.dma-controller: chan2 teardown timeout!
尊敬的 Ying:
感谢您澄清这些要点。 这可能是由于带宽限制造成的。 但我发现有趣的是、即使只有一个传感器进行流式传输、也没有数据。 您能尝试将链路频率设置回第 611 行的 800MHz 吗? 这可能不足以处理 4 个流、但会排除我在上一次回复中针对单个传感器流提到的问题。
由于 DS90UB960 驱动程序已对link-frequencies第 93 行的字段进行了验证、如果修改了其他值、则会报告错误、如下所示
这是否意味着解串器不支持其他链路频率。 观察 UB960 驱动器、它支持 1200MHz、这可能没问题。 请参阅此处: git.ti.com/.../ds90ub960.c
此外、请分享您在从三个传感器移动到四个传感器时所做的更改。
请也分享此内容。
还共享以下寄存器的值:
INFO_IRQ 0x301020
ERROR_IRQ 0x30101028
stream0_status 0x30101104
DPHY_STATUS 0x30101048
此致、
Jay
尊敬的 Jay:
很抱歉晚才回复。
1.我已将代码行 611 中的链路频率调整为 800MHz、但问题仍然存在:当 3 个或更少的摄像头连接到硬件时、视频流可以正常输出;但是、一旦连接了 4 个摄像头、就不会输出视频流、偶尔出现绿色屏幕、或在极少数情况下显示正常图像。
当第 611 行中的频率配置为 800MHz 时、读取寄存器值如下所示:
root@am62pxx-evm:~# devmem2 0x30101020 w /dev/mem opened. Memory mapped at address 0xffff88e8e000. Read at address 0x30101020 (0xffff88e8e020): 0x00000073 root@am62pxx-evm:~# devmem2 0x30101028 w /dev/mem opened. Memory mapped at address 0xffffa638a000. Read at address 0x30101028 (0xffffa638a028): 0x000F1BF1 root@am62pxx-evm:~# devmem2 0x30101104 w /dev/mem opened. Memory mapped at address 0xffffbb9ba000. Read at address 0x30101104 (0xffffbb9ba104): 0x00000000 root@am62pxx-evm:~# devmem2 0x30101048 w /dev/mem opened. Memory mapped at address 0xffff9a2ce000. Read at address 0x30101048 (0xffff9a2ce048): 0x00222206
当第 611 行中的频率配置为 1250MHz 时、读取寄存器值如下:
root@am62pxx-evm:/home/031# devmem2 0x30101020 w /dev/mem opened. Memory mapped at address 0xffffa2621000. Read at address 0x30101020 (0xffffa2621020): 0x00000072 root@am62pxx-evm:/home/031# devmem2 0x30101028 w /dev/mem opened. Memory mapped at address 0xffffa20a3000. Read at address 0x30101028 (0xffffa20a3028): 0x000F19F1 root@am62pxx-evm:/home/031# devmem2 0x30101104 w /dev/mem opened. Memory mapped at address 0xffffa5439000. Read at address 0x30101104 (0xffffa5439104): 0x00000000 root@am62pxx-evm:/home/031# devmem2 0x30101048 w /dev/mem opened. Memory mapped at address 0xffffb35b7000. Read at address 0x30101048 (0xffffb35b7048): 0x00222206
您能帮您重新检查此问题的根本原因吗? 感谢您的支持!
此致、
尊敬的 Ying:
我看到存在许多错误 IRQ、包括 ECC 和 CRC 错误。 还有流 0 FIFO 上溢、这可能会导致流水线停滞。 INFO_IRQ 也有点奇怪:

在工作用例中、也请共享寄存器值。
此外、要确认、连接四个摄像头时、没有任何摄像头工作? 我想排除传感器硬件的问题。 如所示、如果端口 0 处的传感器不工作、您是否尝试过不同端口上的另一个传感器?
对于从三个传感器移动到四个传感器、除了更改设备树之外、您是否进行了其他更改?
此致、
Jay
尊敬的 Jay:
1.以下是摄像头正常工作时捕获的寄存器值:
root@am62pxx-evm:/home/031# devmem2 0x30101020 w /dev/mem opened. Memory mapped at address 0xffff958d2000. Read at address 0x30101020 (0xffff958d2020): 0x00000022 root@am62pxx-evm:/home/031# devmem2 0x30101028 w /dev/mem opened. Memory mapped at address 0xffff88260000. Read at address 0x30101028 (0xffff88260028): 0x00020100 root@am62pxx-evm:/home/031# devmem2 0x30101104 w /dev/mem opened. Memory mapped at address 0xffffb3af9000. Read at address 0x30101104 (0xffffb3af9104): 0x00000000 root@am62pxx-evm:/home/031# devmem2 0x30101048 w /dev/mem opened. Memory mapped at address 0xffff88b48000. Read at address 0x30101048 (0xffff88b48048): 0x00222206
2、验证后,传感器硬件本身没有异常。 具体现象如下:连接 4 个摄像头时、所有 4 个通道无法正常工作;如果一个摄像头随机断开且器件重新启动、其余 3 个通道可以正常输出视频流。
3.关于 4 通道摄像机的配置:默认情况下,该代码一直设置为 4 通道模式,而不对软件进行任何修改。 我们仅通过硬件操作(物理断开或连接摄像头)调整已连接摄像头的实际数量、而不是在每次添加或移除摄像头时修改代码。
尊敬的 Ying:
感谢您的澄清。 您是否在使用 SDK 10.1 或更低版本之前的版本? 即使请求了一个传感器流、也会启用所有传感器流。 在这种情况下、您使用的 800MHz 链路频率可能不足以支持该流。 这可能会导致您看到的行为。 这也可以解释为什么三个摄像头可以正常工作。 此问题已在 SDK 11.1 中修复。
这将引导我回答以下问题:
1.如果您使用的是 SDK <=10.1、是否可以在 SDK 11.1 上运行基本验证?
2.您可以使用不同的串行器/解串器/传感器测试设置吗? 特别是在可以验证是否可以使用原始传感器接收数据的情况下。 这可能有助于确定它是否是带宽问题。
3.有了 3 个摄像头,您能同时成功地从所有摄像头进行流式传输吗?
此致、
Jay
尊敬的 Jay:
非常感谢您的答复。
目前、我使用的是 SDK 10.0 版本、接下来我将基于 SDK 11.1 进行验证测试。
尊敬的 Ying:
感谢您对此进行澄清。 请告诉我 SDK 11.1 测试的结果。 您所描述的可能意味着链路频率就是问题所在。
在前面的回复中、您提到了解串器驱动程序会检查器件树叠加层中链路频率的值。 它是否可以接受 1200MHz 之类的值。 如果它基于 UB960 驱动器、所有这些配置参数都会在此处进行检查: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/media/i2c/ds90ub960.c?h=ti-linux-6.6.y#n1171
如果可以提高链路频率、就更容易排除问题。 读取的值将来自设备树中的解串器节点、而不是 cdns_csi2rx 节点。
此致、
Jay
尊敬的 Jay:
我想我已经解决了这个问题。 它可能与摄像头参数或硬件设计有关。 非常感谢您的帮助。 此外、我想问您两个问题:
1.我正在设备上使用 4 个摄像头。 通常、设备节点映射为:video3(前置摄像头)、video4(后置摄像头)、video5(左摄像头)、video6(右摄像头)。 但是、系统重新启动后、视频 4 和视频 5 的视频流会随机交换。 如何永久修复/dev/videoX 设备节点与物理硬件摄像头之间的映射关系?
AM62P 完成引导并开始捕获视频流后、经常会报告此错误。 原因可能是什么? 有时、它会一个接一个地正常工作。
谢谢!
root@am62pxx-evm:~/output# gst-launch-1.0 v4l2src device="/dev/video6" ! video/x-raw, width=1920, height=1536, format=UYVY, framerate=25/1 ! queue ! kmssink driver-name=tidss sync=false Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock [ 58.994286] cdns-mipi-dphy-rx 30110000.phy: DPHY wait for lane ready timeout [ 59.001363] cdns-csi2rx 30101000.csi-bridge: Failed to configure external DPHY: -110 ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed to allocate required memory. Additional debug info: /usr/src/debug/gstreamer1.0-plugins-good/1.22.12/sys/v4l2/gstv4l2src.c(950): gst_v4l2src_decide_allocation (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Buffer pool activation failed Execution ended after 0:00:00.391037965 Setting pipeline to NULL ... ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data stream error. Additional debug info: /usr/src/debug/gstreamer1.0/1.22.12/libs/gst/base/gstbasesrc.c(3134): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: streaming stopped, reason not-negotiated (-4) Freeing pipeline ...
此致、
尊敬的 Ying:
流的工作是好消息。 感谢您的分享。
如何永久修复/dev/videoX 设备节点与物理硬件摄像机之间的映射关系?
为此、请参阅此脚本[1]。 调整不同传感器的探头顺序是无法控制的。 所以、在这个脚本中、我们/dev/videoX/dev/video-imx219-cam0通过分析 media-ctl 图形的输出、将节点链接到新节点。 为了可靠地获得这一点,您可以使用媒体 ctl 输出的 i2c 别名。 例如、与 imx219 7-001a 媒体图形中的元素相对应的视频节点可以称为/dev/video-imx219-7-001a。
在 AM62P 完成启动并开始捕获视频流后、它经常报告此错误。 原因可能是什么? 有时它会在一段时间后再次正常工作。
为此、请在将GST_DEBUG变量导出到 4 后共享输出。 请注意、输出将非常详细。 此外、如果您使用 fakesink 而不是 kmssink、您是否会看到此问题? 这也有助于缩小问题的范围。 cdns-mipi-dphy-rx 30110000.phy: DPHY wait for lane ready timeout当 gstreamer 流水线正确运行时、您是否看到了日志消息? 它在重新运行命令或再次重新启动后是否正常工作?
[1] https://github.com/TexasInstruments/edgeai-gst-apps/blob/main/scripts/setup_cameras.sh
此致、
Jay
尊敬的 Jay:
1./dev/video-imx219-cam*是指向/dev/video*的符号链接。 但是、有时在重新启动后、与/dev/video*实际变化相对应的摄像头馈送/dev/video-imx219-cam*也会导致来自的馈送也发生变化。
2. 即使用 fakesink 更换 kmssink 时、问题仍然存在。
当 GStreamer 流水线正常运行时、没有显示“cdns-mipi-dphy-rx 3011000.phy:DPHY 等待通道就绪超时“的日志消息。
当设备报告 DPHY:–110 错误时、程序可以在系统重新启动后正常运行。
尊敬的 Ying:
[引用 userid=“62991" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1622335/am62p-issues-encountered-in-adapting-the-isx031-camera-for-the-am62p/6284284 ]/dev/video-imx219-cam*是指向的符号链接/dev/video*。 但是、有时在重新启动后、与/dev/video*实际更改相对应的摄像机源/dev/video-imx219-cam*会导致来自的源也发生更改。
我的意思是,你应该把脚本作为参考,并稍微修改它,以使用 i2c 别名来设置符号链接的名称。 我正在共享一个执行该操作的修改脚本。 您可能必须修改脚本以反映传感器的格式字符串。
至于 GStreamer 问题、我将需要更多时间分析该输出。 由于我明天不可用、我将尝试最迟通过星期一回复。 如果您没有收到回复,请随时在此处再次发帖。 我还修改了您的回复以将命令输出格式化为代码。
setup_cameras 脚本: e2e.ti.com/.../setup_5F00_cameras_5F00_new.sh
此致、
Jay
尊敬的 Jay:
感谢你的帮助。 第一个问题已解决。 至于第二个问题、我不确定是不是硬件问题、所以我会在我这边进行检查。 我还有最后一个问题要问您:
设备完成引导后、当我运行 setup_camerasers.sh 时、它通常会报告:无法设置格式:参数无效 (22)。 只有在开机后等待大约 10–15 秒后再执行脚本时、错误才会消失。
我打印了导致错误的命令。 以下是比较:
运行正常时:media-ctl -d 0 -R ${name}[0/0 ->2/0 [1]、0/1 ->3/0 [1]、0/2 ->4/0 [1]、0/3 ->5/0 [1]]
当它抛出错误时:media-ctl -d 0 -R ${name}[0/2->4/0 [1]、0/3 -> 5/0 [1]、0/4 -> 6/0 [1]、0/5 -> 7/0 [1]]
此致、
尊敬的 Ying:
这很有趣。 它实际上使我倾向于硬件问题、或者我怀疑的是、硬件初始化比预期的慢。
引导后 10 秒内的行为是否一致? 如果是、请在 10-15 秒窗口前后共享 media-ctl -p 输出。 此外、您是否DPHY wait for lane ready timeout也看到了 yavta/v4l2-ctl capture 中的错误?
在 GStreamer 中、误差此时只会出现。 大写字母协商成功。 我也要求一位同事来看看这个问题。 我会努力确保我们中的一位在几天内回复您。 很抱歉耽误你的时间。
此致、
Jay
尊敬的 Ying:
您能告诉我您的链路频率是多少吗? 此外、请 在 10s 间隔之前和之后共享 INFO_IRQ 0x30101020 寄存器的值。
启动后 10 秒内的行为是否一致? 如果是、请在 10-15 秒窗口前后共享 media-ctl -p 输出。 此外、您是否DPHY wait for lane ready timeout也看到了 yavta/v4l2-ctl capture 错误?
请在您可以的时候提供此信息。
此致、
Jay
尊敬的 Ying:
我实际上是在运行脚本之前指定输出的。 脚本依赖于 media-ctl -p 命令的输出、因此我想看看为什么存在这种不一致。 问题是脚本尝试引用的 PAD 和流不存在。 请尝试硬编码路由并检查您是否看到此错误。 唯一需要不进行硬编码的事情是创建符号链接。
此外、请分享您当前使用的链路频率。 如果可能、请共享驱动程序代码。 请记住、这是一个公共论坛。
您是否还能说明您看到的两个问题(一个串流未启动,另一个与媒体图形路由有关)是否同时发生、或者它们似乎是独立的?
当流式传输失败时、请共享 INFO_IRQ 寄存器 (0x30101020) 的值。
此致、
Jay