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.

[参考译文] TDA2EG:ISS 捕获链路转储帧命令

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/667341/tda2eg-iss-capture-link-dump-frame-command

器件型号:TDA2EG

你(们)好

  我正在处理 CSI2用例、并尝试从捕获中转储帧、以将其保存为 SD 卡中的图像文件。

  此主题"https://e2e.ti.com/support/arm/automotive_processors/f/1021/t/661663?tisearch=e2e-sitesearch&keymatch=%20user%3A340760#pi320098=1" 

用于在链路为 iss 捕获时转储帧。

  那么、我想问、是否有一些有关如何使用这些帧转储命令的文档或示例?

谢谢

Xuanbo

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

    你好,小安波,

    如果您使用的是 VSDK 单通道 ISS 用例、则只需运行此用例、它将在用例运行时显示几个菜单选项。 其中一个选项是转储捕获的帧。 请选择此选项、它将自动将转储的捕获帧保存到 SD 卡中。

    如果您不使用此用例、则捕获链接中有一个控制命令来获取转储缓冲区、您可以在应用程序中获取此缓冲区并将其写入 SD 卡。

    此致、

    Brijesh  

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

    我使用的是 csi2_cal_multi_cam_view 用例、而不是单通道 ISS 用例。
    您能解释更多有关获取转储缓冲区的控制命令的信息吗? 或者为我提供有关如何在捕获链接中使用命令的相关文档或示例路径?

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

    首先、您需要通过在用例中将 allocBufferForRawDump 设置为 true 来为转储启用缓冲区分配。
    保存帧的控制命令是 ISSCAPTURE_LINK_CMD_SAVE_FRAME、而获取帧状态的控制命令是 ISSCAPTURE_LINK_CMD_GET_SAVE_FRAME_STATUS

    请查找以下示例代码

    System_linkControl()
    chainsObj.ucObj.IssCaptureLinkID、
    ISSCAPTURE_LINK_CMD_SAVE_FRAME、
    特性(&C)、
    sizeof (chid)、
    true);

    执行{
    System_linkControl()
    chainsObj.ucObj.IssCaptureLinkID、
    ISSCAPTURE_LINK_CMD_GET_SAVE_FRAME_STATUS、
    rawSaveFrameStatus (&R)、
    sizeof (IssCaptureLink_GetSaveFrameStatus)、
    true);
    } while (rawSaveFrameStatus.isSaveFrameComplete == false);

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

    感谢您的讲解。 我在“chains_issIspSimcop_Display.c”中找到了 src 代码
    我已将 allocBufferForRawDump 设置为 true,并使用您建议的代码。 但我遇到了这样的问题:"rawSaveFrameStatus.isSaveFrameComplete"始终为 false、无法更改为 true、因此我的应用程序始终停留在 do while 循环中。
    是否有任何方法可以调试此问题? 或者、我是否可以检查其他标志状态以证明摄像头传感器工作正常、并且缓冲器是否捕获了图像数据?

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

    这可能意味着捕获不起作用。 您是否看到捕获的帧? 您能否在捕获回调中放置断点并查看它是否被调用?

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

    是的、我希望看到捕获的帧、因为我现在没有显示设备。 我的用例是"csi2_cal_multi_cam_view"、我的日志如下所示:

    (笑声)
    VIDEO 传感器:检测到4个摄像头模块!!!
    (这意味着 TDA2Ex 和 UB964之间的 I2C 和4个摄像头是良好的)
    (笑声)
    ISSCAPTURE:正在启动!!!
    ISSCAPTURE:开始完成!!!
    (此日志是否意味着捕获工作正常?)
    (笑声)
    链条运行时菜单
    (笑声)

    在这里、它可以响应键盘输入的"p:Print Performance Statistics"和"1:switchDisplayChannel"请求。

    那么、我认为我的捕获部件正在工作、是吗?

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

    您好、Brijesh

       我认为我已经找到问题的原因、它可能是 Vision SDK 的错误:

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~μ A

       vision_sdk\links_fw\src\rtos\links_IPU\iss_capture\issCaptureLink_drv.c:  

    Int32 IssCaptureLink_drvSaveFrame (IssCaptureLink_Obj *对象、UINT32 *通道)

    int32 status = system_link_status_EFAIL;
    if (pObj->createArgs.allocBufferForRawDump!= 0U)

    pObj->saveFrame = true;
    pObj->saveChId =*Chid;
    status = system_link_status_sok;

    返回(状态);

    Int32 IssCaptureLink_drvGetSaveFrameStatus (const IssCaptureLink_Obj * pObj、
    IssCaptureLink_GetSaveFrameStatus *pPrm)

    int32 status = system_link_status_EFAIL;

    pPrm->isSaveFrameComplete = false;
    pPrm->bufAddr = 0;
    pPrm->bufSize = 0;

    if (pObj->createArgs.allocBufferForRawDump!= 0U)

    if (pObj->saveFrame == false)

    pPrm->isSaveFrameComplete = true;
    /* MISRA.CAST.PTR_TO_INT
    * MISRAC_2004规则11.3
    *在指针和整型之间进行转换
    * KW 州:推迟->弃权->按案例分类
    * MISRAC_弃权 声明:指针地址以的形式存储
    * uint32。 在将指针地址分配给该地址后、将对其进行检查
    *它仅包含堆的有效地址。
    *
    pPrm->bufAddr =(uint32) pObj->saveFrameBufAddr;
    pPrm->bufSize = pObj->drvCalCfg.inFmt[0].pitch[0]*
    pObj->createArgs.outParams[0U].height;

    status = system_link_status_sok;

    返回(状态);

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~μ A

    我们可以看到 IssCaptureLink_drvSaveFrame 的作用是将 pObj->saveFrame 从 false 设置为 true,然后可以在 IssCaptureLink_drvGetSaveFrameStatus()中完成真正的缓冲区抑制工作。 因此,  在 IssCaptureLink_drvGetSaveFrameStatus 中,我认为我们应该使用“if (pObj->saveFrame == true)”,而不是“if (pObj->saveFrame == false)”。 在我更改此内容后、我可以在 SD 卡中获取原始文件:

    [IPU1-0] 189.633868 s:存在文件名 raw0004.RAW 4。。。。 跳过
    [IPU1-0] 189.636308 s:文件:写入文件[raw0005.raW](1843200字节)...
    [IPU1-0] 205.361770 s:文件:文件写入完成。 [1843200字节]
    [IPU1-0] 205.366497 s:将图像 raw0005.txt 写入文件
    [IPU1-0] 205.366589 s:文件:写入文件[raw0005.txt](24字节)...
    [IPU1-0] 205.491947 s:文件:文件写入完成。 [24字节]

    谢谢

    Xuanbo

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

    您好 Xuanbo、

    您能否在 0x4845 B350处检查寄存器 CAL_CSI2_STATUS0_l 的内容(前提是您正在使用 PHY 0)。

    如果您没有 CCS 访问权限、您可能可以在用例本身中(创建后)打印该寄存器的内容。  

    此致、Sujith

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

    不、这是不正确的。 不应在 GetSaveFrameStatus 中更改条件。 代码中没有错误。
    本质上、drvSaveFrame API 会设置该标志、如果设置了该标志、则会将捕获的缓冲区处理数据 API DMA 放入单独的存储器段中。 调用 GetSaveFrameStatus 时、它会检查 ProcessData API 是否复位此标志、然后将帧转储到存储器部分。 否则不会...

    在您的情况下、由于帧未被捕获、捕获很可能不起作用。 请检查该寄存器的状态0x4845 B350?
    如果该位置的值发生变化、则检测到输入流...

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

    你好, brijesh

       感谢您的讲解。

       我已经检查了寄存器 0x4845 B350的值、它始终为0。 那么捕获不起作用? 但是为什么会有"ISSCAPTURE: start done!!!"日志?

       由于 TDA2Ex 和 UB964以及 UB913和4个摄像头之间的 I2C 通信正常、为什么捕捉会失败? 可能的原因是什么?

       您提到我应该在捕获链接中放置断点、我该如何操作? 您能否详细解释一下如何调试此捕获故障?

    谢谢

    Xuanbo

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

    顺便说一下、我的板是基于 TDA2EX 的定制板、它将 UB64的 CSI0_CLKN/P、CSI0~3_D0N/P 与 TDA2EX 的 CSI2_0_DX/Y0~4相连。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,brijesh

    我的板不使用 HDMI 接口、因此用例的显示部分会暂时被忽略。
    显示链路是否会影响捕获链路?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Xuanbo、

    这意味着捕获模块很可能无法识别传入流。 还可以共享偏移量0x4845 B304的值吗?

    您在 TDA2Ex 上使用哪种传感器?

    此致、
    Brijesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没有 HDMI 不影响捕获链路、这不是链路问题。 我们需要首先确保捕获模块能够识别传入流。 让我们检查上述寄存器的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Brijesh

    寄存器0x4845 B304的值为4a054321。
    传感器? 您是指摄像头传感器? 它是 OV10635。

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

    您好 、Brijesh

       我想我已经解决了垃圾问题!  

       感谢您对寄存器 0x4845 B304值的建议、然后我注意到 CSI2极性集。
       usecase 的默认设置全为 false、但我的定制板为:

       (TDA2EX) CSI2_0_DX1 <-> CSI0_D0N (__LW_AT__UB964)

         (TDA2EX) CSI2_0_DY1 <-> CSI0_D0P (__LW_AT__UB964)

       这意味着我应该将 CSI2极性设置为 true。

       在我更改 极性后、转储命令现在可以工作! 可以在 SD 卡!上找到原始文件

      感谢您的建议。

      我仍然对用于打开原始文件的软件工具有另一个问题。 我已经下载了 YUVPlayer 来打开它、结果如下所示:

      

       正如您看到的、这不是我们想要的图像。 我认为转储帧不错、但我的观看者不正确。 那么、我应该使用什么原始文件查看器?

    谢谢  

    Xuanbo

      

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

    好的、好消息。 您还会看到帧计数器递增吗?

    我们使用 IrfanView 工具查看原始 Bayer 图像。 此工具免费提供。 请注意、您需要安装其他插件才能查看原始 Bayer 图像。

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

    我找到了正确的原始查看器来查看转储帧文件。
    感谢您的始终帮助。 你是一个很好的"老师"。

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

    在我更改 YUV 查看器的设置后、它是一个帧图像、我没有看到任何帧计数器增量。

    谢谢
    Xuanbo