Quantcast
Channel: Power management forum - Recent Threads
Viewing all 35901 articles
Browse latest View live

Linux/BQ27545-G1: Reset time after DM update of flash gauge

$
0
0

Part Number:BQ27545-G1

Tool/software: Linux

Is there a delay during which a flash (ie non-config-update) gauge resets itself after BlockData and BlockDataChecksum are written?

For the 545, I see "DF block write typically requires a maximum of 72 ms" but I don't see mention of chip reset time.


BQ40Z50-R1: SMB returned bytes by BQ

$
0
0

Part Number:BQ40Z50-R1

Hello,

when I send a SBS command via smbus to the bq40z50, I receive some bytes besides the data I wanted to read, which I have no info about. I'm using Battery Management Studio "Read Block" = 0x51 (Safety Status) and Battery Management Studio shows the answer (block) 0x 00 00 00 00. However an I2C bus analyzer shows the answer 0x 02 00 00 00 00 D8 or something like this. So it seems that the last byte is some kind of checksum and byte 1 to 4 is the data but I don't know what to make of the first byte. Could you please explain the purpose of this byte or point me to the associated documentation?

Thanks,

Sebastian

BQ27621-G1: SOC difference

$
0
0

Part Number:BQ27621-G1

Hi. I have a question about BQ27621-G1

Case1 ) Battery is no charging -> BQ27621-G1 initialize -> SOC Read

Case2) Battery is charging -> BQ27621-G1 initialize -> SOC Read

The difference between Case1 SOC and Case2 SOC is very big.

For example, when Case1 SOC is 20%, Case2 SOC becomes 60% after charging start.

Why this issue is occurred?

How can I fix accuracy? 

BQ40Z50-R1: Comparison of Battery Management IC's

$
0
0

Part Number:BQ40Z50-R1

Hello,


I hope someone can help me over here. We currently looking at an updated battery management IC for a future design, the IC we are looking at is the bq40z50-r1. The IC chip that we are currently using is the bq20z95 but we want to get a comparison between the bq20z95 and bq40z50-r1.

At this moment we see that the bq40z50-r1 has more protection features, improved charging algorithms, a lot more primary and secondary safety features, smaller sense resistor is used, etc. What I would like to know is what is the most significant improvements or core improvements of the bq40z50-r1 over the bq20z95?

Also is there a better battery management IC chip I can use?


Kind Regards,

Nilesh

EV2400: Is there any method to repair EV2400

$
0
0

Part Number:EV2400

Hello,

Is there any method to repair EV2400?

for example, if the MCU of EV2400 fails, do we have MCU firmware to program to a new MCU?

thanks.

Starterware/BQ27741-G1: Invalid checksum reading from block data register

$
0
0

Part Number:BQ27741-G1

Tool/software: Starterware

Hi,

am reading invalid checksum and unable to get expected readings.

My code :

#define BQ27441_ADDR 0x55       // taken from datasheet - page 13
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <math.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <time.h>
#include <sys/time.h>
#include <curses.h>
#include <wiringPi.h>
typedefunsigned charbyte;
intdeviceDescriptor;
/* This function initializes the I2C device*/
voidinit_i2c(char*DeviceName)
{  
        printf("Initialising i2c device \n");
        deviceDescriptor=open(DeviceName, O_RDWR);
        if(deviceDescriptor == -1) {
                printf("Error opening device '%s' \n",DeviceName);
                exit(-1);
        }
}
/* This function sends data to the I2C device*/
voidI2cSendData(byte addr,byte *data,intlen)
{
        if(ioctl(deviceDescriptor,I2C_SLAVE, addr))
                printf("I2cSendData_device : IOCTL Problem \n");
        write(deviceDescriptor,data,len);
}
/* This function reads data from the I2C device*/
voidI2cReadData(byte addr,byte *data,intlen)
{
        if(ioctl(deviceDescriptor,I2C_SLAVE, addr))
                printf("I2cReadData_device : IOCTL Problem \n");
        read(deviceDescriptor,data,len);
}
/* Convert the number to hexadecimal representation */
voidto_hex_16(char*output, unsigned n)
{
        staticconstcharhex_digits[] = "0123456789abcdef";
        output[0] = hex_digits[(n >> 12) & 0xF];
        output[1] = hex_digits[(n >> 8) & 0xF];
        output[2] = hex_digits[(n >> 4) & 0xF];
        output[3] = hex_digits[(n & 0xF)];
        output[4] = '\0';
}
/* Computes the checksum by adding the values in the register and then subtracting from 255 */
staticintchecksum(byte *check_data)
{
        intsum = 0;
        intii = 0;
        
        for(ii = 0; ii < 32; ii++)
            sum += check_data[ii+62];
            
        sum &= 0xFF;
        
        return0xFF - sum;
}
/* getliner() reads one line from standard input and copies it to line array
 * (but no more than max chars)
 * It does not place the terminating \n line array.
 * Returns line length, or 0 for empty line, or EOF for end-of-file.
 */
