Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
registers.h
- Committer:
- MPPT51
- Date:
- 2021-07-31
- Revision:
- 0:d92f936cf10d
File content as of revision 0:d92f936cf10d:
/*
registers.h - Battery management system based on bq769x0 for ARM mbed
Copyright (C) 2015-2016 Martin Jäger (http://libre.solar)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this program. If not, see
<http://www.gnu.org/licenses/>.
*/
#include "mbed.h"
// register map
#define SYS_STAT 0x00
#define CELLBAL1 0x01
#define CELLBAL2 0x02
#define CELLBAL3 0x03
#define SYS_CTRL1 0x04
#define SYS_CTRL2 0x05
#define PROTECT1 0x06
#define PROTECT2 0x07
#define PROTECT3 0x08
#define OV_TRIP 0x09
#define UV_TRIP 0x0A
#define CC_CFG 0x0B
#define VC1_HI_BYTE 0x0C
#define VC1_LO_BYTE 0x0D
#define VC2_HI_BYTE 0x0E
#define VC2_LO_BYTE 0x0F
#define VC3_HI_BYTE 0x10
#define VC3_LO_BYTE 0x11
#define VC4_HI_BYTE 0x12
#define VC4_LO_BYTE 0x13
#define VC5_HI_BYTE 0x14
#define VC5_LO_BYTE 0x15
#define VC6_HI_BYTE 0x16
#define VC6_LO_BYTE 0x17
#define VC7_HI_BYTE 0x18
#define VC7_LO_BYTE 0x19
#define VC8_HI_BYTE 0x1A
#define VC8_LO_BYTE 0x1B
#define VC9_HI_BYTE 0x1C
#define VC9_LO_BYTE 0x1D
#define VC10_HI_BYTE 0x1E
#define VC10_LO_BYTE 0x1F
#define VC11_HI_BYTE 0x20
#define VC11_LO_BYTE 0x21
#define VC12_HI_BYTE 0x22
#define VC12_LO_BYTE 0x23
#define VC13_HI_BYTE 0x24
#define VC13_LO_BYTE 0x25
#define VC14_HI_BYTE 0x26
#define VC14_LO_BYTE 0x27
#define VC15_HI_BYTE 0x28
#define VC15_LO_BYTE 0x29
#define BAT_HI_BYTE 0x2A
#define BAT_LO_BYTE 0x2B
#define TS1_HI_BYTE 0x2C
#define TS1_LO_BYTE 0x2D
#define TS2_HI_BYTE 0x2E
#define TS2_LO_BYTE 0x2F
#define TS3_HI_BYTE 0x30
#define TS3_LO_BYTE 0x31
#define CC_HI_BYTE 0x32
#define CC_LO_BYTE 0x33
#define ADCGAIN1 0x50
#define ADCOFFSET 0x51
#define ADCGAIN2 0x59
// function from TI reference design
#define LOW_BYTE(Data) (uint8_t)(0xff & Data)
#define HIGH_BYTE(Data) (uint8_t)(0xff & (Data >> 8))
// for bit clear operations of the SYS_STAT register
#define STAT_CC_READY (0x80)
#define STAT_DEVICE_XREADY (0x20)
#define STAT_OVRD_ALERT (0x10)
#define STAT_UV (0x08)
#define STAT_OV (0x04)
#define STAT_SCD (0x02)
#define STAT_OCD (0x01)
#define STAT_FLAGS (0x3F)
// maps for settings in protection registers
const int SCD_delay_setting [4] =
{ 70, 100, 200, 400 }; // us
const int SCD_threshold_setting [8] =
{ 44, 67, 89, 111, 133, 155, 178, 200 }; // mV
const int OCD_delay_setting [8] =
{ 8, 20, 40, 80, 160, 320, 640, 1280 }; // ms
const int OCD_threshold_setting [16] =
{ 17, 22, 28, 33, 39, 44, 50, 56, 61, 67, 72, 78, 83, 89, 94, 100 }; // mV
const int UV_delay_setting [4] = { 1, 4, 8, 16 }; // s
const int OV_delay_setting [4] = { 1, 2, 4, 8 }; // s
typedef union regSYS_STAT {
struct
{
uint8_t OCD :1;
uint8_t SCD :1;
uint8_t OV :1;
uint8_t UV :1;
uint8_t OVRD_ALERT :1;
uint8_t DEVICE_XREADY :1;
uint8_t WAKE :1;
uint8_t CC_READY :1;
} bits;
uint8_t regByte;
} regSYS_STAT_t;
typedef union regSYS_CTRL1 {
struct
{
uint8_t SHUT_B :1;
uint8_t SHUT_A :1;
uint8_t RSVD1 :1;
uint8_t TEMP_SEL :1;
uint8_t ADC_EN :1;
uint8_t RSVD2 :2;
uint8_t LOAD_PRESENT :1;
} bits;
uint8_t regByte;
} regSYS_CTRL1_t;
typedef union regSYS_CTRL2 {
struct
{
uint8_t CHG_ON :1;
uint8_t DSG_ON :1;
uint8_t WAKE_T :2;
uint8_t WAKE_EN :1;
uint8_t CC_ONESHOT :1;
uint8_t CC_EN :1;
uint8_t DELAY_DIS :1;
} bits;
uint8_t regByte;
} regSYS_CTRL2_t;
typedef union regPROTECT1 {
struct
{
uint8_t SCD_THRESH :3;
uint8_t SCD_DELAY :2;
uint8_t RSVD :2;
uint8_t RSNS :1;
} bits;
uint8_t regByte;
} regPROTECT1_t;
typedef union regPROTECT2 {
struct
{
uint8_t OCD_THRESH :4;
uint8_t OCD_DELAY :3;
uint8_t RSVD :1;
} bits;
uint8_t regByte;
} regPROTECT2_t;
typedef union regPROTECT3 {
struct
{
uint8_t RSVD :4;
uint8_t OV_DELAY :2;
uint8_t UV_DELAY :2;
} bits;
uint8_t regByte;
} regPROTECT3_t;
typedef union regCELLBAL
{
struct
{
uint8_t RSVD :3;
uint8_t CB5 :1;
uint8_t CB4 :1;
uint8_t CB3 :1;
uint8_t CB2 :1;
uint8_t CB1 :1;
} bits;
uint8_t regByte;
} regCELLBAL_t;
typedef union regVCELL
{
struct
{
uint8_t VC_HI;
uint8_t VC_LO;
} bytes;
uint16_t regWord;
} regVCELL_t;