android 电源/充电/库仑

        最近,一直在负责公司所有产品的电源/充电/库仑这块,先说说库仑,它是集成在电池里面的一个芯片,用来准确的返回电池的信息的,因为一般的电池的信息是通过adc返回的数据,这样的数据不是很精确,为了做到对电池的信息的精确处理,所以公司的大多产品都用到了库仑计,底层页就是通过I2C读取寄存器的数据实现的。

      1:有库仑计和一般电池的区别

            有库仑计的电池,一共有6个脚,而一般的电池只有三个脚;

            有库仑计的电池,读取到的数据比没库仑计的电池读取到的电池信息更精确。

       先贴图:

    

        如图中看到的,通过SCL和SDA读取6B地址处的数据,就可以精确拿到电池的信息。

       

         通过下面的bq27541_level()读取电池的电量等级,也就是百分数,而通过bq7541_vol()读取到的即是电池的电量,其实最底层就是通过i2c_smbus_xfer实现的。

  int bq27541_level(void)
{
    int ret;
    short data;
    ret = i2c_smbus_read_word_data(chip->client, bq27541CMD_SOC_LSB);
    if (ret >= 0) {
        data = (short)ret;
        //printk("level:%d\n",data);
        bq27541_debug(chip, "POWER_SUPPLY_PROP_CAPACITY = %d\n", data);
    } else {
        pr_info("get bat_info POWER_SUPPLY_PROP_CAPACITY on bq27541CMD_SOC_LSB error\n");
        return -1;
    }
    return data;
}

int bq27541_vol(void)
{
    int ret;
    short data;
    
    ret = i2c_smbus_read_word_data(chip->client, bq27541CMD_VOLT_LSB);
    if (ret >= 0) {
        data = (short)ret;
        //printk("vol:%d\n",data);
        bq27541_debug(chip, "POWER_SUPPLY_PROP_VOLTAGE_NOW = %dmV\n", data);
    } else {
        pr_info("get bat_info POWER_SUPPLY_PROP_VOLTAGE_NOW on bq27541CMD_VOLT_LSB error\n");
        return -1;
    }
    return data;
}

下面这个图,就是在备电电量低的时候,用来给备电充电的,在备电电量低的时候(会有一个中断)或者usb或者AC充电的时候,会给AUXBAT_CHGEN这个引脚一个高电平,来启动备电充电,XEINT4-AuxBATCHG_DET这个引脚是备电满标志,平时会因为上拉电阻,而呈现高电平,在充电的过程中,会保持低电平,而备电满以后,这个引脚会由低变高。在变高的同时会清除AUXBAT_CHGEN这个引脚为低电平。

   





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值