intgetliner(charline[], intmax)
{
        intnch = 0;
        intc;
        max = max - 1;          /* Leave room for '\0' */
        while((c = getchar()) != EOF) {
                if(c == '\n')
                        break;
                if(nch < max) {
                        line[nch] = c;
                        nch = nch + 1;
                }
        }
        if(c == EOF && nch == 0)
                returnEOF;
        line[nch] = '\0';
        returnnch;
}
intmain(intargc, char**argv)
{
        inti, voltage, design_capacity, new_design_capacity, new_design_cap_hex;
        intdes_cap[10], cksum = 0;
        byte data[100], writeData[100], unseal_data[10], cfgupdate_data[10], flag_data[10], flag_out[10];
        byte block_data_control[10], data_block_class[10], data_block[10], block_data_checksum[10];
        byte block_data_checksum_data[10], design_capacity_loc[10], design_capacity_data[10];
        byte soft_reset[10], seal_data[10];
        floatremaining_batt_cap = 0.0;
        floatfull_charge_cap = 0.0;
        floatsoc = 0.0;
        floattemp = 0.0;
        floatcurrent = 0.0;
        charnew_design_cap[7], a[10], b[10], tmp[10];
        
    printf("Inside main \n");
    
        init_i2c("/dev/i2c-1");
    
        writeData[0] = 0x00;
        writeData[1] = 0x04;
        
        unseal_data[0] = 0x00;
        unseal_data[1] = 0x00;
        unseal_data[2] = 0x80;
        cfgupdate_data[0] = 0x00;
        cfgupdate_data[1] = 0x13;
        cfgupdate_data[2] = 0x00;
        flag_data[0] = 0x06;
        block_data_control[0] = 0x61;
        block_data_control[1] = 0x00;
        data_block_class[0] = 0x3E;
        data_block_class[1] = 0x52;
        data_block[0] = 0x3F;
        data_block[1] = 0x00;
        block_data_checksum[0] = 0x60;
        design_capacity_loc[0] = 0x4A;
        soft_reset[0] = 0x00;
        soft_reset[1] = 0x42;
        soft_reset[2] = 0x00;
        seal_data[0] = 0x00;
        seal_data[1] = 0x20;
        seal_data[2] = 0x00;
        /* Unseal the gauge - Refer TRM - Pg-14 */
        I2cSendData(BQ27441_ADDR, unseal_data, 3);      // #1
        I2cSendData(BQ27441_ADDR, unseal_data, 3);         
        delay(5);
        printf("The gauge seems to be unsealed. \n");
        
        I2cSendData(BQ27441_ADDR, cfgupdate_data, 3);   // #2
        delay(1000);
        I2cSendData(BQ27441_ADDR, flag_data, 1);        // #3
        delay(5);
        I2cReadData(BQ27441_ADDR, flag_out, 1);
        
        printf("The flag_out is: %x \n", flag_out[0]);
        
        if(CHECK_BIT(flag_out[0], 4)) {
                printf("The gauge is ready to be configured \n");
                
                I2cSendData(BQ27441_ADDR, block_data_control, 2);       // #4
                delay(5);
                I2cSendData(BQ27441_ADDR, data_block_class, 2);         // #5  
                delay(5);
                I2cSendData(BQ27441_ADDR, data_block, 2);               // #6
                delay(5);
                I2cSendData(BQ27441_ADDR, block_data_checksum, 1);      // #7
                delay(5);
                I2cReadData(BQ27441_ADDR, block_data_checksum_data, 1);
                delay(5);
                
                printf("The checksum_data: %x \n", block_data_checksum_data[0]);
                
                if(block_data_checksum_data[0] == 0xE8) {
                        printf("The checksum is as expected. Config will proceed. \n");
                        
                        I2cSendData(BQ27441_ADDR, design_capacity_loc, 1);      // #8
                        delay(5);
                        I2cReadData(BQ27441_ADDR, design_capacity_data, 2);
                        delay(5);
                        
                        //printf("Design capacity data: %x and %x \n", design_capacity_data[0], design_capacity_data[1]);
                        
                        design_capacity = design_capacity_data[0]*16*16 + design_capacity_data[1];
                        delay(5);
                        
                        printf("The current design capacity is: %d mAh \n", design_capacity);
                        printf("Set new design capacity in mAh (ENTER to continue) ?");
                        getliner(new_design_cap, 7);
                        
                        if(new_design_cap != EOF && new_design_cap[0] != 0) {
                                printf("Trying to update the design capacity \n");
                                
                                new_design_capacity = atoi(new_design_cap);                                     // #9
                                printf("Trying to set new design capacity to: %d \n", new_design_capacity);
                                to_hex_16(tmp, new_design_capacity);
                                
                                for(i = 0; i <= 3; i++) {
                                        printf("Output at position %d has %c \n", i, tmp[i]);
                                }
                                
                                des_cap[0] = design_capacity_loc[0];
                                des_cap[1] = (tmp[0] - '0')*16 + (tmp[1] - '0');
                                des_cap[2] = (tmp[2] - '0')*16 + (tmp[3] - '0');
                                
                                printf("Des cap 0: %d ", des_cap[0]);
                                printf("Des cap 1: %d ", des_cap[1]);
                                printf("Des cap 2: %d ", des_cap[2]);
                                I2cSendData(BQ27441_ADDR, des_cap, 3);
                                delay(1000);
                               
                                cksum = checksum(data);                                                         // #10
                                delay(1000);
                                printf("New Checksum found is: %x ", cksum);
                                block_data_checksum[1] = cksum;                                                 // #11   
                                I2cSendData(BQ27441_ADDR, block_data_checksum, 2);
                                delay(5);
                                I2cSendData(BQ27441_ADDR, soft_reset, 3);                                       // #12
                                delay(1000);
                                //printf("Design Cap data 0: %x", data[72]);
                                //printf("Design Cap data :1 %x", data[73]);
                                //design_capacity = data[72]*16*16 + data[73];
                                
                                I2cSendData(BQ27441_ADDR, flag_data, 1);                                        // #13
                                delay(5);
                                I2cReadData(BQ27441_ADDR, flag_out, 1);
                                printf("The flag_out is: %x \n", flag_out[0]);
                                
                                if(!CHECK_BIT(flag_out[0], 4)) {
                                        printf("CFGUPDTE has been exited, configuration done. \n");
                                        I2cSendData(BQ27441_ADDR, seal_data, 1);                                // #14
                                        delay(5);
                                        printf("Gauge has been sealed and is ready for operation \n");
                                }
        
        
                                
                                //printf("New capacity set as: %d mAh \n", design_capacity);
                                
                        } else{
                                printf("Design capacity left unchanged. Now at %d mAh \n", design_capacity);
                        }
                } else{
                        printf("The checksum is not as expected. Config halt. \n");
                }
        } else{
                printf("Cannot proceed with configuration. \n");
                printf("The CFGUPDATE MODE has not been enabled yet. \n");
        }
        while(true) {
                /* Reading the device registers */
                        I2cSendData(BQ27441_ADDR, writeData, 2);
                        I2cReadData(BQ27441_ADDR, data, 100);
                        voltage = data[4]*16*16 + data[3];
                        remaining_batt_cap = data[12]*16*16 + data[11];
                        full_charge_cap = data[14]*16*16 + data[13];
                        soc = (remaining_batt_cap/full_charge_cap)*100;
                        temp = (data[2]*16*16 + data[1])/10.0 - 273.0;
                        current = data[16]*16*16 + data[15];
                        printf("Voltage: %d  mV\n", voltage);
                        printf("Current: %f  mA\n", current);
                        printf("Remaining Battery Capacity: %f  mAh\n", remaining_batt_cap);
                        printf("Full Charge Capacity: %f mAh\n", full_charge_cap);
                        printf("State of Charge: %f p.c. \n", soc);
                        printf("Temperature: %f  Deg C\n", temp);
                        delay(10000);
        }
        
        close(deviceDescriptor);
        endwin();
        return0;
}
Console logs :
Tha flag out is :10
Checksum data :ac

 

