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.

[参考译文] DM385:调整器溢出失败后 ISS 摄像头重新启动。

Guru**** 2928980 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/665356/dm385-iss-camera-restart-after-resizer-overflow-failed

器件型号:DM385
Thread 中讨论的其他器件:SysConfig

你好!

我有一个运行 IPNC RDK 3.0.0的剖面板。

我们使用的传感器是 AR0330。

当我们运行摄像头+流式传输时、一切正常。 当使用 LCD 图形添加 Linux 程序时、很快就会出现电阻器溢出。

我看到很多关于溢出的线程。 此帖子不涉及溢出删除(PBBPR=0xFFFFFF20帮助我解决该问题)。

代码中有摄像机重启尝试。 当溢出发生时、ISS 被禁用、已重置、应再次启动。

但具有并行接口和 CSI2传感器的传感器的代码不同。

通常、相同的代码用于常规启动和溢出后的启动。

-在常规启动期间,传感器流在特殊位置启动(ISS_Ar0330EnableStreaming ();)以完成  csi2_wait_phy_reset ()(就在它前面)。

-当溢出发生时、ISS 被重置并且此代码再次运行。 ISS_Ar0330EnableStreaming ()函数可实现流式传输,但不设置其他寄存器。 因此、在溢出时刻、传感器仍在运行、此函数不会发生任何变化。

-传感器正在运行,没有发生必要的数据/时钟通道更改, 并且 csi2_wait_phy_reset ()只是挂起。

此外,在溢出后重新启动期间,函数  ISS_Ar0330EnableStreaming ()被称为形式关键段(Task_disable() ISS_capResetAndRestart()中被调用),在  ISS_Ar0330EnableStreaming ()中 ,我们有 Task_sleep(200),无法从关键段调用它。

此代码似乎未使用 CSI2传感器进行测试。

 为了避免代码挂起并在重新启动期间完成 csi2_wait_phy_reset ()、我添加 了 ISS_Ar0330StopStreaming  函数并删除了具有长循环的 Task_sleep()。

它允许我完成  csi2_wait_phy_reset (),但此时摄像机捕获不会恢复,我不知道下一步要做什么。

IPNC 团队能否帮助我实现摄像头的稳定重启?

