Newer
Older
BIRMM-GT200N / bsp_ds2782.h
/*
*********************************************************************************************************
*
*	模块名称 : ds2782驱动
*	文件名称 : DS2782.h
*	版    本 : V1.0
*	说    明 : 
*
*	修改记录 :
*		版本号  日期        作者     说明
*		V1.0    2019-02-022 Baiyang  正式发布
*		
*	Copyright (C), 本宝宝不高兴
*
*********************************************************************************************************
*/

#ifndef __BSP_DS2782_H
#define __BSP_DS2782_H

/* Function Commands */
/* 详细 Memory Map 见数据手册P27 [Table 5. Function Commands] */
#define Copy_data_back_0    0x42
#define Copy_data_back_1    0x44
#define recall_data_back_0  0xB2
#define recall_data_back_1  0xB4
#define lock_data_back_0    0x63
#define lock_data_back_1    0x66

/* Memory Map  */
/* 详细 Memory Map 见数据手册P23  */
#define STATUS  0x01
#define RAACMSB 0x02
#define RAACLSB 0x03
#define RSACMSB 0x04
#define RSACLSB 0x05
#define RARC    0x06
#define RSRC    0x07
#define IAVGMSB 0x08
#define IAVGLSB 0x09
#define TEMPMSB 0x0A
#define TEMPLSB 0x0B
#define VOLTMSB 0x0C
#define VOLTLSB 0x0D
#define CURRENTMSB 0x0E
#define CURRENTLSB 0x0F
#define ACRMSB     0x10         //. 累计电流
#define ACRLSB     0x11
#define ACRLMSB    0x12
#define ACRLLSB    0x13
#define AS         0x14
#define SFR        0x15
#define FULLMSB    0x16
#define FULLLSB    0x17
#define AEMSB      0x18
#define AELSB      0x19
#define SEMSB      0x1A
#define SELSB      0x1B

#define CONTROL 0x60    //控制寄存器
#define AB      0x61    //累计偏置
#define ACMSB   0x62    //老化容量
#define ACLSB   0x63
#define VCHG    0x64    //充电电压
#define IMIN    0x65    //最小充电电流 
#define VAE     0x66    //有效空电压 
#define IAE     0x67    //有效空电9999流 
#define RSNSP   0x69    //采样电阻
#define FULLSMSB 0x6A   //+40°C温度时的满电量值
#define FULLSLSB 0x6B
#define FULL3040   0x6C
#define FULL2030   0x6D
#define FULL1020   0x6E
#define FULL0010   0x6F
#define AE3040     0x70
#define AE2030     0x71
#define AE1020     0x72
#define AE0010     0x73 
#define SE3040     0x74
#define SE2030     0x75
#define SE1020     0x76
#define SE0010     0x77
#define RSGAINMSB  0X78
#define RSGAINLSB  0X79
#define RSTC       0X7A
#define FCR        0XFE

#define I2C_WR        0X00
#define I2C_RD        0X01


/* 
*Slave Address 
* 7bit 0110100
*/
#define  DS2782_8bit_Slave_Address 0x34

#define Capacity        4900    //电池容量 mAH
#define RSNSP_mOhm      10      //采样电阻 毫欧
#define Charge_Voltage  3600    //充电电压 mV
#define Minimum_Charge_Current 20       //最小充电电流 mA
#define Empty_Voltage   2800    //有效空电电压 mV
#define Empty_Current   300     //有效空电电流 mA

typedef struct
{
uint8_t _STATUS  ; //0x01
uint8_t _RAACMSB ; //0x02
uint8_t _RAACLSB ; //0x03
uint8_t _RSACMSB ; //0x04
uint8_t _RSACLSB ; //0x05
uint8_t _RARC    ; //0x06
uint8_t _RSRC    ; //0x07
uint8_t _IAVGMSB ; //0x08
uint8_t _IAVGLSB ; //0x09
uint8_t _TEMPMSB ; //0x0A
uint8_t _TEMPLSB ; //0x0B
uint8_t _VOLTMSB ; //0x0C
uint8_t _VOLTLSB ; //0x0D
uint8_t _CURRENTMSB ; //0x0E
uint8_t _CURRENTLSB ; //0x0F
uint8_t _ACRMSB     ; //0x10         //. 累计电流
uint8_t _ACRLSB     ; //0x11
uint8_t _ACRLMSB    ; //0x12
uint8_t _ACRLLSB    ; //0x13
uint8_t _AS         ; //0x14
uint8_t _SFR        ; //0x15
uint8_t _FULLMSB    ; //0x16
uint8_t _FULLLSB    ; //0x17
uint8_t _AEMSB      ; //0x18
uint8_t _AELSB      ; //0x19
uint8_t _SEMSB      ; //0x1A
uint8_t _SELSB      ; //0x1B
}Ds278x;


typedef struct
{
  uint8_t  _STATUS;
  uint16_t _RAAC;        //剩余绝对有效电量 (RAAC) [mAh]
  uint16_t _RSAC;
  uint8_t  _RARC;         //剩余相对有效电量 (RARC) [%]
  uint8_t  _RSRC;
  uint16_t _IAVG;
  uint16_t _TEMP;
  uint16_t _VOLT;
  
  int16_t  Current;
  uint16_t Voltage;        
  
  uint16_t _ARC;
  
  uint8_t Connect;      //芯片连接状态 连接上写入1  连接失败写入 0
  
}Ds2782_Typedef;


extern Ds2782_Typedef Ds2782;

extern Ds278x Ds2782_RAM;

uint8_t Get_DS2782_STATUS();

uint16_t Get_DS2782_Temperature();

uint16_t Get_DS2782_Voltage();

int16_t Get_DS2782_Current();

uint16_t Get_DS2782_RAAC();

uint16_t Get_DS2782_RSAC();

uint8_t Get_DS2782_RARC();

uint8_t Get_DS2782_RSRC();

uint16_t Get_DS2782_ACR();

uint16_t Get_DS2782_FULL();
uint16_t Get_DS2782_AE();
uint16_t Get_DS2782_SE();


void    Write_DS2782_Shadow_RAM(uint8_t reg_Addres,uint8_t data);

void    Copy_Data_For_Shadow_RAM_To_EEPROM(uint8_t EEPROM_BLOCK);

void bsp_Init_DS2782();

void Module_DS2781_Set_Register(void);

#endif