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.

[参考译文] TDA4VH-Q1:TDA4VH DFU 错误

Guru**** 2482225 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1447257/tda4vh-q1-tda4vh-dfu-error

器件型号:TDA4VH-Q1
主题中讨论的其他器件:TDA4VH

工具与软件:

我听说在使用 TDA4VH 9.2 SDK 时存在 DFU 问题。 是否有办法在不升级 SDK 版本的情况下解决此问题?

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

    我将使用10.0 SDK 来设置 DFU。

    我在写入 rootfs 时遇到以下错误。

    原因是什么?

    DFU state(2) = dfuIDLE, status(0) = No error condition is present
    Done!
    u-boot.img.raw Success
    dfu-util 0.11-dev
    
    Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
    Copyright 2010-2021 Tormod Volden and Stefan Schmidt
    This program is Free Software and has ABSOLUTELY NO WARRANTY
    Please report bugs to sourceforge.net/.../
    
    dfu-util: Warning: Invalid DFU suffix signature
    dfu-util: A valid DFU suffix will be required in a future dfu-util release
    Opening DFU capable USB device...
    Device ID 0451:6168
    Device DFU version 0110
    Claiming USB DFU Interface...
    Setting Alternate Interface #1 ...
    Determining device status...
    DFU state(2) = dfuIDLE, status(0) = No error condition is present
    DFU mode device DFU version 0110
    Device returned transfer size 4096
    Copying data from PC to DFU device
    Download	[=                        ]   7%    995377152 bytesdfu-util: Error during download (LIBUSB_ERROR_IO)
    

    dmesg 日志显示一个错误、其中 USB 连接断开。

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

    您好、Kim  

    您正在尝试发送哪个映像?

    此致
    Diwakar

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

    你好、Dhyani

    我找到了原因

    由于在13分钟后重新启动、这似乎是 PMIC 看门狗问题

    您能告诉我如何在 uboot 侧禁用 PMIC wd_en 吗?

    此致、

    Kim

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

    您好、Kim、

    [报价 userid="596322" url="~/support/processors-group/processors/f/processors-forum/1447257/tda4vh-q1-tda4vh-dfu-error/5555665 #55665"]

    由于在13分钟后重新启动、这似乎是 PMIC 看门狗问题

    [报价]

    您使用的是 定制电路板还是 TI EVM? 知道复位的原因吗?

    此致
    Diwakar

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

    您好、Dhyani

    我们正在设计一款定制电路板。

    原因是 PMIC NVM 版本出现问题。

    问题:

    https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1444589/tps6594-q1-debug-tps6594

    内核通过修改相应的寄存器值来解决该问题、但在使用 DFU 进行更新时、无法修改该值、因此会将其复位。

    此致、

    Kim

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

    您好、Kim、

    这是根据您共享的上述 E2E 帖子所需的 I2C 寄存器写入。 那么、您在什么阶段需要写入这些内容呢?

    -基尔西

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

    您好、Keerthy

    在 uboot 中、输入下面的命令。

    i2c mw 0x12 0x09.1 0xbf 1

    在内核中、 输入下面的命令。

    i2cset -f -y 2 0x12 0x09 0xbf

    我们需要通过修改 uboot 驱动程序中的 tps65941.c 代码来继续。

    此致、

    Kim

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

    您好、Kim、

    假设 在引导流程中调用 tps65941_BUCK_val:

    diff --git a/drivers/power/regulator/tps65941_regulator.c b/drivers/power/regulator/tps65941_regulator.c
    index ee86b8894a..bdfdc183d8 100644
    --- a/drivers/power/regulator/tps65941_regulator.c
    +++ b/drivers/power/regulator/tps65941_regulator.c
    @@ -173,6 +173,7 @@ static int tps65941_buck_val(struct udevice *dev, int op, int *uV)
     
            ret = pmic_reg_write(dev->parent, adr, ret);
     
    +       ret = pmic_reg_write(dev->parent, 0x9, 0xbf);
            udelay(uwait);
     
            return ret;
    

    此致、
    基尔西

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

    您好、Keerthy

    我应用了补丁,但症状似乎是相同的。

    我试图离开一个日志,但似乎日志没有留在那部分。

    我做了什么错了吗?

    Regars、

    Kim

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

    Kim、

    在 R5 SPL 中启用。 在您的定制板上、您是否启用了 AVS -自适应电压调节?
    如果未启用该功能、则不会调用该函数。

    -基尔西

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

    Keerthy、

    AVS 的原理图与开发套件相同。

    这是正确的器件吗?

    还在 uboot 上确认实际的 i2c 地址。

    此致、

    Kim

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

    Keerthy、

    // SPDX-License-Identifier: GPL-2.0
    /*
     * (C) Copyright 2019 Texas Instruments Incorporated, <www.ti.com>
     * Keerthy <j-keerthy@ti.com>
     */
    
    #include <common.h>
    #include <fdtdec.h>
    #include <errno.h>
    #include <dm.h>
    #include <i2c.h>
    #include <log.h>
    #include <linux/printk.h>
    #include <power/pmic.h>
    #include <power/regulator.h>
    #include <power/tps65941.h>
    #include <dm/device.h>
    
    #define TPS65941_WD_THR_CFG		0x409
    #define TPS65941_WD_EN_MASK		BIT(6)
    
    static const struct pmic_child_info pmic_children_info[] = {
    	{ .prefix = "ldo", .driver = TPS65941_LDO_DRIVER },
    	{ .prefix = "buck", .driver = TPS65941_BUCK_DRIVER },
    	{ },
    };
    
    static int tps65941_write(struct udevice *dev, uint reg, const uint8_t *buff,
    			  int len)
    {
    	if (dm_i2c_write(dev, reg, buff, len)) {
    		pr_err("write error to device: %p register: %#x!\n", dev, reg);
    		return -EIO;
    	}
    
    	return 0;
    }
    
    static int tps65941_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
    {
    	if (dm_i2c_read(dev, reg, buff, len)) {
    		pr_err("read error from device: %p register: %#x!\n", dev, reg);
    		return -EIO;
    	}
    
    	return 0;
    }
    
    static int tps65941_bind(struct udevice *dev)
    {
    	ofnode regulators_node;
    	int children;
    
    	if (dev->driver_data == TPS65941_WD)
    		return 0;
    	
    	regulators_node = dev_read_subnode(dev, "regulators");
    	if (!ofnode_valid(regulators_node)) {
    		debug("%s: %s regulators subnode not found!\n", __func__,
    		      dev->name);
    		return -ENXIO;
    	}
    
    	debug("%s: '%s' - found regulators subnode\n", __func__, dev->name);
    
    	children = pmic_bind_children(dev, regulators_node, pmic_children_info);
    	if (!children)
    		printf("%s: %s - no child found\n", __func__, dev->name);
    
    	/* Probe all the child devices */
    	return dm_scan_fdt_dev(dev);
    }
    
    static int stop_watchdog(struct udevice *dev)
    {
    	int ret;
    	
    	/* Disable WD */
    	ret = dm_i2c_reg_read(dev, TPS65941_WD_THR_CFG);
    	if (1) {
    		pr_err("failed to read i2c reg (%d)\n", ret);
    		//return ret;
    	}
    
    	ret &= ~TPS65941_WD_EN_MASK;
    	ret = dm_i2c_reg_write(dev, TPS65941_WD_THR_CFG, ret);
    	if (1) {
    		pr_err("%s: %s write WD_EN fail!\n", __func__, dev->name);
    		//return ret;
    	}
    
    	ret = dm_i2c_reg_read(dev, TPS65941_WD_THR_CFG);
    	if (1) {
    		pr_err("failed to read back i2c reg (%d)\n", ret);
    		//return ret;
    	}
    
    	return 0;
    }
    
    static int tps65941_probe(struct udevice *dev)
    {
    	pr_err("%s: %s ------------------------!\n", __func__, dev->name);
    		
    	if (dev->driver_data == TPS65941_WD)
    		return stop_watchdog(dev);
    	return 0;
    }
    
    
    static struct dm_pmic_ops tps65941_ops = {
    	.read = tps65941_read,
    	.write = tps65941_write,
    };
    
    static const struct udevice_id tps65941_ids[] = {
    	{ .compatible = "ti,tps659411", .data = TPS659411 },
    	{ .compatible = "ti,tps659412", .data = TPS659411 },
    	{ .compatible = "ti,tps659413", .data = TPS659413 },
    	{ .compatible = "ti,lp876441",  .data =  LP876441 },
    	{ .compatible = "ti,tps65224",  .data =  TPS65224 },
    	{ .compatible = "ti,tps6594-q1", .data =  TPS659411 },
    	{ .compatible = "ti,tps6593-q1", .data =  TPS659413 },
    	{ .compatible = "ti,lp8764-q1",  .data =  LP876441 },
    	{ .compatible = "ti,tps659413_wd",  .data =  TPS65941_WD },
    	{ }
    };
    
    U_BOOT_DRIVER(pmic_tps65941) = {
    	.name = "tps65941_pmic",
    	.id = UCLASS_PMIC,
    	.of_match = tps65941_ids,
    	.bind = tps65941_bind,
    	.probe = tps65941_probe,
    	.ops = &tps65941_ops,
    };

    我正在尝试向 MCU_i2c0添加 tps65941条目、但它无法正常工作。

    0x12器件驱动程序似乎未运行。

    不能运行两个驱动程序?

    此致、

    Kim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="596322" url="~/support/processors-group/processors/f/processors-forum/1447257/tda4vh-q1-tda4vh-dfu-error/5557958 #5557958"]

    AVS 的原理图与开发套件相同。

    这是正确的器件吗?

    还在 uboot 上确认实际的 i2c 地址

    [报价]

    这是一个独立稳压器、不属于 TPS6594x。 EVM 上的从 ID 是0x48、不确定定制电路板上的从 ID 是0x12。
    在 PMIC 探头函数中、您可以直接添加寄存器写入吗?

    -基尔西

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

    我们使用的 PMIC 与开发套件相同。

    因此、从设备 ID 为0x48。

    目前在 wkup_i2c 中检查0x48、在 mcu_i2c 中检查0x12。 这就是 I2C 总线不同的原因。 我对 u_boot 侧代码没有太多经验。 是否可以对 MCU_i2c 0x12所在的 i2c 总线进行写入?

    此致、

    Kim

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

    您好、Kim、

    所有 AVS 代码都在 R5 SPL 阶段执行。  

    当前在 wkup_i2c 和0x12
    中检查了0x48

    WKUP_I2C 可用于在0x48处写入从器件? ESM PMIC 驱动器也可用于写入 I2C。

    驱动程序/MISC./ESM_PMIC.c

    PMIC_ESM_PROBE

    检查是否调用了上述函数、如果是、则添加起来很简单:

    RET = PMIC_reg_write (dev->parent、0x9、0xBF);

    -基尔西

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

    您好、Keerthy

    该函数已调用、但仍仅在地址0x09处输出值0x2C。 它与 nvm.bin 文件中地址0x09处的值相同。

    我要更改的值为地址0x409。

    此致、

    Kim

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

    您好、Kim、

    您可以尝试执行以下操作: board/ti/common/board_detect.c

    RC = ucclass_get_device_by_seq (UCLASS_I2C、 bus_addr 、&B);
    IF (RC)
    返回 RC;
    RC = dm_i2c_probe (bus、 dev_addr 、0、&DEV);
    IF (RC)
    返回 RC;

    BUS_addr 应该为 MCU_I2C 总线编号。
    对于 MCU_I2C、即 slave_id、dev_addr 为0x12。

    那么您可以执行 dm_i2c_write

    如果有需要、请告诉我。 我们的软件不支持 PMIC 看门狗、因此需要采取上述措施。

    -基尔西

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

    您好、Keerthy

    启用 MCU_i2c0后、出现如下所示的错误。

    我找到一个主题类似的论坛、是否有针对 MCU_i2c0的单独补丁文件?

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1369177/tda4vh-q1-how-does-the-mcu-domain-can-use-a-i2c-controller-of-the-main-domain/5234274?tisearch=e2e-sitesearch&keymatch=ti_power_domain_of_xlate%25253A%252520invalid%252520dev-id%25253A%252520277#5234274

    此致、

    Kim

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

    您好、Keerthy

    我查看了 TRM 文档、因为已确认是电源问题。 我检查了下表。

    ti-processor-sdk-linux-adas-j784s4-evm-10_00_00_08/board-support/ti-u-boot-2024.04+git/arch/arm/mach-k3/r5/j784s4/dev-data.c

    然后、在按如下所示对其进行修改后、看门狗问题似乎已经解决了13分钟。

    我想我需要对其进行更多测试。

    如果我应用上述补丁、电路板是否会有任何问题?

    此致、

    Kim

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

    Kim、

    这就是对 MCU_I2C0的依赖。 你所做的就是根据 PMCI 需要初始化 MCU_I2C0。 这是正确的。
    我希望您现在能够访问 SPL PMIC 驱动器中的 PMIC 寄存器。

    此致、
    基尔西