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.

[参考译文] TPS25751:具有 BQ25798的 TPS25751D -未检测到 CC 线路

Guru**** 2387830 points
Other Parts Discussed in Thread: TPS25751, SHA-256, TPS25751EVM, TPS25750EVM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1502887/tps25751-tps25751d-with-bq25798---cc-lines-not-detected

器件型号:TPS25751
主题中讨论的其他部件: SHA-256TPS25750EVM

工具/软件:

您好:

我正在使用 TPS25751D 在中 纯接收 USB-C PD 设计 最高协商电压  20V/5A  来自 USB PD 源(Apple 96W USB-C 适配器)。

我已经验证了以下内容:

  • VDD = 3.3V  PPHV = 5V  、和 VBUS = 5V  稳压器

  • I²C 通信工作正常—我可以发送4CC 命令(例如SSrC)和读取响应(全部返回0x00000000)

  • 我在使用 ADCIN1 = 1.64V  ADCIN2 = 1.64V  (请求 具有4节电池充电器+ I²C I ² C 控制的20V 受电方)

  • 寄存器0x08中设置 PD_Negotiation 标志、但 SNK_ENABLED 从不激活

  • CC_ACTIVE 保持在0x00 在所有情况下(未检测到极性)

  • 我验证了 USB4105-GF-A 连接器布线正确(CC1 = A5/B5至 TPS 引脚15、CC2 = A6/B6至引脚16)

  • 尝试移除所有 CC 电容(原来是330 pF→替换为33 pF→、然后完全移除)

  • 已尝试添加 5.1 kΩ 下拉电阻器 CC1和 CC2均单独连接—CC_ACTIVE 无变化

  • 已使用多个支持 PD 的充电器和电缆、包括 Apple 96W 和 Dell 130W

  • 我在 CC2上的读数为1.5V (确认有效 Rp)、 CC1上的读数为0V (未使用极性)

  • 附件是 CC 线路的 Salea 捕获。    源似乎明确通过 CC1发送 Source_Capabilities、但 TPS25751D 从不响应请求。   
  • 我尝试了 USBCPD 应用工具固件(带/不带 BQ 的受电方)的多次迭代、但未检测到差异。  当前配置为:
    {"Questionnaire":{"device":"TPS25751 "、"toolBuildVersion":"1.0.2"、"answers":[ null、4、 4、1、0、3、0、 1、1、1、0、0、 0、16.8、3、0.4、0.4、 0]、"VendorID":"0000"、"ProductID":"0000"、"version":"1.0.0.2"}

尽管如此、TPS25751D 仍无法锁存 CC 极性、并且始终不会启用灌电流。

您能否帮助确认:

  1. 我的初始化序列是阻止 Rd 置为有效还是 CC 检测?

  2. 激活内部 Rd 有任何附加要求?

  3. TPS25751D 可能会一直处于受电方启用因 CC 或充电器配置而被阻止的状态?

我随附了原理图和布局以供参考。 请提供任何指导。   

此外、以下是 TPS25751寄存器转储:(不确定是否有用)

--- TPS25751寄存器转储(0x00 - 0x3F)-- 0x00:0x04 0x01:0x04 0x02:0x04 0x04 0x04:0x05 0x04:0x10 0x06:0x00 0x07:0x00 0x08:0x04 0x09:0x40 0x0A:0x00 0x0B:0x04 0x00 0x0B:0x0E 0x0F:0x00:0x0E:0x00:0x04:0x10:0x0B:0x11:0x12:0x00:0x22 0x00:0x14 0x0B 0x00:0x17 0x00:0x16 0x00:0x16 0x00:0x16 0x0B 0x00:0x17 0x00:0x16 0x00:0x17 0x00:0x17 0x00:0x16 0x0B 0x00:0x0B 0x00:0x16:0x16 0x00 0x23:0x00 0x24:0x00 0x25:0x00 0x26:0x05 0x27:0x00 0x28:0x00 0x29:0x00 0x2A:0x00 0x2B:0x00 0x2C:0x00 0x2D:0x00 0x2E:0x00 0x2F:0x28:0x30 0x00 0x31:0x00:0x00:0x00:0x34:0x00 0x35:0x00 0x36:0x00 0x37:0x00 0x38:0x00:0x39

PS -我切断 USB 2.0信号的布线、因为 a)我将其反转、b) PD 协商不需要这些信号。