谢谢你。

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

    有关 IPNC 开发问题、我们建议您联系我们的合作伙伴:

    e2e.ti.com/.../660418

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

    您好!

     我们遇到了同样的问题。 这里似乎有很多错误:

    1. ISS_captResetAndRestart()中的 ISP 复位不起作用。  我完全按照 手册实施了它。 通过此实现,ISP 将完成重置:

       /*设置 ISP5_SysConfig.STANDBYMODE = 2 (智能待机)-位4..5*/
       ISP_regs->ISP5_SysConfig &= 0xFFFFFFCF;
       ISP_regs->ISP5_SysConfig |= 0x2;

       /*将 ISP5_CTRL.MSTANDBY 设置为1。 位24*/
       ISP_regs->ISP5_CTRL |= 0x1000000;

       /*对 ISP5_CTRL.MSTANDBY_WAIT 的轮询= 1. 位20*/
       while ((ISP_regs->ISP5_CTRL & 0x100000)=0);

       /*然后、可以应用软复位(ISP5_SysConfig.SOFTRESET = 1)。*/
       ISP_regs->ISP5_SysConfig |= 0x2;

       /*等待重置完成*/
       while ((ISP_regs->ISP5_SysConfig & 0x2)!= 0);

    2.在 issDrvRawToYuvConfig()中,有一行注释掉:

       // pIssCsi2Config.Timing_IO =&csi2TimingDefaultParams;

     这意味着,由于 pIssCsi2Config 定义为栈上的局部变量,因此该 timing_io 指针未定义(随机值)。 它会导致 csi2_config()中出现意外行为。

    但是、如果您再次将其注释到中、它也不起作用。 链中的错误。

    简而言之:我通过注释 csi2_config()中的以下块来使其运行:

    #if 0/*  EKR:注释此块。 它无论如何都不起作用:   csi2_config_timing()由于 timing_io 结构无效而无法工作,
            以下函数不起作用,因为 csi2_config_timing()始终返回 CSI2_failure*/


       /* CSI2时序寄存器的配置*/
       if (retval!= CSI2_FAILURE)
           RetVal = csi2_config_timing (device_num、(aConfig->timing_IO));

       /*以 H/W 和中的方式查找模块支持的上下文数量
        *确保 OEN 不超过此限制*/
       number_of 上下文=
           CSI2_FEXT (csi2_regs->CSI2_GNQ、CSI2_GNQ_NBCONTEXTS_SHIFT、
                     CSI2_GNQ_NBCONTEXTS_MASK);

       /*设置上下文信息*/

       regval =(uint32) aConfig->context_set_FLAG;

       对于(CTR_CONTEXT = 0;CTR_CONTEXT < NUMBER_OV_CONTEXT;CTR_CONTEXT ++)
       {
           /*了解是否要配置环境*/

           ON_OFF =(CSI2_CONTRAL_FITY_BIT_T)(regval &(0x00000001));
           regval = regval >> 1;

           if (ON_OFF =CSI2_ENABLE_BIT && retval!= CSI2_FAILURE)
               RetVal =
                   csi2_config_context (device_num、CTR_context、
                                       aConfig->ctx_cfg_PTR_array[CTR_context]);
       }

       /*为 CSI2、复数 I/O 和上下文配置全局中断
        *中断*/
       regval =(uint32) aConfig->csi2_IRQ_enable;

       对于(CTR_GLOBAL_IRQ = 0;CTR_GLOBAL_IRQ < MAX_CSI2_GLOBAL_INTERRUPTS;
            CTR_GLOBAL_IRQ++)
       {
           /*了解是否要配置环境*/
           ON_OFF =(CSI2_CONTRAL_FITY_BIT_T)(regval &(0x00000001));
           regval = regval >> 1;

           if ((ON_OFF =CSI2_ENABLE_BIT)&&(retval!= CSI2_FAILURE))
               RetVal =
                   csi2_config_global_interrupt (device_num、
                                                (CSI2_GLOBAL_INTERRUPT_ID_T)
                                                CTR_GLOBAL_IRQ、ON_OFF);

       }
    #endif

    此致、

    Eduard

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

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

    我会进行更改、但这对我没有帮助。

    issdrv_captureApi.c:

    /*重置 ISP h/w */

    #if 0 //原始变体
    ISP_regs->ISP5_SysConfig |= 0x2;
    对于(延迟= 0U;延迟< ISS_CAPT_RESET_DELAY;延迟++);
    while (ISP_regs->ISP5_SysConfig & 0x2 =0x1);
    #endif
    #if 1.
    /*设置 ISP5_SysConfig.STANDBYMODE = 2 (智能待机)-位4..5*/
    ISP_regs->ISP5_SysConfig &= 0xFFFFFFCF;
    ISP_regs->ISP5_SysConfig |= 0x2;

    /*将 ISP5_CTRL.MSTANDBY 设置为1。 位24*/
    ISP_regs->ISP5_CTRL |= 0x1000000;

    /*对 ISP5_CTRL.MSTANDBY_WAIT 的轮询= 1. 位20*/
    while ((ISP_regs->ISP5_CTRL & 0x100000)=0);

    /*然后、可以应用软复位(ISP5_SysConfig.SOFTRESET = 1)。*/
    ISP_regs->ISP5_SysConfig |= 0x2;

    /*等待重置完成*/
    while ((ISP_regs->ISP5_SysConfig & 0x2)!= 0);
    #endif
    Iss_reinit (NULL);


    此外、csi2.c 中的注释代码由于 csi2_config_timing retval 而被跳过

    您是否进行了一些其他更改?

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

    Eduard、我找到了一些其他遗漏的代码。

    在 iSS_captStart 中、是一些特定于 MIPI 的代码、在 iSS_captResetAndRestart 中缺失。

    #ifdef USE_MIPI_MODE
    ISIF_REG->CGAMMAWD = 0x7708;
    iSS_regs->iSS_CTRL &=~0x0000000C;//选择 CSI2或并行
    csi2A_regs->CSI2_CTRL |= 0x00000800;
    ISP_regs ->ISP5_CTRL |= 0x00C00000;
    #endif

    因此、在 ISS 复位后、默认设置并行接口。
    使用此附加功能、捕获/流式传输成功重启、但仅一次。

    第二次溢出后,捕获统计数据将继续进行,但在网络流中,我看到正在循环图片(~5-10帧)。

    为了检查溢出反应、我通过设置调整器 Fract div t0 0xD000来强制溢出。
    devmem2 0x5C010414 w 0x0000D000

    第二次溢出后、不再发生通过更改 Fract.div 来溢出。 有些东西坏了

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

    您好 Dmitry、

    我在我的 ISS_captresetAndRestart 版本中遗漏了此代码。 我在 issdrv_capureApi.c 中做了一些其他更改 我建议您给我写一封电子邮件、然后我会向您发送我的 issdrv_capureApi.c 版本

    此致、

    Eduard

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

    很抱歉耽误你的时间。

    我的电子邮件:bodnya.d@gmail.com

    谢谢你。