主题中讨论的其他器件:TDA4VH
工具与软件:
我听说在使用 TDA4VH 9.2 SDK 时存在 DFU 问题。 是否有办法在不升级 SDK 版本的情况下解决此问题?
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.
我将使用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、
[报价 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 版本出现问题。
问题:
内核通过修改相应的寄存器值来解决该问题、但在使用 DFU 进行更新时、无法修改该值、因此会将其复位。
此致、
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、

// 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
AVS 的原理图与开发套件相同。
这是正确的器件吗?
还在 uboot 上确认实际的 i2c 地址
[报价]这是一个独立稳压器、不属于 TPS6594x。 EVM 上的从 ID 是0x48、不确定定制电路板上的从 ID 是0x12。
在 PMIC 探头函数中、您可以直接添加寄存器写入吗?

-基尔西
您好、Kim、
所有 AVS 代码都在 R5 SPL 阶段执行。
中检查了0x48当前在 wkup_i2c 和0x12
WKUP_I2C 可用于在0x48处写入从器件? ESM PMIC 驱动器也可用于写入 I2C。
驱动程序/MISC./ESM_PMIC.c
PMIC_ESM_PROBE
检查是否调用了上述函数、如果是、则添加起来很简单:
RET = PMIC_reg_write (dev->parent、0x9、0xBF);
-基尔西
您好、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的单独补丁文件?
此致、
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