RTOS/BQ27621-G1: BQ27621-G1 Reading the Gauge Registers

$
0
0

Part Number:BQ27621-G1

Tool/software: TI-RTOS

I am having lot of trouble going through the "Gauge Configuration Parameters".

I follow the steps in SLUUAP5A-Quickstart Guide for bq27621-G1 :

  • On Figure2 : 
  • Voltage[2] = I2CReadSubCommand(0x04, 2, 100) 
    • I2CWrite(0x04, 100)
    • Buffer[2] = I2CRead(2, 100)

What does it really mean in I2C command code ??  what is the "100" ?

My understand from SLUUAD4C-Technical Reference

  • Table 4.1 
  • Voltage() and Flags() are all Standard Commands

So, I have been using following sequence to read :

  • rd 0x06 Flags_register[0];
  • rd 0x07 Flags_register[1];

BUT, definitely there are issues.  Because when I follow the instruction in (Figure 1) of SLUUAP5A-Quickstart Guide.

The [CFGUPMODE] bit come back with first try.... The checkcsum returned is incorrect... this imply chip is not ready yet.

If I put a long delay, it is fine.

So, my question is : what had I done wrong in reading the Flags_register ?

Why doc said those registers are "I2CReadSubCommand"

Thanks for advice.

BQ40Z60: Max sense current

