简介
我们开发的一款移动电源设备用的IP5385,这里做一下开发调试总结,与各位朋友分享一下,欢迎交流。
IP5385是一款移动电源SOC,支持 SCP、 PD3.0、 UFCS 等快充协议, 支持 2~6 节串联电池, 集成升降压驱动, 最大功率 100W。
支持多个USB口,寄存器数据种类丰富,可根据自己的需求进行相应的读写操作。
一、功能需求
这里使用IP5385主要是2路USB-C口做输入输出,1路USB-A口单向输出,输入功率最大30W,输出功率最大65W。
设备有几种工作状态,输入输出端口的电压电流数据,NTC温度需要从IP5385中获取。
1.1 状态数据
需要获取的状态:充电、放电状态,根据充放电状态,数码管显示不同的状态;
小电流状态,小电流模式下,数码管显示特定状态;
高温、低温、正常温度状态,温度异常状态下,数码管爆闪。
1.2 实时数据
当A1口输出时,获取A1口的输出电压,输出电流数据;
当C1口输入输出时,获取C1口的实时电压、电流数据;
当C2口输入输出时,获取C1口的实时电压、电流数据;
获取NTC的ADC值,换算成实际的温度。
二、寄存器读写
寄存器规格书中并不是每个端口的电压、电路数据都能获取到,有些数据获取的是三个MOS后端的总的数据,下面我们来详细看下数据怎么区分。
2.1 电压数据
当我们要获取每个端口的电压数据时,发现找不到此寄存器,最后找到一个VSYS电压寄存器,是的,这个就是电路中输入输出端总的电压,电路中具体位置,如下图所示。

这个电压寄存器,可作为C1,C2输入电压、A1,C1,C2输出电压,就是无论输入还是输出的电压,都是从这里流过。
这里需要读2个寄存器,分别是电压数据高8位和低8位,读上来之后合成为16位数据,再按照规格书中公式换算成实际电压值即可,VSYS电压寄存器如下图所示。

2.2 电流数据
2.2.1 输入电流
电流数据寄存器就比较多了,分为输入电流寄存器,输出电流寄存器。
只有C1,C2可作为输入端,所以输入电流寄存器只需要读C1,C2端的就可以,但是规格书中只有VBUS端的输入电流寄存器,VBUS端也就是C1端,C2端的输入电流数据寄存器没有,这里只能读VSYS端的电流寄存器。
把读取的VSYS端的电流寄存器,作为C1,C2端的输入电流,寄存器值如下图所示。

2.2.2 输出电流
A1,C1,C2端口的输出电流,规格书中都有对应的寄存器可读取,分别是VOUT1输出电流寄存器、IVBUS输出电流寄存器、IVIN输出电流寄存器。
对应的寄存器如下图:

2.3 状态寄存器
状态分为3中:充/放电状态、小电流状态、过温状态。
那么,对应的状态寄存器需要读取3个:充电状态指示寄存器、输入状态指示寄存器、NTC 状态指示寄存器。
2.3.1 充电状态指示寄存器
充电状态指示寄存器通过判断bit5的值,bit5为1表示充电状态,为0表示放电状态。
寄存器值如下图:

2.3.2 输入状态指示寄存器
该寄存器通过判断bit字节的数据,bit3:1-小电流模式,0-正常模式,这个是后期定制增加的,所以规格书中没有显示。
寄存器值如下图:

2.3.3 NTC 状态指示寄存器
过温状态通过判断此寄存器的bit6,bit7字节,来确定是NTC高温保护,还是低温保护。
寄存器值如下图:

三、代码实现
通过以上,我们可以知道主控对于IP5385的操作基本只有读数据操作,所以,我们只需要IIC通信的读数据操作就可以,这里代码例程以某一个寄存器读取为例。
寄存器宏定义代码如下:

IIC读取状态寄存器代码例程如下:

IIC读数据寄存器代码例程如下:

四、总结
综上,我们获取了这么多IP5385的寄存器数据,代码实现时需做好模块化设计,建议采用状态机+定时器的模式去设计,所有的寄存器地址采用宏定义,增加代码可读性。










---------------------
作者:liao6
链接:https://bbs.21ic.com/icview-3512724-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

783

被折叠的 条评论
为什么被折叠?



