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.

[参考译文] AM5718:IPU 运行时出现 USB3摄像头问题

Guru**** 2925550 points

Other Parts Discussed in Thread: AM5718, TUSB8041, SYSBIOS, AM5728

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/662684/am5718-usb3-camera-issue-when-ipu-is-running

器件型号:AM5718
Thread 中讨论的其他器件: TUSB8041SYSBIOSAM5728

您好!

我们目前正在测试我们的定制 AM5718板、并发现了一些与 USB3有关的奇怪问题。 电路板在 USB3主机端口上使用 TUSB8041集线器、我们连接了高端 USB3视觉摄像机。 当在 A15内核上引导 llinux 时、图像抓取功能非常出色。 当 IPU1和/或 IPU2被绑定时、读数变得不稳定、并且只有10-20%的图像捕捉器成功完成。

在 IPU:s 上执行什么 SW 似乎无关紧要 手动取消绑定时、USB3上不会出现任何问题。

如需相关信息、IDK_AM572x 上的相同设置能够完美运行。 我们以前无法评估 AM571x 和 USB3视觉摄像机的组合。

有什么想法吗?

此致

Marcus Berglund

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Marcus、

    您能否获得 AM571x_IDK EVM 来测试相同的用例? 我们需要首先检查这是否与电路板相关。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    遗憾的是、AM571x_IDK 电路板上没有任何 USB3端口。 仅限不能与 USB3视觉摄像机配合使用的 USB2。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我没收到这个。 我们只能关注您的定制板。

    我认为我们首先需要检查这是否是 DDR 带宽问题、因为 AM571x 的 EMIF 带宽比 AM572x 的 EMIF 带宽更小。
    您能否分享您的项目的更多信息?
    -您是从 USB3.0摄像头流式传输视频还是只是抓取静态图像? 分辨率是多少? 它使用了多少 DDR 带宽?
    -您提到它与 IPU 上运行的软件无关、因此您尝试在 IPU 软件中不做任何"事"?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、

    目前我们仅使用帧抓取功能、我们将抓取4024px x 3036px。 我们目前仅以1Hz 的频率运行、但我们一直在以较慢的速度进行测试、似乎没有什么不同。

    2.实际上、当不启动 TI-RTOS (BIOS)时、它似乎可以正常工作。 只要我在 TI-RTOS 中运行任何 IPU 而不启动任何任务、结果就相同。

    Marcus
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用什么应用程序来抓取静态图像? 是否必须检查 USB 总线在应用程序不拍照的情况下仍能流式传输视频? USB 总线分析器可以告诉它。

    您使用的是哪个处理器 SDK 版本? 我对 IPU 不是很了解、但我认为 IPU1与 IVA-HD 无关、因此如果您只将 TI-RTOS 加载到 IPU1、IPU 不应该使用任何资源、对吧? 您是否在 IPU1上运行任何自定义软件?

    您是否尝试将图像分辨率降低到不会出现此类问题的程度?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们使用制造商 API 来获取图像。

    我们使用的是 SDK ti-processor-sdk-linux-am57xx-evm-04.00.00.04-Linux-x86-Install.bin

    当我们将分辨率降低到640x480时、似乎可以正常工作。 显然、图像的大小会对问题产生影响。 我想知道我们是否正在访问 IPU 中的任何不同存储器区域、这些存储器区域在 AM572x 和 AM571x 之间是不同的。

    IPU 代码使用 IPC 软件包与 A15进行通信。 在存储器映射中、会分配以下存储器、这与 AM572x 的 IPC 样本相同。 但是、由于我们使用的是 AM571x、这可能不正确?

    除此之外、我还尝试使用完全相同的结果运行 ex02 MessageQ 示例。 启动 TI-RTOS 时、USB3摄像头似乎停止工作

    ti.platforms.evmDRA7XX:ipu1的/*内存映射
    *
    *--外部存储器--
    *虚拟 物理 尺寸 注释
    *******************************************************************************************************
    * 0000_4000?????????? F_C000 (~1 MB) EXT_CODE
    * 8000_0000???????? 20_0000 (2MB) EXT_DATA
    * 8020_0000????????? 30_0000 (3MB) EXT_HEAP
    * 9F00_0000 9F00_0000 6_0000 (384KB) TRACE_BUF
    * 9F06_0000 9F06_0000 1_0000 (64KB) EXC_DATA
    * 9F07_0000 9F07_0000 2_0000 (128KB) PM_DATA (电源管理)
    *

    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这似乎是 A15和 M4之间的 IPC 问题。

    当任何 IPU1或 IPU2加载 ex02_MessageQ IPC-examples 时、会发现问题。

    当 IPU1或 IPU2未绑定时、问题就会消失。

    这似乎是某种存储器映射/分配问题。 我们实际上可以使用一些支持来查看从该示例中获取的资源表、

    processors.wiki.ti.com/.../File:UART_BasicExample_evmAM572x_m4ExampleProject_with_ipc.zip

    我正在尝试确定是否需要以某种方式重新配置"rsc_table_vayu_IP议会 联盟.c"或"ipuAmmu.cfg "、以适应 AM5718、它具有2GB 的 DDR3、而不是 EVM_AM572x 上的3GB DDR3

    请提供建议!

    谢谢

    Marcus Berglund

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的专家需要一些时间来深入探讨这一点。 同时、如果您对存储器区域冲突有疑问、请参阅此 wiki 页面、该页面可帮助您进一步深入了解。 另请检查 DTS 文件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的链接。 我们可以看到、配置中没有冲突。 尽管不容易深入到完整的内存管理中。

    我们仍然认为、答案在于 AM571x 和 AM572x 在 IPC 封装方面的区别。

    但是、当测试 ex02_MessageQ 是在发布模式而不是调试模式下构建的、该问题似乎几乎消失了。 IPU1代码的优化有点难于理解它如何影响 Linux 中用户空间应用程序的性能。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Marcus、

    是否可以尝试设置环境变量 IPC_DEBUG=1并再次运行 IPC 示例并在此处发布输出?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sahin、

    实际上、一旦使用"bind (绑定)"加载 IPU1或 IPU2、就会看到摄像头的读取错误。 如果两个加载的故障率都像1/5、但如果只有一个加载、则故障率更像2/3。 这是我甚至在运行"../app_host IPU1"或"../app_host IPU2"之前执行的操作。 但是、如果我使用 IPC_DEBUG=1运行它们。 这是输出。

    _________________________________________
    -->主要:
    MultiProc_getconfig:获取客户机0的 LAD 响应、STATUS=0
    nameserver_setup:为客户机0获得 LAD 响应、STATUS=1
    MessageQ_getconfig:获取客户端0的 LAD 响应、STATUS=0
    MessageQ_setup:客户端0的 LAD 响应、STATUS=1
    nameserver_attach:LAD 响应、STATUS=0
    GateMP_isSetup:获取客户端0的 LAD 响应、STATUS=0
    GateMP_Attach:LAD 响应、STATUS=-5
    nameserver_attach:LAD 响应、STATUS=0
    GateMP_isSetup:获取客户端0的 LAD 响应、STATUS=0
    GateMP_Attach:LAD 响应、STATUS=-5
    nameserver_attach:LAD 响应、STATUS=-1
    nameserver_attach:LAD 响应、STATUS=0
    GateMP_isSetup:获取客户端0的 LAD 响应、STATUS=0
    GateMP_Attach:LAD 响应、STATUS=-5
    GateMP_isSetup:获取客户端0的 LAD 响应、STATUS=0
    GateHWSpinlock_getconfig:获取客户端0的 LAD 响应、STATUS=0
    GateMP_START:获取客户端0的 LAD 响应、STATUS=0
    GateMP_getNumResources:获取客户端0的 LAD 响应、STATUS=0
    nameserver_get:为客户端0获取 LAD 响应
    GateMP_START:无法打开默认门、 STATUS=-5
    GateMP_STOP:已输入
    ->Main_main:
    --> App_create:
    MessageQ_create:获取客户端0的 LAD 响应、STATUS=0
    MessageQ_create:为'host:MSGQ:01'队列索引0创建端点
    MessageQ_create:获取客户端0的 LAD 响应、STATUS=0
    nameserver_getUInt32:获取客户机0的 LAD 响应
    APP_CREATE:主机已就绪
    <-- App_create:
    --> App_exec:
    APP_exec:发送消息1
    APP_exec:发送消息2.
    APP_exec:发送消息3
    APP_exec:已收到消息、正在发送消息4
    APP_exec:已收到消息、正在发送消息5
    APP_exec:已收到消息、正在发送消息6
    APP_exec:已收到消息、正在发送消息7
    APP_exec:已收到消息、正在发送消息8
    APP_exec:已收到消息、正在发送消息9
    APP_exec:已收到消息、正在发送消息10
    APP_exec:已收到消息、正在发送消息11
    APP_exec:已收到消息、正在发送消息12
    APP_exec:已收到消息、正在发送消息13
    APP_exec:已收到消息、正在发送消息14
    APP_exec:已收到消息、正在发送消息15
    APP_exec:已收到消息
    APP_exec:已收到消息
    APP_exec:已收到消息
    <-- App_exec:0
    --> App_delete:
    MessageQ_delete:获取客户端0的 LAD 响应、STATUS=0
    <-- App_delete:
    <-- Main_main:
    GateMP_isSetup:获取客户端0的 LAD 响应、STATUS=0
    GateMP_detach:LAD 响应、STATUS=-5
    nameserver_detach:LAD 响应、STATUS=0
    GateMP_isSetup:获取客户端0的 LAD 响应、STATUS=0
    GateMP_detach:LAD 响应、STATUS=-5
    nameserver_detach:LAD 响应、STATUS=0
    GateMP_isSetup:获取客户端0的 LAD 响应、STATUS=0
    GateMP_detach:LAD 响应、STATUS=-5
    nameserver_detach:LAD 响应、STATUS=0
    MessageQ_Destroy:获取客户端0的 LAD 响应、STATUS=0
    nameserver_destroy:已输入
    nameserver_destroy:客户端0的 LAD 响应、STATUS=0
    <--主要:
    _________________________________________


    但是、如果我取消绑定 IPU1和 IPU2并绑定 DSP1。 绑定相同的"ex02_MessageQ"示例时、我完全没有问题。 即使在我反复测试和运行应用程序时、我也不会遇到任何错误。

    无论 IPU1和 IPU2干扰 Linux 主机、DSP1都不会这样做。 运行完全相同的 IPC/TI-RTOS 示例应用程序时。 有什么想法吗?

    此致

    Marcus Berglund
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Marcus、

    我现在明白了、很抱歉、这种混淆不清。 我知道、AM571x 和 AM572x 之间的 IPC 没有任何差异。 它们都使用 DRA7XX 平台、因此有趣的是、它可以在一个平台上工作、而不是在另一个平台上工作。 我已经联系了开发团队来确认这一点。

    您能否提供 cfg 文件、RSC 表和 DTS 文件? 如前所述、这可能是内存分配问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sahin、

    事实证明、单指令缓存在某种程度上会导致 AM5718发生重大冲突。

    在 IpuAmmu.cfg 上

    VAR Cache = xdc.useModule('ti.sysbios.hal.unicache.Cache');
    cache.enableCache = true

    替换为

    VAR Cache = xdc.useModule('ti.sysbios.hal.unicache.Cache');
    cache.enableCache = false

    然后、IPU1和 IPU2示例与 USB3摄像头完美配合。 但 AM5728中未看到这种情况。

    可以有人解释一下吗?

    此致

    Marcus Berglund

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Marcus、

    正如 Sahin 指出的、AM571x 和 AM572x 之间的 IPC 没有任何差异。 为了了解具有不同 DDR 存储  器的两个平台(AM571x 上为2GB DDR3、EVM_AM572x 上为3GB DDR3)上的内存分配/可高速缓存问题、wiki 中概述的内存信息将会有所帮助。

    • 总体 Linux 内存映射
    • CMA 位置
    • IPU IOMMU 页面表

    此外、您是否尝试使用 Ammu.cachepolicate_none_cacheable 精确定位冲突的内存页、而不是为所有内存禁用高速缓存、例如:

    /*私有、共享和 IPC 数据区域:大页(512M);不可高速缓冲*/

    /*配置大页面[2]以将512MB VA 0x8000000映射到 L3 0x8000000 */

    Ammu.largePages [2].pageEnabled = Ammu.Enable_Yes;

    Ammu.largePages [2].logicalAddress = 0x8000000;

    Ammu.largePages [2].inationEnabled = Ammu.Enable_no;

    Ammu.largePages [2].size = Ammu.large_512M;

    Ammu.largePages [2].l1_cacheable = Ammu.cachepolicy_none_cacheable;

    Ammu.largePages [2].L1_posted= Ammu.PostedPolicy_posted;

    >>当测试 ex02_MessageQ 是在发布模式而不是调试模式下构建的时,问题似乎几乎消失了

    您是否能够确认 ex02_MessageQ 发布模式对您的应用没有影响?

    >>这是我甚至在运行"../app_host IPU1"或"../app_host IPU2"之前执行的操作

    一旦绑定并引导 IPU 映像、来自 IPU 的一些日志(e.g.Log_print0 (Diags_entry、"->main:"))将通过消息传输跟踪缓冲器发送到主机。 您能否尝试禁用日志以查看其行为是否不同?

    此致、

    Garrett