$
0
0

Part Number:BQ40Z60

Hi

We would like to use the BQ40Z60 in an application where we would like to sense a max battery discharge current of 60 to 65 Ampere.

From another post on the forum, my understanding is that: The gauge can only support +/- 32A in the current registers. The abs max voltage across the sense resistor is +/-300mV. You will lose accuracy, if you exceed +/-100mV.

Thus, is it at all possible to use the BQ40Z60 to sense 60A in our application? If so what do we need to change or setup to make things work.

If it is not possible to use the BQ40Z60 for the high current measurements, may we please request info on a more suitable battery management IC with similar features to the BQ40Z60.

Thanks,

Jan-Cor


BQ20Z655-R1: Response time for gas gauge parameters

$
0
0

Part Number:BQ20Z655-R1

Dear members,

I am being asked by my customer regarding response time of the bq20z655-R1 gas gauge.  His specific question is as follows:

This is regarding  SMBUS Data from Battery pack .

 

What is the minimum response time of the battery pack for each data (Voltage, ASoC and RSoC) sample?

 

I would assume that he is interested in how long it takes for a change in any of the parameters to be reported over the SMBus.  Would this be a function of the gas gauge performance, or is it an SMBus function?

 

Any help would be appreciated.

 

Regards,

George

"SN20871DBTR-V200" vs "SN20871DBTR"

$
0
0

What is the difference between a "SN20871DBTR-V200" and a "SN20871DBTR",  Can I get data sheets?

BQ28Z610: Mistake in Reference Manual and Battery Management Studio

$
0
0

Part Number:BQ28Z610

Hello,

I found a Mistake in the Reference Manual for the BQ28z610.

The Byte-Length of the Register 0x4708 (Settings->Permanent Failure) isn't 1 Byte. It is 2 Byte. There isn't a Register 0x4709. In Battery Management Studio Software the Register has the wrong length, too. But the Software sends it in the right length.

BQ20Z75: HDQ based solution for 3S2P pack.

