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.

[参考译文] BQ24725:通过 STM32F0驱动 I2C SMBus 通信。

Guru**** 2529970 points
Other Parts Discussed in Thread: BQ24725, BQ24725A

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/825106/bq24725-drive-i2c-smbus-communication-with-stm32f0

器件型号:BQ24725
我们正在开发一个项目、该项目使用 STM32F0作为主机、使用 BQ24725作为从器件。
我想知道您是否可以通过 I2C STM32F0向我发送通信驱动器并为此组件(BQ24725)进行设置。
 以下电子邮件地址:
julio.cs.goulart@gmail.com 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    有关 BQ24725 SMBus 接口的详细信息、请查看数据表中的第15-16页。 本节介绍了写入字和读取字协议、写入/读取时序以及启用 SMBus 通信的条件。 表2还显示了 BQ24725的寄存器及其 POR 时的默认值。

    请注意、BQ24725是 NRND (不推荐用于新设计)、已被 BQ24725A 取代。 我们建议改用 BQ24725A。

    此致、

    Angelo

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


    你(们)好。 感谢您的答复、我将尝试这样做。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已按照建议将 BQ24725更改为 BQ24725A。
    通过 I2C、我按以下顺序发送命令:
    
    
    
    地址:0x12
    
    写入->充电选项寄存器(0x12):-> POR 状态数据(0XF902)
    写入->输入电流寄存器(0x14):-> POR 状态数据(0x0000)
    写入->充电电压寄存器(0x15):-> POR 状态数据(0x0000)
    写入->充电电流寄存器(0x3F): -> POR 状态数据(0x1000)
    读取-> Manufacture_ID reg (0xFE):-> POR 状态数据(0X0040)
    读取-> DEVICE_ID reg (0xFF):-> POR 状态数据(0x0000)
    
    
    waithm 500ms;
    
    地址:0x12
    
    write-> CHARGE_OPTION reg (0x12):-> POR 状态数据(0x0580
    reg)(0x132-creg)写入电
    压:0x852-0) -> POR 状态数据(0X41A0)
    写入->充电电流寄存器(0x3F):->状态数据依据(0X0A00)
    读取->制造 ID 寄存器(0xFE):-> POR 状态数据(0X0040)
    读取->器件 ID 寄存器(0xFF):-> POR 状态数据(0X000B)
    
    
    通过示波器进行充电、但我看到的电池电量不是全部为 BQ725A。
    可能出什么问题了? 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否检查下列条件是否正确? 必须满足所有这些条件才能启用充电:

    此外、您的适配器电压是多少? 您的充电电压寄存器设置为16.8V。由于 BQ24725A 是降压充电器、适配器电压必须高于最大充电电压。

    此致、

    Angelo

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

    你(们)好,Ang


    我进行了您建议的测量、如下所示:

      不带适配器 使用适配器
    适配器电压   0V 19.5V
    ILIM 0V 819mV
    REGN 0V 6V
    ACDET 0V 2、58伏
    ACOK 0V 3、2V


    我注意到、当我为​​写入的值指定读取命令时、这些值​​会有很大的不同。 读取 ManufacturerID ()将提供数据:0x0000、DeviceID ()将提供数据:0x0000。 一个基本问题、我使用的是 I2C、而不是 SMBus、这是否是问题?

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

    您好!

    是的、您可能未正确写入寄存器。 由于 ChargeCurrent 和 ChargeVoltage 寄存器在 POR 时都为零、因此在将有效值写入这些寄存器之前将不会充电。

    您能否读回所有寄存器值以查看您写入的值是否实际经过?

    此致、

    Angelo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、解决了这个问题。
    在读取已发送的数据时、我注意到它们被与低部件反转了高部件。
    写入0xF902
    读取0x02F9。
     我使用了交换并开始加载。 

    ------ uVISION STM32F0命令: HAL_I2C_Mem_Write (&hi2c1、Addr_Bq24725A、CHARGE_OPTION[0]、1、&CHARGE_OPTION[1]、2、1000);//写入
    HAL_I2C_Mem_Read (&hi2c1、Addr_Bq24725A、R_CHARGE_OPTION [0]、1、&R_CHARGE_OPTION [1]、 2、1000);//读取
    ------ 感谢您的协作。