e2e.ti.com/.../7357.schematic1.pdf

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

    您好:

    是否可以从寄存器0x03读取以确定 PD 控制器所处的模式?

    https://www.ti.com/lit/ug/slvucr8a/slvucr8a.pdf#page=14

    USB PD 在加载配置之前处于禁用状态、因此这可能说明了受电方没有响应拉电流电容消息的原因。

    https://www.ti.com/lit/ds/symlink/tps25751.pdf#page=45

    此致、

    Chris

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

    寄存器0x03 = 0x04的值。   我认为 PD 协商已经发生、但不接受。    

    寄存器0x08= 0x00000004

    →位:

    • SRC_ENABLED = 0

    • SNK_ENABLED = 0

    • PD_NEGOTIATION = 1 White check markμ s

    • CC_ACTIVE = 0x00 X 未检测到极性

    • VBUS= 5V 回退(从其他寄存器确认)

    • SNK_ENABLED仍然为低电平= 电源路径关闭

    --- TPS25751状态---
    PD Negotiated:正确
    已启用接收端:错误
    源启用:false
    电池电量耗尽:错误
    PPS 模式:错误
    INT Pending:错误
    CC 行:无

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

    您好:

    寄存器0x03是模式寄存器、长度为4字节。  如果您读取了5个字节、则将获得字节数(4)、byte0、byte1、byte2和 byte3。

    您应该能够确认它位于"APP"或"PTCH"中。

    谢谢、
    Chris  

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

    我漏掉了这个。  我更新了程序以读取寄存器。  这是我的垃圾。  遗憾的是、我不理解0x03中的值

    模式寄存器(0x03):[无法识别的模式]原始:0x04 0x50 0x54 0x43

    这里有其他的,以防他们帮助。

    状态寄存器(0x08):
    src_enabled:False
    SNK_enabled:False
    pd_negotiation:正确
    PPS_ACTIVE:错误
    dead_battery:错误
    int_pending:False
    vbus_present:错误
    附加:错误
    cc_active:0
    原始:0x00000004
    4CC 命令输入(0x09):0x40
    4CC 命令响应(0x0A):0x00 0x00 0x00 0x00 0x00 0x00
    常规状态(0x1A):0x00
    Type-C 状态(0x1B):0x00
    VBUS 状态(0x1C):0x00
    VBUS 合约电压(100mV 单位)(0x2F):0x28
    当前合约索引(0x30):0x00
    请求的合约索引(0x31):0x00
    活动 PDO (合约)(0x34):PDO:0.00 V @ 0 mA
    请求的 RDO (0x35):RDO:OBJ Pos = 0、操作电流= 0 mA
    自动接收端协商配置(0x37):0x00 0x00 0x00 0x00 0x00 0x00 0x00
    PD 角色和 CC 信息(0x40):0x00
    VSAFE 状态(0x41):0x00
    电缆检测状态(0x42):0x00
    Type-C 状态机(0x69):0x00

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

    您好:

      您仅读取字节数后的前3个字节、但看起来器件处于补丁模式并等待更新。

    https://www.rapidtables.com/convert/number/hex-to-ascii.html

    此致、
    Chris

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

    很抱歉耽误你的时间。  我在刷写512KB 闪存时遇到问题。  我想我已经解决了。   我的寄存器0x03显示:

    0x04 0x41 0x50 0x50

    我假设它处于 APP 模式?    但电压仍然只有5V。   是否可以使用 ACDIN1/2值跳过闪存?   ACDIN1/2设置为1.65V。   它是20V/5A。   我尝试了将闪存的 SCL 设置为接地并重新启动。   没有看到任何变化。



    寄存器值列表:

    模式寄存器(0x03):[无法识别模式]原始:0x04 0x41 0x50

    状态寄存器(0x08):
    src_enabled:False
    SNK_enabled:False
    pd_negotiation:正确
    PPS_ACTIVE:错误
    dead_battery:错误
    int_pending:False
    vbus_present:错误
    附加:错误
    cc_active:0
    原始:0x00000004
    4CC 命令输入(0x09):0x40
    4CC 命令响应(0x0A):0x00 0x00 0x00 0x00 0x00 0x00
    常规状态(0x1A):0x05
    Type-C 状态(0x1B):0x00
    VBUS 状态(0x1C):0x00
    VBUS 合约电压(100mV 单位)(0x2F):0x28
    当前合约索引(0x30):0x35
    请求的合约索引(0x31):0x35
    活动 PDO (合约)(0x34):PDO:0.00 V @ 60 mA
    请求的 RDO (0x35):RDO:OBJ Pos = 0、操作电流= 120 mA
    自动灌电流协商配置(0x37):0x18 0x3B 0x40 0x1F
    PD 角色和 CC 信息(0x40):0x04
    VSAFE 状态(0x41):0x08
    电缆检测状态(0x42):0x04
    Type-C 状态机(0x69):0x04

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

    您好:

    我假设这是在应用程序模式下?

    这是应用模式。  在字节计数为4后、您仍然仅读取3个字节。  最后一个字节为0x20。  更笼统地说、寄存器值的列表与器件 TRM 不一致。  有几个寄存器值无效或没有意义、对于那些确实有意义的寄存器、仅读取第一个字节、即字节计数。

    是否可以使用 ACDIN1/2值跳过闪存?

    您可以使用 Negotiate High Voltage、但需要禁用 EEPROM。  不建议这样做。  我建议调试您的当前设置。

    我的 ACDIN1/2设置为1.65V。   它是20V/5A。   我尝试了将闪存的 SCL 设置为接地并重新启动。   未看到任何更改。

    如果尝试将 ADCIN1和2解码值设置为5 AlwaysEnableSink、则 PD 将保持禁用状态、直到加载配置为止。  如果您将时钟线接地、则闪存无法加载、应保持补丁模式。   

    您是否还可以读取寄存器0x2D (引导标志)?  这是一个5字节的寄存器。    

    此致、

    Chris

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

    0x2D:0x34 0x03 0x62 0x02 0xC1

    是否有适用于 TPS25751D 的 TI 编程软件?   我目前正在使用 Raspberry PI 和 Python 脚本通过 I2C 进行连接。  想知道有没有更好的方法吗?   



    0x00:0x28 0x00 0x00 0x00 0x00
    0x01:0x41 0x43 0x45 0x53
    0x02:0x01 0x00 0x00 0x00
    0x03:0x50 0x54 0x43 0x48
    0x04:0x49 0x32 0x43 0x20
    0x05:0x33 0x53 0x17 0x1F 0x6E 0x06 0x94 0x3E 0x13 0x9E 0x70 0x41 0xBE 0x2C 0xDA 0x0B
    0x06:--
    0x07:--
    0x08:0x00 0x00 0x00 0x00 0x00
    0x09:--
    0x0A:--
    0x0B:--
    0x0C:--
    0x0D:0xf8 0x19 0x00 0x00
    0x0E:--
    0x0F:0x00 0x11 0x09 0xf8
    0x10:0x00 0x00 0x00 0x00
    0x11:--
    0x12:--
    0x13:--
    0x14:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x15:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x16:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x17:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x18:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x19:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x1A:--
    0x1b:--
    0x1C:--
    0x1D:--
    0x1E:--
    0x1F:--
    0x20:--
    0x21:-
    0x22:--
    0x23:--
    0x24:--
    0x25:--
    0x26:0x00 0x30 0x00 0x00 0x80
    0x27:--
    0x28:--
    0x29:--
    0x2A:--
    0x2B:--
    0x2C:--
    0x2D:0x34 0x03 0x62 0x02 0xC1
    0x2E:--
    0x2F:--
    0x30:--
    0x31:--
    0x32:--
    0x33:--
    0x34:--
    0x35:--
    0x36:--
    0x37:--
    0x38:--
    0x39:--
    0x3A:--
    0x3B:--
    0x3C:--
    0x3D:--
    0x3e:--
    0x3F:--


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

    您好:

      寄存器0x03显示处于 PTCH 模式。   

      寄存器0x2D 显示未加载任何补丁。  [0x02位24-31:位29-31、补丁配置源= 0、未加载配置]

    https://www.ti.com/lit/ug/slvucr8a/slvucr8a.pdf#page=35

    如何对 EEPROM 进行编程?

    (1)什么是文件类型。  

    (2) RasperryPi 或 python 无问题。  请参阅以下示例: https://www.ti.com/lit/an/slvafl1/slvafl1.pdf

    保存寄存器中的所有寄存器值。   

    (1)重启被测器件。

    (2)确认 I2Cc (SCL 和 sda、IRQ 不需要)处于活动状态。  PD 应尝试从 EEPROM 加载。

    此致、

    Chris

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

    Chris、

    感谢您回复我。   我在补丁模式和使用4CC 命令的 pdf 文件上有点丢了。  我认为将"完整闪存"映像从 0x0000开始写入文件末尾。  它在1个文件中包含低和高区域,我不需要担心拆分。    webtool 正在生成的二进制文件是否有问题?   我读了几篇文章,其他人遇到了 CRC 不匹配的问题。   这是 我所面临的问题。     

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

    Chris、

    我通过 ChatGPT 4.o 运行 fullflash.bin、询问 CRC 是否正确。  她说着,伸出手儿抓住我渗着黏液的鸡巴。   但是、它确实编写了一个 fixFlash.py 例程(如下所示)。   这没有任何帮助、系统仍处于补丁模式、并且0x2D 寄存器( ['0x03'、'0x62'、'0x02'、'0xC1'])上的 CRC 出错。   所以我迷失了要做什么。  


    import struct
    import binascii
    import os
    
    BIN_FILE = "fullflash.bin"
    
    
    def fix_patch_crc(path):
        import binascii, struct
        print("\nChecking and fixing CRCs and patch headers in fullflash binary...")
        if not os.path.exists(path):
            print(f"[!] File not found: {path}")
            return
    
        with open(path, "rb+") as f:
            f.seek(0x0000)
            low_data = f.read(0x03F8)
            f.seek(0x0400)
            high_data = f.read(0x03F8)
    
            low_crc = binascii.crc32(low_data) & 0xFFFFFFFF
            high_crc = binascii.crc32(high_data) & 0xFFFFFFFF
    
            f.seek(0x03F8)
            f.write(struct.pack('<I', low_crc))
            f.seek(0x07F8)
            f.write(struct.pack('<I', high_crc))
    
            # Write missing headers if needed
            f.seek(0x03FC)
            f.write(b"\x01\x00\xE0\xAC")
            f.seek(0x07FC)
            f.write(b"\x01\x00\xE0\xAC")
    
    
            # Verify after writing
            f.seek(0x03FC)
            low_hdr = f.read(4)
            f.seek(0x07FC)
            high_hdr = f.read(4)
    
        def show(label, hdr, crc_val):
            expected_hdr = b"\x01\x00\xE0\xAC"
    
            hdr_status = "White check mark Valid" if hdr == expected_hdr else "X Invalid"
            print(f"{label} Header: {hdr.hex()} {hdr_status} | CRC: 0x{crc_val:08X}")
    
        show("Low Region", low_hdr, low_crc)
        show("High Region", high_hdr, high_crc)
        print("White check mark CRCs and headers written successfully.")
    
    
    if __name__ == "__main__":
        fix_patch_crc(BIN_FILE)
    

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

    您好:

    我在此线程中看到0x2D 的两个不同值:

    0x2D:0x34 0x03 0x62 0x02 0xC1
    0x2D 寄存器( ['0x03'、'0x62'、'0x02'、'0xC1'])。

    如果我假设第一个是正确的、那么这些是我看到的设置位:

    我通过 ChatGPT 4.o 运行了 fullflash.bin 并询问 CRC 是否正确。  但后来又回来了。

    我无法对种子值或多项式进行注释。  没有编辑或以其他方式更改 GUI 生成文件内容的配置。

    但是、它确实编写了一个 fixFlash.py 例程(如下所示)。   这没有任何帮助、系统仍处于补丁模式、并且0x2D 寄存器( ['0x03'、'0x62'、'0x02'、'0xC1'])上的 CRC 出错。   所以我迷失了要做什么。  [/报价]

    理想情况下、您应在已知良好的硬件设置(如 EVM)上开发固件。  我将在 EVM 上记录 I2C 事务、并希望这能为您提供一个开始的基准。

    此致、
    Chris

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

    Chris、

    我即将放弃 TPS25751D。   我不知道 fullflash.bin 为何未通过 CRC、或者我为何需要为映像打补丁。   我的寄存器0x2D 和0x03用于:

    0x03:0x50 0x54 0x43 0x48→ASCII:"P"T""C""H"
    0x2D:0x34 0x03 0x62 0x02 0xC1

    据我所知、该应用已加载、但处于补丁模式、因此我无法执行任何操作来摆脱它。    



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

    您好:

    请查找附加的文件。

    /cfs-file/__key/communityserver-discussions-components-files/196/example_5F00_ffb.bin

    /cfs-file/__key/communityserver-discussions-components-files/196/example_5F00_i2c.csv

    在下电上电后、我看到的就是这种情况。

    此致、

    Chris

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

    Chris、

    谢谢你。   我上传了二进制文件和下电上电。  系统接受了固件并表示该固件有效、但补丁 CRC 显示其失败。   

    提供的二进制文件具有一个补丁标头、为0x0800、但 CRC 值为0xFFFFFFFE。 您能否提供一个包含计算出的有效 CRC 的版本、以便 TPS25751能够成功应用补丁或者我是否错误读取了该补丁?

    xxd -s 0x0800 -l 64 fullflash.bin
    00000800:0100 e0ac feff FFFF 0005 0000 802e 0000 ............
    00000810:b2da 5e94 0000 0000 FFFF FFFF FFFF ..^..........
    00000820:FFFF FFFF FFFF FFFF FFFF FFFF ............
    00000830:FFFF FFFF 5511 09f8 FFFF FFFF FFFF ...U....

    加载后的当前寄存器为:

    0x03:0x50 0x54 0x43 0x48

    0x2D:0x34 0x03 0x62 0x02 0xC1

    所有寄存器:

    0x00: 0x28 0x00 0x00 0x00
    0x01: 0x41 0x43 0x45 0x53
    0x02: 0x01 0x00 0x00 0x00
    0x03: 0x50 0x54 0x43 0x48
    0x04: 0x49 0x32 0x43 0x20
    0x05: 0x33 0x53 0x17 0x1F 0x6E 0x06 0x94 0x3E 0x13 0x9E 0x70 0x41 0xBE 0x2C 0xDA 0x0B
    0x06: --
    0x07: --
    0x08: 0x00 0x00 0x00 0x00
    0x09: --
    0x0A: --
    0x0B: --
    0x0C: --
    0x0D: 0xF8 0x19 0x00 0x00
    0x0E: --
    0x0F: 0x00 0x11 0x09 0xF8
    0x10: 0x00 0x00 0x00 0x00
    0x11: --
    0x12: --
    0x13: --
    0x14: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x15: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x16: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x17: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x18: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x19: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x1A: --
    0x1B: --
    0x1C: --
    0x1D: --
    0x1E: --
    0x1F: --
    0x20: --
    0x21: --
    0x22: --
    0x23: --
    0x24: --
    0x25: --
    0x26: 0x00 0x30 0x00 0x00 0x80
    0x27: --
    0x28: --
    0x29: --
    0x2A: --
    0x2B: --
    0x2C: --
    0x2D: 0x34 0x03 0x62 0x02 0xC1
    0x2E: --
    0x2F: --
    0x30: --
    0x31: --
    0x32: --
    0x33: --
    0x34: --
    0x35: --
    0x36: --
    0x37: --
    0x38: --
    0x39: --
    0x3A: --
    0x3B: --
    0x3C: --
    0x3D: --
    0x3E: --
    0x3F: --
    

    还是在同一个地方。   

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

    您好:

    csv 文件显示与 EEPROM 的 I2C 通信。  这与向 EEPROM 写入数据的方式有何区别?

    此致、
    Chris

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

    Chris、

    我不确定您使用什么程序来执行该捕获。   我编写了一个刷写 EEPROM 的 python 程序。   我每50毫秒写入2个字节、以便为 EEPROM 提供恢复时间。   (应该有足够的时间)。   我 把 Salae 连接起来捕捉时间。  这确实是每50毫秒一次。   

    您正在使用什么程序?   TI 是否有在 Linux 上执行此操作的工具、或者是否仍有 Windows 资源?   如果你能给我指一个工具,我会很乐意给它一个尝试。   不知道我还能做什么。    

    from smbus2 import SMBus, i2c_msg
    import time
    import os
    
    # === Configuration ===
    I2C_BUS = 1
    EEPROM_ADDR = 0x50
    PAGE_SIZE = 32
    BIN_FILE = '/home/vectare/TPS25750/fullflash.bin'
    ERASE_BYTE = 0x00  # Value used to erase the flash (0x00)
    EEPROM_SIZE = 65536  # Total memory size (64KB)
    
    def write_eeprom(bus, data):
        print(f"Writing {len(data)} bytes to EEPROM using 32-byte safe chunks...")
        for addr in range(0, len(data), 32):  # limit to 32-byte chunks
            chunk = data[addr:addr+32]
            mem_addr = [(addr >> 8) & 0xFF, addr & 0xFF]
            payload = bytearray(mem_addr)
            payload.extend(chunk)
    
            print(f"Write @ 0x{addr:04X}: {payload[:8].hex()}...")  # Debug first 8 bytes
    
            try:
                msg = i2c_msg.write(EEPROM_ADDR, payload)
                bus.i2c_rdwr(msg)
                time.sleep(0.05)  # EEPROM write time
            except Exception as e:
                print(f"[!] Error at 0x{addr:04X}: {e}")
                return False
    
        print("White check mark EEPROM write complete.")
        return True
    
    
    def verify_signature(bus):
        try:
            msg_set = i2c_msg.write(EEPROM_ADDR, [0x00, 0x00])
            bus.i2c_rdwr(msg_set)
            msg_read = i2c_msg.read(EEPROM_ADDR, 4)
            bus.i2c_rdwr(msg_read)
            sig = bytes(msg_read)
            print(f"Signature @0x0000: {sig}")
            return sig == b'APP '
        except Exception as e:
            print(f"[!] Error during signature read: {e}")
            return False
    
    
    def read_eeprom(bus, size):
        """
        Reads the entire content of the EEPROM into memory.
    
        :param bus: SMBus instance for I2C communication.
        :param size: Total size of the EEPROM in bytes.
        :return: A `bytes` object containing the EEPROM's full content, or `None` on error.
        """
        print(f"Reading {size} bytes from EEPROM...")
        content = bytearray()
    
        try:
            for addr in range(0, size, 64):  # Reading in 64-byte chunks
                mem_addr = [(addr >> 8) & 0xFF, addr & 0xFF]
                msg_set = i2c_msg.write(EEPROM_ADDR, mem_addr)
                bus.i2c_rdwr(msg_set)
    
                # Read the next 64 bytes
                chunk_size = min(64, size - addr)  # Do not read past the end
                msg_read = i2c_msg.read(EEPROM_ADDR, chunk_size)
                bus.i2c_rdwr(msg_read)
                content.extend(bytes(msg_read))
    
        except Exception as e:
            print(f"[!] Read error at 0x{addr:04X}: {e}")
            return None
    
        print("White check mark EEPROM read complete.")
        return bytes(content)
    
    
    def validate_fullflash(bus, expected_data):
        """
        Validates the EEPROM content with the original binary file.
    
        :param bus: SMBus instance for I2C communication.
        :param expected_data: Binary data that should match the EEPROM content.
        :return: `True` if EEPROM content matches the file, `False` otherwise.
        """
        print("Validating EEPROM content against the binary file...")
    
        eeprom_data = read_eeprom(bus, len(expected_data))
        if eeprom_data is None:
            print("[!] EEPROM read failed. Validation aborted.")
            return False
    
        if eeprom_data == expected_data:
            print("White check mark EEPROM content matches the binary file. Validation successful!")
            return True
        else:
            print("X EEPROM content does not match the binary file.")
            for i in range(min(len(eeprom_data), len(expected_data))):
                if eeprom_data[i] != expected_data[i]:
                    print(f"Mismatch at byte 0x{i:04X}: EEPROM=0x{eeprom_data[i]:02X} File=0x{expected_data[i]:02X}")
                    break
            return False
    
    
    
    
    def erase_eeprom(bus):
        """Erase the entire CAT24C512 EEPROM by writing 0x00 to all addresses."""
        print("Starting EEPROM erase...")
    
        # Initialize a single page of erase data
        erase_data = [ERASE_BYTE] * PAGE_SIZE
    
        for addr in range(0, EEPROM_SIZE, PAGE_SIZE):
            mem_addr = [(addr >> 8) & 0xFF, addr & 0xFF]  # 2-byte memory address
    
            try:
                # Combine address and erase data into a single I2C message
                msg = i2c_msg.write(EEPROM_ADDR, bytes(mem_addr + erase_data))
                bus.i2c_rdwr(msg)
    
                # Wait for write cycle to complete (datasheet specifies ~5ms)
                time.sleep(0.05)
    
                #print(f"Erased page starting at address 0x{addr:04X}")
            except Exception as e:
                print(f"Error erasing page at address 0x{addr:04X}: {e}")
                return False
    
        print("White check mark EEPROM erase complete.")
        return True
    
    
    
    def main():
        path = os.path.expanduser(BIN_FILE)
        if not os.path.isfile(path):
            print(f"[!] File not found: {path}")
            return
    
        with open(path, 'rb') as f:
            data = f.read()
    
        print(f"Loaded {len(data)} bytes from {path}")
    
        with SMBus(I2C_BUS) as bus:
    
            erase_eeprom(bus)
            return
    
            if write_eeprom(bus, data):
                print("Verifying EEPROM content...")
                if validate_fullflash(bus, data):
                    print("White check mark Full EEPROM validation passed.")
                else:
                    print("X EEPROM validation failed.")
        print("Repeat Please power cycle the TPS25751 to boot from EEPROM.")
    
    
    if __name__ == '__main__':
        main()
    
    
    

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

    Chris、

    我们没有回答这个问题-" 如果我有 USBCPD 工具生成的完整闪存映像、 是否需要应用补丁? "  如果我这样做、如何生成修补程序。  我在 webtool 上没有看到任何用于生成补丁的内容。

    网址:  dev.ti.com/.../

    Don

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

    我使用 QWIIC 库(SparkFun 有一个 CAT24C512开发板)编写了另一个程序、该程序执行哈希比较、并且它们匹配。  我认为我的 EEPROM 写入正确。

    White check markμ A EEPROM 已连接
    White check mark EEPROM 内容匹配文件(SHA-256 OK)

    import qwiic_eeprom
    import hashlib
    
    eeprom = qwiic_eeprom.QwiicEEPROM()
    
    if eeprom.is_connected():
        print("White check mark EEPROM Connected")
    
        with open("flash.bin", "rb") as f:
            expected = f.read()
    
        readback = bytearray()
        for i in range(len(expected)):
            readback.append(eeprom.read_byte(i))
    
        hash_bin = hashlib.sha256(expected).hexdigest()
        hash_eeprom = hashlib.sha256(readback).hexdigest()
    
        if hash_bin == hash_eeprom:
            print("White check mark EEPROM contents match file (SHA-256 OK)")
        else:
            print("X EEPROM contents do NOT match file")
            print(f"File:   {hash_bin}")
            print(f"EEPROM: {hash_eeprom}")
    

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

    您好:

    您正在使用什么程序?

    我正在使用 EVM、  该处理器包含一个带有客户固件的微控制器、用于与 GUI 工具交互并对 EEPROM 进行编程。  过去、我使用 Aardvark 等其他工具对 EEPROM 进行编程、但这是工具的另一个示例、而不是程序。

    TI 是否有在 Linux 上执行此操作的工具?或者是否仍在 windows base 上执行此操作?

    不、我不知道有任何可用的来源。   

    我们还没有回答这个问题-" 如果我有 USBCPD 工具生成的完整闪存映像、 是否需要应用补丁? "  如果我这样做、如何生成修补程序。  我在 webtool 上没有看到任何生成补丁的内容。

    补丁会自动放置在完整闪存二进制文件中。  无需执行其他步骤。

    我还将包括萨莱捕获,以比较你所看到的。

    /cfs-file/__key/communityserver-discussions-components-files/196/example_5F00_ffb.sal 

    此致、

    Chris

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

    Chris、

    我迷路了。   TPS25751似乎已验证该应用并正在运行、但补丁的 CRC 失败。   

    a) 我们能否排除不存在阻止 TPS 退出补丁模式的硬件问题?

    b)  我刚订购了 EVM、已经过了一夜、希望它今晚可以发货。   

    c) 我确实相信我的 EEPROM 程序可以正常工作、但我会在 EVM 上进行测试。   我确实需要在生产中弄清楚这一点。   

    当前0x2D 寄存器:
    补丁存在:0x0
    加载的修补程序:0x0
    补丁 CRC 失败:0x1
    补丁版本不匹配:0x0
    应用程序有效:0x1
    应用程序正在运行: 0x1.
    原始标志:['0x03'、'0x62'、'0x02'、'0xC1']

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    a) 我们是否可以排除不存在阻止 TPS 退出补丁模式的硬件问题?

    编号  我没有足够的信息来排除硬件错误。

    我 非常担心、我们相互谈论、或只是在同一页上谈论。  需要找到一些通用语言来调试问题。

    当您收到 EVM 时、只需连接到 EVM 的 MCU 侧、然后将 I2Cc 线路跳线连接到电路板(和接地)。  此外、断开 EVM 上的 EEPROM - EEPROM U6旁边的 J16上有一根跳线。  只需移除跳线。   

    此致、
    Chris

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

    Chris -我仍在等待 EVM 订单。  我从 TI 订购的产品、仍在等待发货。  

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

    尊敬的 Don:

    明白了、请在收到 EVM 时告知我们。

    谢谢。此致、

    Chris

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

    Chris、可能是个问题。  我的订单(T05680011)未在 TI store 上移动、我查看是否可以订购第二块电路板、现在 TI Store 没有 TPS25751EVM 库存。    我不知道是否会收到订单。   我在他们接受非库存商品订单的商店看到了这一点。

    我已经通过 TI 支持团队创建了一个案例、但这需要一些时间。    我可以对 TPS25750evm 电路板进行同样的操作吗?



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

    尊敬的 Don:

    如果我理解正确、您尝试使用 EVM 刷写定制电路板上的 EEPROM。

    我来查看 TPS25750EVM 是否可以做到这一点

    谢谢。此致、

    Chris

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

    尊敬的 Don:

    请参阅随附的幻灯片。

    我使用 TPS25750EVM 进行了快速测试、以刷写 TPS25751EVM 上的 EEPROM、似乎工作正常。 如果您不能这样做、我们可能需要等待 TPS25751 EVM

    e2e.ti.com/.../Flashing-EEPROM-from-TPS25750-EVM.pptx

    谢谢。此致、

    Chris

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

    Chris、

    TPS25751EVM 已推出。    我遵循了你的程序

    1) 断开 TPS25751EVM 板上的 J16跳线

    2) 将 I2Cc_SDA/SCL/GND 连接到我的电路板。   我注意到 EVM 板上拉电阻器是2.2K。  我也将电路板更新为2.2K。   (我是否应该移除闪存上的拉电阻器才能与 TPS25751EVM 配合使用?)  

    3) 连接 LDO_3V3为闪存供电

    编程的步骤。  它将误差保持在70%。  错误如下所示。  我已尝试从当前配置进行配置以上传二进制文件。  使用 TI GUI Composer 应用程序服务器在 Ubuntu 24.04上运行 Chrome (也已从网络工具尝试)。    但新闻并不是全部都是坏的。  我的电路板现在正在协商20V 电压。   是的。

    我在 TPS25751电路板上的寄存器如下:  我处于 APP 模式!!!   我是否在运营?   

    0x00:0x28 0x00 0x00 0x00 0x00
    0x01:0x41 0x43 0x45 0x53
    0x02:0x01 0x00 0x00 0x00
    0x03:0x41 0x50 0x50 0x20
    0x04:0x49 0x32 0x43 0x20
    0x05:0x33 0x53 0x17 0x1F 0x6E 0x06 0x94 0x3E 0x13 0x9E 0x70 0x41 0xBE 0x2C 0xDA 0x0B
    0x06:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x07:--
    0x08:0x00 0x00 0x00 0x00 0x00
    0x09:--
    0x0A:--
    0x0B:--
    0x0C:--
    0x0D:0xf8 0x19 0x00 0x00
    0x0E:--
    0x0F:0x55 0x11 0x09 0xf8
    0x10:0x00 0x00 0x00 0x00
    0x11:--
    0x12:--
    0x13:--
    0x14:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01
    0x15:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x16:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03
    0x17:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x18:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01
    0x19:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x1A:0x1D 0x00 0x60 0x00 0x00 0x00
    0x1b:--
    0x1C:--
    0x1D:--
    0x1E:--
    0x1F:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x20:0x00 0x00
    0x21:-
    0x22:0x00 0x00
    0x23:0x00 0x00 0x00 0x00 0x00
    0x24:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x25:0x00 0x00
    0x26:0x00 0x30 0x00 0x00 0x80
    0x27:0x04 0x08 0x12 0x00 0x1C 0x07 0x00 0x50 0x51 0x00 0x00 0x00 0x00 0x00 0x00
    0x28:0x00 0x00 0x2E 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03
    0x29:0x32 0x50 0x91 0x00
    0x2A:--
    0x2B:0x40 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00
    0x2C:--
    0x2D:0x1C 0x00 0xF2 0xA2 0xC1
    0x2E:--
    0x2F:--
    0x30:--
    0x31:--
    0x32:--
    0x33:--
    0x34:0x2C 0x41 0x06 0x00 0x80 0x00
    0x35:0x2C 0xB1 0x04 0x41 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x36:--
    0x37:0x3B 0x50 0x14 0x41 0x90 0x7D 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x38:--
    0x39:--
    0x3A:--
    0x3B:--
    0x3C:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x3D:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    0x3e:--
    0x3F:0x0F 0x02

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

    尊敬的 Don:

    看起来很不错!

    我们以前遇到过从 GUI 刷写此内容的问题、如果是同样的问题、则表示 EEPROM 已正确加载、但 GUI 端的验证步骤中存在错误。 基本上、闪烁应该良好、这里的故障只是一个报告问题

    如果您不确定它是否起作用、我们建议在生成二进制文件、刷写然后读取寄存器时、将一个唯一值放入客户使用寄存器(0x06)。

    如果您看到已编程的值、那么应该没问题。


    我是否应该移除闪存上的拉电阻器来与 TPS25751EVM 配合使用?

    只要上拉电阻器都上拉至类似的电压轨、将上拉电阻器加倍可能没问题。 如果它正常工作、则在 EVM 未连接时、保留它应该是安全的、因为您需要在自己的电路板上使用上拉电阻。


    这看起来像原始问题已通过此工作解决、因此我现在将关闭此主题。 如果您有与此问题直接相关的其他问题、请随时回复此主题以重新打开它。

    如果您有新问题、我们会要求您提交一个包含新问题的新主题、以便进行跟踪。

    谢谢。此致、

    Chris

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

    Chris、

    感谢你的帮助。   我仍然有点担心在生产环境中刷写。   我们有一个可以使用的流程。   

    Don