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.

[参考译文] UCD9090:I2C/PMBus 编程

Guru**** 2516170 points
Other Parts Discussed in Thread: UCD9246, UCD9090, UCD9090A

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/732598/ucd9090-i2c-pmbus-programming

器件型号:UCD9090
主题中讨论的其他器件:UCD9246、、

Yihe

当我在初始化该器件时遇到问题时、您帮助了我。 非常感谢。 我可以再问一个问题吗?

设备 ID 已读取。 闪存被读取。 但 我在编写数据时遇到了困难。 我是否可以问您是否正确的操作顺序?  

a. 干净的写保护

1.开始

2.发送设备地址|写入

3.发送

0xe2 -命令

0x05 -数据宽度

0x04、0x00、0x00、0x01、0x04 -命令数据值

4.重复启动

5. 发送设备地址|写入

6.发送

0xe3 -命令

0x04 –数据大小

0x00、0x00、0x88、0x20 -命令数据值

停下

b.写入闪存

除数据大小-数据外、序列与上述序列相同。

--------------

当我尝试在步骤6上发送数据大小时收到 NACK。  

谢谢你

Dmitry

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我强烈建议在 www.ti.com/.../usb-to-gpio 上订购 USB_TO_GPIO 适配器。
    接收适配器后、下载 Fusion GUI Software @www.ti.com/.../fusion_digital_power_designer

    融合将提供各种闪存脚本文件、帮助您避免从头开始执行所有操作。 这将为您节省大量时间来执行这些基本的 i2c 转换。
    此致
    Yihe
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yihe
    我确切地知道我对你感到无聊的地方。 请告诉我。 但我必须做所需的事情。 我知道 Fusion 和适配器以及各种闪存脚本等... 但我必须不使用这些工具。
    如果您不愿意或无法回答这些特定问题、请告诉我
    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    别让我弄错了。 我建议的方法是更有效地解决您的问题。
    我知道您将开发自己的软件。 但 GUI 是一个非常有用的参考、您可以从地面开始使用它、而不是从地面执行所有操作。
    从 GUI 导出的脚本文件将告诉您与器件进行通信的正确方法。 您不必考虑命令的顺序和格式。 它们包含在脚本文件中。 此外、GUI 还具有 I2C/SMBus 级别实用程序、允许您手动通过一条命令发送一条命令。 这也是一个很好的工具、可帮助您调试自己的问题。
    此致
    Yihe
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为何 Phyton 无法在 www.ti.com/.../usb-to-gpio 和 FUSION 上使用 TI USB_TO_GPIO 适配器
    GUI 软件@www.ti.com/.../fusion_digital_power_designer?
    原因很简单-我们生产自己的生产级通用器件编程器、用于对多 PCB 面板进行批量编程。
    通常、一个电路板承载多个需要由一个通用器件编程器刷写的可编程器件。
    Flextronics (https://flex.com/) -一家大型公司、在墨西哥有工厂、并且已经在使用 Phyton 生产设备
    编程人员-要求我们支持对其电路板上设置的 TI UCD9090和 UCD9246器件进行编程。
    由于 UCD9090和 UCD9246数据表不包含 I2C 编程规格、并且我们的反向工程也是如此
    我们的工作成果不是很成功、我们需要专业 TI 工程师的帮助来处理 UCD9090和 UCD9246器件。

    这就是我们今天的现状

    我们尝试对两个器件进行编程。 UCD9090和 UCD9246。 在这两种情况下、我们都遇到了一些障碍。

    因此、两个器件都发送了适当的 ID、并且数据闪存可能被正确读取。 但在方案编制方面有一些差异。

    首先、我向器件发送以下序列:

    I2C 启动
    2.设备地址(0x68<<1|0) 0x68 -地址,0表示写入
    3.命令(0xe2) parm_info
    4.命令大小(5)
    5.命令内容(0x02、低偏移、高偏移、0x01、0x04)
    6. I2C 停止
    7. I2C 启动
    8.设备地址
    9.命令(0xe3) parm_value
    10.命令大小(4字节数据块)
    11.数据
    12. I2C 停止
    13.延迟200us

    所有发送的延迟大约为2 us

    即 UCD9090。 前4个字节的写入没有任何问题、但进一步诉诸器件是无效的。 (在任何第一次通话时 NACK)

    UCD9246不执行任何操作。 第11步我有 NACK (第4个字节上有 NACK)

    UCD9090具有 DFLASHCTRL 寄存器。 在编程/擦除之前、我必须清除受保护位。 我这么做、它就工作了。

    UCD9246没有这样的寄存器。 (它表示 parm_info 的内容。 没有第4行=数据闪存控制寄存器)。 对吧?

    此外、我们根本没有该器件的编程规格。 您能向我们提供这些信息吗?

    3.我意外地将命令0xd9 (ROM_MODE)发送到 UCD9090。 现在、我有一个"砖型"。 是否可以在不使用 Fusion 和其他本地工具的情况下恢复设备?


    Flextronics 客户的情况现在非常紧急、他们每天都在催促我们。

    我们非常感谢您提供及时和详细的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我知道您需要开发自己的软件、但无论什么、您都需要 Fusion GUI 来为自己的工具提供输入文件。 您不能跳过此操作。  对于列表中提到的测试、您是否遵循从融合 GUI 生成的脚本?

    随附的文件是适用于您所使用的两个 UCD 器件的编程指南。

    至于 ROM 调制、您必须使用 Fusion GUI 来恢复。 请参阅以下说明

    e2e.ti.com/.../recover-UCD9090-from-ROM-mode.pdf

    此致

    Yihe

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

    某种程度上允许一个附件。 这是编程指南。

    此致

    Yihe

    e2e.ti.com/.../1667.Configuration-Programming-of-UCD-Devices.pdf

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

    Yihe
    我很抱歉… 但是...我无法理解。 对我来说不是很清楚... 我可能只是一个较晚的花人。
    嗯、假设我有 Fusion、我有适配器。
    我已经生成了脚本并对器件进行了编程。 假设它现在工作。 它由灯泡闪烁、由引脚急动。 太棒了。 那么、问题是:它对我的工作有何帮助? shell I 跟踪 SCL 和 SDA? 我接下来将采取哪些步骤? 您的建议的核心是什么?
    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    脚本文件是您必须使用的输入文件。 它包含有关如何对器件进行编程的所有步骤。 编程指南也在之前的回复中共享。 您是否读取了脚本文件? 您有哪些问题?
    此致
    Yihe
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有其他问题要问你

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

    尊敬的 Yihe:

    正如我多次写的那样、我们使用这个脚本文件并根据它执行所有操作。 但只能在任何位置对4个字节进行编程、这就是全部。

    4字节编程后、我们始终从器件获取 NAC。 断电和打开后、我们可以对其他4个字节进行编程。 但我认为这不是一种好方法。

    我已经写了很多次我的序列(你可以在以前的消息中看到它)、但无法从你那里得到错误的答案。

    我的问题是:您能否回答我的顺序中的错误、或者您能否将我与 TI 的其他人联系起来、我可以与他们一起解决我的问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我们每次执行一个器件。 因为这两个器件共享相同的程序指令。
    您是否意味着发送 E2命令但器件始终在 E3命令上 NACK 没有问题?您在尝试写入之前是否解锁闪存并擦除闪存? 您是否回读以确保擦除已完成? 您不能在不首先擦除的情况下写入闪存。 请列出所有步骤、直至实际数据出现故障。 还请提供您的脚本文件? 所有这些请求都适用于 UCD9090A 器件? 收到 NACK 后、您可以发出 STATUS_CML (0x7E)命令来读取状态以了解 NACK 的原因。 请参阅 PMBus 规范1.1第2部分、了解 STATUS_CML 命令的结构。
    此致
    Yihe
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >您是否意味着发送 E2命令没有问题,但设备始终在 E3命令上不起作用?
    不、我不会。 详细信息如下

    >在尝试写入之前,您是否解锁闪存并擦除闪存?

    是的、我们解锁闪存发送命令:
    parm_info (0x05、0x04、0x00、0x00、0x01、 0x04)、parm_value (0x04、0x00、0x00、0x88、0x20)
    它工作正常。 我们可以看到、它始终会获得 ACK 并尝试将前4个字节编程到闪存中。

    是的、我们在对发送命令进行编程之前擦除闪存:
    parm_info (0x05、0x04、0x14、0x00、0x01、 0x04)和 parm_value (0x04、0x00、0x00、0x01、0x00)。
    它工作正常。 我们可以看到擦除后、它始终会收到 ACK 并从闪存中的所有位置读取空值0xFF。


    >您是否读回以确保擦除已完成?
    是的、我们在擦除后读取闪存、并且所有位置都为空、值为0xFF。


    >请列出所有步骤,直到实际数据出现故障。
    清除数据闪存写保护位
    WriteBlock (parm_info (0x05、0x04、0x00、0x00、0x01、 0x04))和 WriteBlock (parm_value (0x04、0x00、0x00、0x88、0x20))
    擦除数据闪存
    WriteBlock (parm_info (0x05、0x04、0x14、0x00、0x01、 0x04))和 WriteBlock (parm_value (0x04、0x00、0x00、0x01、0x00))
    3.写入块
    WriteBlock (parm_info (0x05、0x02、addr0、addr1、0x01、 0x04))和 WriteBlock (parm_value (0x04、0x01、0x02、0x03、0x04))、 200us 延迟。
    第一个编程始终正常工作:我们始终从每个步骤中获取 ACK。
    但是、任何下一个命令(从发送器件地址的阶段)都会返回 NACK。
    它可以是任何命令、我们甚至无法启动命令、因为第一个发送的字节(器件地址)返回 NACK。

    WriteBlock 序列:
    启动
    步骤1. I2C ((Device_Address << 1)|0)//器件地址字节
    步骤2. I2C(命令)
    步骤3. I2C(大小)
    步骤4. i2c (所有数据0...大小、字节/字节)
    停下

    >还请提供您的脚本文件?
    我们没有脚本。 我们正在为内部处理器创建嵌入式代码。
    我已尝试解释我们正在做的一切。 如果您有任何疑问、请随时向我咨询。
    我们真的需要解决这个问题、客户每天都在推我们。


    >所有这些请求都适用于 UCD9090A 器件?
    我们可以读取、擦除所有器件、并且只为一个器件编程4个字节。
    我们似乎非常密切地支持它。 在对前4个字节进行编程后、我们似乎需要执行一些操作。


    关于 UCD9246、我们没有用于闪存编程的脚本文件。
    我们可以读取它、但无法解锁闪存。 UCD9246似乎与 UCD9090稍有不同。
    您能给我发送 UCD9090的脚本吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的详细信息和耐心。
    在上述步骤中、我没有发现任何问题。 您可以尝试将200us 延迟更改为更长的时间。 是否在批处理文件中运行所有这些步骤? 还是每次手动执行一个命令? 我建议每次执行一条命令、以便有足够的延迟?
    基本而言、您能够写入第一对 E2和 E3、这将是数据的前4个字节。 以下所有内容都是地址 NACK。 您是否检查 i2c 波形以查看是否有噪声? 您的编程速度是100KHz 或400kHz?

    很好奇、您是否尝试过全新的 UCD9090 IC? 我不确定您在现有器件上的步骤已经完成了多少个闪存周期。
    此外、正如我在前面提到过的、Fusion 确实具有低级 I2C/smbus 工具、您可以在 Fusion i2c 工具上重复这些手动命令、以将任何硬件或软件问题与程序员隔离。 请参阅培训视频 :training.ti.com/fusion-power-designer-low-level-i2c-smbus-debugger 。 您必须具有 USB 转 GPIO 软件狗才能执行此操作。

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

    谢谢你。 为您提供答案

    我们订购了 USB-TO-GPIO。 在这种情况下、如果可能、您可以向我发送用于 UCD9246闪存编程的脚本文件吗? 可能会为我节省很多时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据您的问题:
    >是否在批处理文件中运行所有这些步骤?
    如前所述、我们不使用批处理文件

    >我建议每次使用一条命令,以便有足够的延迟?
    我要这个

    >您是否检查 i2c 波形以查看是否有噪声?
    是的、我可以

    >您的编程速度是100KHz 还是400KHz?
    100kHz

    >您是否试用了全新的 UCD9090 IC?
    是的、我有新的 UCD9090和 UCD9246


    Fusion 无法在离线模式下(我知道)生成脚本文件。 是否要向我发送任何脚本文件以检查我的 UCD9246步骤? 正如我之前提到的、我丢失了 UCD9090 (它处于 ROM _mode 中)、我们正在等待新的 UCD9090和 USB-TO-GPIO。
    UCD9246是否具有受保护位机制? 我找不到关于 UCD9246的任何信息。
    NACK (最后一个数据字节)后、我获取 STATUS_BYTE = 0x43。 STATUS_CML = 0x40。 没有明确的解释,这意味着我也找不到什么

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

    是的、脚本文件必须来自实时设备。 我已经 使用 Fusion GUI I2C 工具手动测试了您在 EVM 上的步骤、我没有问题可以通过测试、以确定您的故障位置。

    e2e.ti.com/.../UCD9246-5.6.0.11220-Address-113-SMBus-Data-Flash-Script.csv

    随附的是 UCD9246数据闪存脚本文件。 但我建议您等到 USB 转 GPIO 软件狗进行了阵列化、因为它需要跳转到 ROM 模式才能执行闪存操作、这与 UCD9090不同。

    此致

    Yihe

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的脚本。
    该脚本由两部分组成:对数据闪存进行编程和对程序闪存进行编程。
    我的问题是:
    -什么是程序闪存完整性字? 它是用于程序_OR_数据闪存_OR_程序+验证的校验和吗?
    -是否可以在不使用程序闪存的情况下对数据闪存进行编程?
    -根据我的理解、命令 ROM 命令擦除程序闪存完整性字、并且我必须使用命令 BlockWrite、0x0B、0xEF、0x080001000000007FFC8F 创建一个新的完整性字、对吗?
    -我应该在所有命令中使用 PEC 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议你就 UCD9246设立一个新的职位,因为其他人将从中受益。

    程序闪存完整性字是程序闪存的校验和、与数据闪存无关。

    对于 UCD9246、它仅支持用于数据闪存升级的 ROM 模式。 因此、必须擦除程序闪存 intetity 字、以便器件可以进入 ROM 模式。

    进入 ROM 模式后、您可以对数据闪存进行编程、但最后、您必须将完整性字重新写入程序闪存、以便器件可以存在 ROM 模式。

    您不仅可以只写完整性字回、还可以记住 这是一个闪存、写入前始终需要擦除。 因此、您必须擦除最后一个1KB 程序闪存才能将完整性字写回。

    请遵循脚本文件中的所有命令、它具有所有必要的步骤、包括擦除最后的1K、数据、完整性字

    对于 PEC、它是可选的。

    此致

    Yihe