$
0
0

Part Number:BQ20Z75

Hello,

I am looking for Gas Gauge ICs for a 3S2P Li-Ion pack. In other designs we used BQ20Z75 chip, but in this project I only have 1 pin available for communication with the host, so BQ20Z75 is not an option since it uses I2C, besides it is listed as NFND.

I found some HDQ-based solutions like BQ27741, but they support a single cell only. BQ34Z100 on the other hand lacks built-in protection.

Any suggestion on selecting a 1-wire solution?

BQ27510-G3: error "Target Not in ROM Mode" when attempting to program senc file

$
0
0

Part Number:BQ27510-G3

Known Procedure:

Open EV2300 and select the device Bq27510G3

Select bq27510G3 v4.00 (Dev:510,Ver:4.0)-510_4_00

Confirm Selection

selection IC2 PRo

Address is set to AA

Location is set to 00

Datablock is set to 000F

Press Write Command

Select Senc Firmware

Press program

ERROR message "Target Not in Rom Mode"

This is a procedure that was recorded last year and has been done before.  It looks like the Texas Instruments SLUA541A document 2011 revision corroborates our steps.  What step is being left out?

Our production line has stopped as a result of this, please help with a solution as soon as possible.

BQ28Z610: battery is not getting charged or discharged

$
0
0

Part Number:BQ28Z610

Hi,

I am using Bq28z610 in one of our application, for testing, I am connecting my board with BQ studio even after doing the FET EN my battery is not getting charged or discharged. Actually battery is always disconnected from the system.  

BQ40Z50-R1: I will inquire about BQ40Z50-R1.

$
0
0

Part Number:BQ40Z50-R1

HI TI.

I am going to use the new BQ40Z50RSMR-R1.

I am curious about three things below.

1. Is it possible to test the BQ40z50 IC with M-Tester (calibration and EEPROM Write)?
2. If it is possible to test, please provide the file necessary for BQ40z50 test such as target file.
3. We will inquire about how to extract the ROM file from the product.

Please reply after confirmation.

Thank you.


BQ28Z610: Resistance selection for cell balancing

$
0
0

Part Number:BQ28Z610

Hi,

Datasheet mention that cell balancing current depend on series resistance between cell pack and VCx pin. How we should select resistance for cell balancing. 

BQ27411-G1: Bqstudio compatibility inquiry

$
0
0

Part Number:BQ27411-G1

Hi TI,

I would like to check the communication status (sbs) and so on by using bqstudio, but I can not confirm it because there is no bq27411 final bqz file.
If it is 0421_1_09_A0-bq27411G1C.bqz, which is currently held, an error such as the attachment is generated.

Thank you.

BQ27411-G1: bqstudio compatibility inquiry

$
0
0

Part Number:BQ27411-G1

Hi TI,

I would like to check the communication status (sbs) and so on by using bqstudio, but I can not confirm it because there is no bq27411 final bqz file.
If it is set to 0421_1_09_A0-bq27411G1C.bqz, which is currently held, an error such as the attachment will occur.

Requests :
1. Request the file 0421_1_09_B0-bq27411G1D.bqz.
2. Please check the version of bqstudio to prevent errors such as attachment when executing bqstudio with 0421_1_09_B0-bq27411G1D.bqz.

Thank you.

BQ27542EVM: Learning Cycle Issues - High Capacity Result

$
0
0

Part Number:BQ27542EVM

Hello,

     I am attempting a learning cycle on a 3350mAh 18650 cell.  I am using the BQ27542EVM and the BQ27GDK000EVM.  

     I configured the .gg file and ran the calibration.  Following the learning cycle the resultant capacity was 31,808 mAh, an order of magnitude higher.  I've run it twice with the same result.

     Let me know if there is any other helpful information I can provide.  

Thanks

Craig

Compiler/EV2400: bq78350

$
0
0

Part Number:EV2400

Tool/software: TI C/C++ Compiler

hi, MSP430 is broken in EV2400, I've replaced the broken MSP430,  How to brush firmware? Thanks.

Viewing all 35901 articles
Browse latest View live


Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>