211 lines
8.6 KiB
C
211 lines
8.6 KiB
C
/****************************************************************************
|
|
* 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 */
|