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.

[参考译文] TDA4VE-Q1:无需 USB 电缆、不上电

Guru**** 2487425 points
Other Parts Discussed in Thread: TDA4VE-Q1

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1422864/tda4ve-q1-no-usb-cable-no-power-on

器件型号:TDA4VE-Q1

工具与软件:

我们从805升级到902、发现没有 USB 电缆无法打开。 问题是 SBL。 它可以在连接 USB 后打开。

我们已经排除了、它与 USB 电源无关

我们已经排除了 USB 电源与 USB 电源无关。 我不知道 UART 是否唤醒机器(机器可能处于睡眠模式、但此时未连接 USB 电缆时、电流约为0.48A、因此感觉不是处于睡眠模式)

我用了一根计算机无法识别的电缆(它应该是一根只具有充电功能的电缆、应该是一根没有 D+/D-的电缆)。 它还可以在连接时打开机器。 此外、我通过连接 USB 电缆开启了机器。 当我拔下机器的插头时、电流下降了大约一半。 当我再次连接它时,打印机上的打印件似乎正在打开。

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

    我想这是使用 TDA4VE-Q1的客户设计、而不是 TI 的 EVM 吗?  如果您恢复到805、问题是否会消失?

    您提到"排除与 USB 电源无关"?  您是如何得出这个结论的?  

    您能否提供电路板的原理图?  您使用什么引导模式?

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

    我想这是使用 TDA4VE-Q1的客户设计、而不是 TI 的 EVM 吗?  如果您恢复到805、问题是否会消失?

    我们设计的电路板基于 tda4ve、而不是 TI 的 EVM 板。 如果将 SBL 替换为 sdk805、则可以在不连接 USB 电缆的情况下引导它。

    您提到"排除与 USB 电源无关"?  您是如何得出这个结论的?  

    我们的硬件回答说805可能没有这个问题

    您能否提供电路板的原理图?  您使用什么引导模式?

    好像内部原理图好像没有提供、但是图片可以是抓图的。 此模式从 QSPI NAND 闪存引导。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在引导的哪个阶段、它会卡住、是否加载了 SBL、无法获取 TIFS?

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

    连接 USB 电缆后、器件开始打印。

    当我连接 USB 线时,它开始打印,就像当我打开电脑,如果我没有连接它,就没有打印。

    我们的硬件显示我们的晶体是25M、这不同于官方晶体。 我们应该如何设置它?

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

    由于使用不同的晶体频率、因此需要确保正确设置 MCU_BOOTMODE 位。  对于25MHz、MCU_BOOTMODE[2:0]应为"011"。  这些引脚是仅用于 MCU_BOOTMODE 选择还是也用于其他功能?

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

    这些应该是用于启动模式的 DIP 开关。 我们使用与805 SDK 相同的 DIP 开关方法(仅用于启动期间的 DIP 开关判断)。 应该无需在软件中设置寄存器。

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

    请告诉我现在有什么解决方案可以解决此问题?

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

    据我所知、9.2 SDK 中的问题是、如果您插入了 USB、则可以引导、但如果不这样做、甚至无法获得 SBL 日志。

    ROM 保持不变、因此我下一个猜测是、 即使在 SBL 版本的 print 语句之前、它可能会在 SBL 内部的某个位置发生故障。

    你是否已尝试连接到 R5内核、看看它到底在执行什么?

    此致
    Diwakar

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

    如果我们尝试连接仿真器、必须给仿真器加电、但 JTAG 电源也与 USB 连接在一起、因此在需要调试时会让仿真器加电并直接启动。 这应该会成为问题?

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

    我无法将您的图片放在一起以了解整体电源连接。  但是是的-从故障症状来看、确实存在与电源相关的问题。

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

    pdk/proj6788_pdk/packages/ti/boot/sbl/board/k3/sbl_main.c

    主电源

    int main()
    IO PULL 代码
    }

    CAI 在函数开始处拉动 IO 端口以确认是否

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

    我想在 sbl_main.c 文件中函数 main 的开头控制 WKUP_GPIO0_11的高电平和低电平。 我测量了波形、没发现任何影响。 我们的代码有什么问题吗?

    int main()
    {
    	   unsigned int regval = 0;
             *(volatile unsigned int*)(0x4301C0EC) = 0x00060007;
            Osal_delay(5);
            regval = *(volatile unsigned int*)(0x42110010);
            regval &= (~(1u<<11));
            *(volatile unsigned int*)(0x42110010) = regval;
    
            regval = *(volatile unsigned int*)(0x42110018);
            regval |= (1<<11);
    
            Osal_delay(1);
            regval = *(volatile unsigned int*)(0x42110018);
            regval &= (~(1<<11));

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

    不能理解你在想说什么。 您的意思是、当您尝试 在 SBL_main.c 中控制 WKUP_GPIO0_11时会发生崩溃、这就是它无法引导的原因吗?

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

    未能启动的原因可能是 SBL 想要向看门狗发送一个25Hz 方波、但是805代码端口无法输出一个信号

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

    什么是 805代码端口 ?

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

    void SBL_WdgFeed(uint8_t status)
    {
        if(status == FEED_WDG_WITH_DELAY)
        {
            /*  set output high */
            GPIOPinWrite_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN, GPIO_PIN_HIGH);
            Osal_delay(1);
            /*  set output low */
            GPIOPinWrite_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN, GPIO_PIN_LOW);
        }else
        {
            GPIOPinWrite_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN, status);
        }
    }
    
    uint8_t SBL_CheckTimer0MatchIrq(void)
    {
        uint8_t reval = 0;
        if((TIMERIntStatusGet(Timer0_baseAddr)&TIMER_INT_MAT_EN_FLAG))
        {
            SBL_WdgFeed(FEED_WDG_WITH_DELAY);
            TIMERIntStatusClear(Timer0_baseAddr, TIMER_INT_MAT_EN_FLAG);
            TIMERCounterSet(Timer0_baseAddr, 0);
            reval = 1;
        }
        return reval; 
    } 
    
    void feed_wdg_before_entry_mcu(void)
    {
        Osal_DeleteInterrupt(mcu_timer0_hwiHandle,0);
        while(1 != (TIMERIntStatusGet(Timer0_baseAddr)&TIMER_INT_MAT_EN_FLAG));
        if(GPIO_PIN_HIGH == GPIOPinRead_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN))
        {
            SBL_WdgFeed(FEED_WDG_WITH_DELAY);
            TIMERIntStatusClear(Timer0_baseAddr, TIMER_INT_MAT_EN_FLAG);
            TIMERCounterSet(Timer0_baseAddr, 0);
            Osal_delay(20);
        }else if(GPIO_PIN_LOW == GPIOPinRead_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN))
        {
        }
        
    }
    unsigned int gcount = 0;
    
    void Gpt_Ch0Isr(void)
    {
    
        SBL_log(SBL_LOG_MIN, "\n\nenter Gpt_Ch0Isr runinto!!\n\n");
        if((TIMERIntStatusGet(Timer0_baseAddr)&TIMER_INT_MAT_EN_FLAG))
        {SBL_log(SBL_LOG_MIN, "\n\nin Gpt_Ch0Isr runinto!!\n\n");
            if(GPIO_PIN_LOW == GPIOPinRead_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN))
            {SBL_log(SBL_LOG_MIN, "\n\nGpt_Ch0Isr runinto GPIO_PIN_HIGH!!\n\n");
                SBL_WdgFeed(GPIO_PIN_HIGH);
            }else if(GPIO_PIN_HIGH == GPIOPinRead_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN))
            {SBL_log(SBL_LOG_MIN, "\n\nGpt_Ch0Isr runinto GPIO_PIN_LOW!!\n\n");
                SBL_WdgFeed(GPIO_PIN_LOW);
            }
            SBL_log(SBL_LOG_MIN, "\n\nGpt_Ch0Isr runinto in!!\n\n");
            TIMERIntStatusClear(Timer0_baseAddr, TIMER_INT_MAT_EN_FLAG);
            TIMERCounterSet(Timer0_baseAddr, 0);
        }
    
    }
    
    typedef struct
    {
        /* ON: this interrupt need routing to Mcu R5F             *
        *  OFF: No routing required                               *
        *  only Main domain peripheral need routing to Mcu domain *
        *  Mcu domain peripheral prohibit routing to Main domain */
        uint8_t  Route_Flag;
        /* TDA4 peripherals ID that search from tisci_devices.h */
        uint16_t Device_Id;
        /* three category interrupt lines */
        uint16_t Int_LineNum;
        /* TISCI_DEV_MCU_R5FSS0_CORE0 or TISCI_DEV_MCU_R5FSS0_CORE1 */
        uint32_t Dst_Coreid;
        /* Interrupts number, In particular, peripherals that need routing need to be calculated from 160  */
        uint16_t Int_Num;
        /* Interrupt service routine pointer, register to VIM */
        HwiP_DirectFxn Int_Fcuntion;
        /* Interrupt priority */
        uint8_t priority;
    }IrqM_ConfigType;
    
    const IrqM_ConfigType IrqM_ConfigRoot[] = 
    {
        {
            /* Route_Flag    = */0,
            /* Device_Id     = */TISCI_DEV_MCU_TIMER0,
            /* Int_LineNum   = */0,
            /* Dst_Coreid    = */TISCI_DEV_MCU_R5FSS0_CORE0,
            /* Int_Num       = */CSLR_MCU_R5FSS0_CORE0_INTR_MCU_TIMER0_INTR_PEND_0,
            /* Int_Fcuntion  = */&Gpt_Ch0Isr,
            /* priority      = */0,
        },
    };
    
    SBL CALL PROCESS SBL_MAIN.C
    
    
      
      /*  initial wdg pinmux and first feed wdg*/
    
             Board_wdgPinmuxConfig();
            //  Osal_delay(1);
             GPIOSetDirMode_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN, GPIO_DIRECTION_OUTPUT);
             GPIOPinWrite_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN, GPIO_PIN_HIGH);
             Osal_delay(1);
             GPIOPinWrite_v0(CSL_WKUP_GPIO0_BASE, J721S2_GPIO_WDG_IN_PIN, GPIO_PIN_LOW); 
             gcount = 0;
            SBL_log(SBL_LOG_MIN, "feed once %s (%s - %s)\n", SBL_VERSION_STR, __DATE__, __TIME__);
    
    
    
    
            Board_moduleClockInitMcu(); //125M
            SBL_log(SBL_LOG_MIN, "1111 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
            TIMERPreScalerClkEnable(Timer0_baseAddr, ptv);
            SBL_log(SBL_LOG_MIN, "1222 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
            TIMERIntEnable(Timer0_baseAddr,TIMER_INT_MAT_EN_FLAG);
            SBL_log(SBL_LOG_MIN, "1333 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
            TIMERCounterSet(Timer0_baseAddr, 0);
            SBL_log(SBL_LOG_MIN, "1444 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
            TIMERCompareSet(Timer0_baseAddr, 4000000);
            SBL_log(SBL_LOG_MIN, "1555 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
            TIMERModeConfigure(Timer0_baseAddr, TIMER_AUTORLD_CMP_ENABLE);
            SBL_log(SBL_LOG_MIN, "1666 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
            TIMERIntStatusClear(Timer0_baseAddr, TIMER_INT_OVF_EN_FLAG);
            SBL_log(SBL_LOG_MIN, "1777 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
            TIMEREnable(CSL_MCU_TIMER0_CFG_BASE);
            SBL_log(SBL_LOG_MIN, "1888 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
        }
            SBL_log(SBL_LOG_MIN, "1999 %s (%s - %s)\n\n", SBL_VERSION_STR, __DATE__, __TIME__);
    
    while(1 != SBL_CheckTimer0MatchIrq()){};
        /* initial MCU_TIMER0 interrupt */
        {
            OsalRegisterIntrParams_t intrPrms;
            // OsalInterruptRetCode_e osalRetVal;
    
            Osal_RegisterInterrupt_initParams(&intrPrms);
            intrPrms.corepacConfig.isrRoutine       = (Osal_IsrRoutine)(IrqM_ConfigRoot[0].Int_Fcuntion);
            intrPrms.corepacConfig.priority         = IrqM_ConfigRoot[0].priority;
            intrPrms.corepacConfig.corepacEventNum  = 0U; /* NOT USED ? */
            intrPrms.corepacConfig.intVecNum        = (int32_t)(IrqM_ConfigRoot[0].Int_Num);
        
            Osal_RegisterInterrupt(&intrPrms, &mcu_timer0_hwiHandle);
        }
            /*  set wdg timer match value  */
        {
            TIMERCompareSet(Timer0_baseAddr, 2500000);
        }

    最新的问题是计时器不准确,所以狗不能及时喂食。

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

    您好!

    [报价 userid="615146" url="~/support/processors-group/processors/f/processors-forum/1422864/tda4ve-q1-no-usb-cable-no-power-on/5462304 #5462304"]我想在 sbl_main.c 文件中函数 main 的开头控制 WKUP_GPIO0_11的高低电平。 我测量了波形、没发现任何影响。 我们的代码是否有问题?

    您是否仍在操作 WKUP_GPIO0_11时遇到问题? 如果是、您能提供 GPIO 寄存器的转储吗?

    谢谢!

    Neehar

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

    您好!

    接下来、此问题是否仍然存在?

    谢谢!

    Neehar