/**************************************************************************** * include/nuttx/power/bq27426.h * Lower half driver for bq27426 battery fuel gauge. * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. The * ASF licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * ****************************************************************************/ #ifndef __DRIVERS_POWER_BQ27426_H #define __DRIVERS_POWER_BQ27426_H /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ /* Auxiliary Definitions */ #define BQ27426_I2C_TIMEOUT 2000 #define BQ27426_I2C_ADDRESS 0x55 /* Default I2C address of the BQ27426 */ /* General Constants */ #define BQ27426_UNSEAL_KEY 0x8000 /* Secret code to unseal the BQ27426 */ #define BQ27426_DEVICE_ID 0x0426 /* Default device ID */ /* Standard Commands */ /* The fuel gauge uses a series of 2-byte standard commands to enable system * reading and writing of battery information. Each command has an associated * sequential command-code pair. */ #define BQ27426_COMMAND_CONTROL 0x00 /* Control() */ #define BQ27426_COMMAND_TEMP 0x02 /* Temperature() */ #define BQ27426_COMMAND_VOLTAGE 0x04 /* Voltage() */ #define BQ27426_COMMAND_FLAGS 0x06 /* Flags() */ #define BQ27426_COMMAND_NOM_CAPACITY 0x08 /* NominalAvailableCapacity() */ #define BQ27426_COMMAND_AVAIL_CAPACITY 0x0A /* FullAvailableCapacity() */ #define BQ27426_COMMAND_REM_CAPACITY 0x0C /* RemainingCapacity() */ #define BQ27426_COMMAND_FULL_CAPACITY 0x0E /* FullChargeCapacity() */ #define BQ27426_COMMAND_AVG_CURRENT 0x10 /* AverageCurrent() */ #define BQ27426_COMMAND_AVG_POWER 0x18 /* AveragePower() */ #define BQ27426_COMMAND_SOC 0x1C /* StateOfCharge() */ #define BQ27426_COMMAND_INT_TEMP 0x1E /* InternalTemperature() */ #define BQ27426_COMMAND_SOH 0x20 /* StateOfHealth() */ #define BQ27426_COMMAND_REM_CAP_UNFL 0x28 /* RemainingCapacityUnfiltered() */ #define BQ27426_COMMAND_REM_CAP_FIL 0x2A /* RemainingCapacityFiltered() */ #define BQ27426_COMMAND_FULL_CAP_UNFL 0x2C /* FullChargeCapacityUnfiltered() */ #define BQ27426_COMMAND_FULL_CAP_FIL 0x2E /* FullChargeCapacityFiltered() */ #define BQ27426_COMMAND_SOC_UNFL 0x30 /* StateOfChargeUnfiltered() */ /* Control Sub-commands */ /* Issuing a Control() command requires a subsequent 2-byte subcommand. These * additional bytes specify the particular control function desired. The * Control() command allows the system to control specific features of the * fuel gauge during normal operation and additional features when the * device is in different access modes. */ #define BQ27426_CONTROL_STATUS 0x0000 #define BQ27426_CONTROL_DEVICE_TYPE 0x0001 #define BQ27426_CONTROL_FW_VERSION 0x0002 #define BQ27426_CONTROL_DM_CODE 0x0004 #define BQ27426_CONTROL_PREV_MACWRITE 0x0007 #define BQ27426_CONTROL_CHEM_ID 0x0008 #define BQ27426_CONTROL_BAT_INSERT 0x000C #define BQ27426_CONTROL_BAT_REMOVE 0x000D #define BQ27426_CONTROL_SET_CFGUPDATE 0x0013 #define BQ27426_CONTROL_SMOOTH_SYNC 0x0019 #define BQ27426_CONTROL_SHUTDOWN_ENABLE 0x001B #define BQ27426_CONTROL_SHUTDOWN 0x001C #define BQ27426_CONTROL_SEALED 0x0020 #define BQ27426_CONTROL_PULSE_SOC_INT 0x0023 #define BQ27426_CONTROL_CHEM_A 0x0030 #define BQ27426_CONTROL_CHEM_B 0x0031 #define BQ27426_CONTROL_CHEM_C 0x0032 #define BQ27426_CONTROL_RESET 0x0041 #define BQ27426_CONTROL_SOFT_RESET 0x0042 /* Control Status Word - Bit Definitions */ /* Bit positions for the 16-bit data of CONTROL_STATUS. * CONTROL_STATUS instructs the fuel gauge to return status * information to Control() addresses 0x00 and 0x01. * The read-only status word contains status bits that are * set or cleared either automatically as conditions warrant or * through using specified subcommands. */ #define BQ27426_STATUS_SHUTDOWNEN (1 << 15) #define BQ27426_STATUS_WDRESET (1 << 14) #define BQ27426_STATUS_SS (1 << 13) #define BQ27426_STATUS_CALMODE (1 << 12) #define BQ27426_STATUS_CCA (1 << 11) #define BQ27426_STATUS_BCA (1 << 10) #define BQ27426_STATUS_QMAX_UP (1 << 9) #define BQ27426_STATUS_RES_UP (1 << 8) #define BQ27426_STATUS_INITCOMP (1 << 7) #define BQ27426_STATUS_SLEEP (1 << 4) #define BQ27426_STATUS_LDMD (1 << 3) #define BQ27426_STATUS_RUP_DIS (1 << 2) #define BQ27426_STATUS_VOK (1 << 1) #define BQ27426_STATUS_CHEMCHANGE (1 << 0) /* Flag Command - Bit Definitions */ /* Bit positions for the 16-bit data of Flags() * This read-word function returns the contents of the fuel gauging status * register, depicting the current operating status. */ #define BQ27426_FLAG_OT (1 << 15) #define BQ27426_FLAG_UT (1 << 14) #define BQ27426_FLAG_FC (1 << 9) #define BQ27426_FLAG_CHG (1 << 8) #define BQ27426_FLAG_OCVTAKEN (1 << 7) #define BQ27426_FLAG_DODCORRECT (1 << 6) #define BQ27426_FLAG_ITPOR (1 << 5) #define BQ27426_FLAG_CFGUPMODE (1 << 4) #define BQ27426_FLAG_BAT_DET (1 << 3) #define BQ27426_FLAG_SOC1 (1 << 2) #define BQ27426_FLAG_SOCF (1 << 1) #define BQ27426_FLAG_DSG (1 << 0) /* Extended Data Commands */ /* Extended data commands offer additional functionality beyond * the standard set of commands. * They are used in the same manner; however, unlike standard * scommands, extended commands are not limited to 2-byte words. */ #define BQ27426_EXTENDED_OPCONFIG 0x3A /* OpConfig()*/ #define BQ27426_EXTENDED_CAPACITY 0x3C /* DesignCapacity()*/ #define BQ27426_EXTENDED_DATACLASS 0x3E /* DataClass()*/ #define BQ27426_EXTENDED_DATABLOCK 0x3F /* DataBlock()*/ #define BQ27426_EXTENDED_BLOCKDATA 0x40 /* BlockData()*/ #define BQ27426_EXTENDED_CHECKSUM 0x60 /* BlockDataCheckSum()*/ #define BQ27426_EXTENDED_CONTROL 0x61 /* BlockDataControl()*/ /* Configuration Class, Subclass ID's */ /* To access a subclass of the extended data, set the DataClass() * function with one of these values. */ /* Configuration Classes */ #define BQ27426_ID_SAFETY 2 /* Safety */ #define BQ27426_ID_CHG_TERMINATION 6 /* Charge Termination */ #define BQ27426_ID_CONFIG_DATA 48 /* Data */ #define BQ27426_ID_DISCHARGE 49 /* Discharge */ #define BQ27426_ID_REGISTERS 64 /* Registers */ #define BQ27426_ID_POWER 68 /* Power */ /* Gas Gauging Classes */ #define BQ27426_ID_IT_CFG 80 /* IT Cfg */ #define BQ27426_ID_CURRENT_THRESH 81 /* Current Thresholds */ #define BQ27426_ID_STATE 82 /* State */ /* Ra Tables Classes */ #define BQ27426_ID_R_A_RAM 89 /* R_a RAM */ /* Calibration Classes */ #define BQ27426_ID_CALIB_DATA 104 /* Data */ #define BQ27426_ID_CC_CAL 105 /* CC Cal */ #define BQ27426_ID_CURRENT 107 /* Current */ /* Security Classes */ #define BQ27426_ID_CODES 112 /* Codes */ /* OpConfig Register - Bit Definitions */ /* Bit positions of the OpConfig Register */ #define BQ27426_OPCONFIG_BIE (1 << 13) #define BQ27426_OPCONFIG_GPIOPOL (1 << 11) #define BQ27426_OPCONFIG_RESFACTSTEP (1 << 6) #define BQ27426_OPCONFIG_SLEEP (1 << 5) #define BQ27426_OPCONFIG_RMFCC (1 << 4) #define BQ27426_OPCONFIG_FASTCONVEN (1 << 3) #define BQ27426_OPCONFIG_BATLOWEN (1 << 2) #define BQ27426_OPCONFIG_TEMPS (1 << 0) #define BQ27426_ACCESS_SUB_CLASS_80 0x50 #define BQ27426_ACCESS_SUB_CLASS_81 0x51 #define BQ27426_ACCESS_SUB_CLASS_82 0x52 #define BQ27426_ACCESS_SUB_CLASS_89 0x59 #define BQ27426_ACCESS_SUB_CLASS_64 0x40 #endif /* __DRIVERS_POWER_BQ27426_H */