This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F2274-EP: excessive current draw at low negative temperatures

Part Number: MSP430F2274-EP

I am working on an msp430f2274-ep where we need to be able to run down at -40 and -50C.   When testing the 2274 in a chamber on a small demo board (modified ez430-rf2500 stripped down to only msp430 and a 32.768Khz xtal) we start getting a current ramp around -15C that continues upwards as we cool.  See graph below for data point plotting.  We are using a keysight B2901 for current measurements and a 34792A DAQ to record temperature right on the outside of the package  (K type thermocouple taped to the top of the msp430 with kapton tape)

We tried a board without conformal coat and one with conformal coat, no change in current draw.  This happens across the multiple samples we have built up.

What test artifacts (testing, code, results) does TI have to support the LPM3 current draw maximum of 1.5uA down to -55C as stated in the datasheet?

What might we be doing wrong, either with the XTAL or VLO (we have tried both) that is causing this problem?

The code we are using is as follows:

#include "msp430.h"

void configWDT();
void configClocks();
void configGPIO();

static volatile char mode_set;

void main(void)
{                                           //Configuration routines
    configWDT();                            //Watchdog Timer+ Registers
    configGPIO();                           //General purpose pin io registers
    configClocks();                         //Basic Clock Module+ Registers

    mode_set = 0;

    while(1)
    {
        if(mode_set == 0)
            __bis_SR_register(LPM3_bits + GIE);     // Enter Low Power Mode 3 (LPM3) w/interrupt

        else if(mode_set == 1)
            __bis_SR_register(GIE);
    }
}

void configWDT(void)
{
    WDTCTL = WDTPW + WDTHOLD;   // Disable the watchdog timer.
                                // WDTPW        (bits 15 to 8)  = 5Ah.  WDT password.
                                // WDTHOLD      (bit 7)         = 1h.   Disables the WDT.
}


void configClocks()
{
    /* original clock functionality with XTAL and external crystal oscillator */
    //DCOCTL = 0x00;
    //BCSCTL1 = XT2OFF + DIVA_3;
    //BCSCTL2 = SELM_3 + DIVM_3;
    //BCSCTL3 = XCAP_3;

    /* clock functionality with VLO */
    DCOCTL = 0x00;
    BCSCTL1 = XT2OFF + DIVA_3;
    BCSCTL2 = SELM_3 + DIVM_3 + SELS;
    BCSCTL3 = LFXT1S_2 + XCAP_3;
}

void configGPIO(void)       // GPIO Register configuration
{
    //P1
    P1OUT = 0xFF;
    P1DIR = 0x00;
    P1SEL = 0x00;

    P1REN = BIT2;          // P1.2 Enable Pullup/Pulldown
    P1OUT = BIT2;          // P1.2 pullup
    P1IE = BIT2;           // P1.2 interrupt enabled
    P1IES = BIT2;          // P1.2 Hi/lo falling edge
    P1IFG = 0x00;

    //P2
    P2DIR = BIT0;
    P2OUT = 0x00;
    P2SEL = 0xC0;
    P2IE = 0x00;
    P2IES = 0x00;
    P2IFG = 0x00;

    //P3
    P3OUT = 0x00;
    P3DIR = 0xFF;

    //P4
    P4OUT = 0x00;
    P4DIR = 0xFF;
}


// Port 1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
    P2OUT ^= BIT0;
    P2IFG &= ~BIT0;
    P1IFG = 0x00;                             // P1.2 IFG cleared

    mode_set = P2OUT;
    __bic_SR_register_on_exit(LPM3_bits);
}

  • I'm not sure if I understand your graph.
    What are the blue and the red lines?
    Where is the power consumption plotted?
    I also don't see the mentioned code.

    Lukas
  • The red line is currrent draw, the blue line is temperature.  Code seemed not to stick, lets try that again!

    #include "msp430.h"
    
    void configWDT();
    void configClocks();
    void configGPIO();
    
    static volatile char mode_set;
    
    void main(void)
    {                                           //Configuration routines
        configWDT();                            //Watchdog Timer+ Registers
        configGPIO();                           //General purpose pin io registers
        configClocks();                         //Basic Clock Module+ Registers
    
        mode_set = 0;
    
        while(1)
        {
            if(mode_set == 0)
                __bis_SR_register(LPM3_bits + GIE);     // Enter Low Power Mode 3 (LPM3) w/interrupt
    
            else if(mode_set == 1)
                __bis_SR_register(GIE);
        }
    }
    
    void configWDT(void)
    {
        WDTCTL = WDTPW + WDTHOLD;   // Disable the watchdog timer.
                                    // WDTPW        (bits 15 to 8)  = 5Ah.  WDT password.
                                    // WDTHOLD      (bit 7)         = 1h.   Disables the WDT.
    }
    
    
    void configClocks()
    {
        /* original clock functionality with XTAL and external crystal oscillator */
        //DCOCTL = 0x00;
        //BCSCTL1 = XT2OFF + DIVA_3;
        //BCSCTL2 = SELM_3 + DIVM_3;
        //BCSCTL3 = XCAP_3;
    
        /* clock functionality with VLO */
        DCOCTL = 0x00;
        BCSCTL1 = XT2OFF + DIVA_3;
        BCSCTL2 = SELM_3 + DIVM_3 + SELS;
        BCSCTL3 = LFXT1S_2 + XCAP_3;
    }
    
    void configGPIO(void)       // GPIO Register configuration
    {
        //P1
        P1OUT = 0xFF;
        P1DIR = 0x00;
        P1SEL = 0x00;
    
        P1REN = BIT2;          // P1.2 Enable Pullup/Pulldown
        P1OUT = BIT2;          // P1.2 pullup
        P1IE = BIT2;           // P1.2 interrupt enabled
        P1IES = BIT2;          // P1.2 Hi/lo falling edge
        P1IFG = 0x00;
    
        //P2
        P2DIR = BIT0;
        P2OUT = 0x00;
        P2SEL = 0xC0;
        P2IE = 0x00;
        P2IES = 0x00;
        P2IFG = 0x00;
    
        //P3
        P3OUT = 0x00;
        P3DIR = 0xFF;
    
        //P4
        P4OUT = 0x00;
        P4DIR = 0xFF;
    }
    
    
    // Port 1 interrupt service routine
    #pragma vector=PORT1_VECTOR
    __interrupt void Port_1(void)
    {
        P2OUT ^= BIT0;
        P2IFG &= ~BIT0;
        P1IFG = 0x00;                             // P1.2 IFG cleared
    
        mode_set = P2OUT;
        __bic_SR_register_on_exit(LPM3_bits);
    }
    

  • Hi Charles,

    I just took a random F2274 unit and measured the current consumption by using your code (VLO).
    I see over your temperature range a value of 0.6uA matching very well with the Datasheet.
    It seems to be an issue with your setup.
    I see you have P1 defined as input and set P1OUT to high, without enabling P1REN.
    What's the intention here?
    Also P2 is set to input.
    Can you define all pins to output low and measure the current again?

    Best regards
    Lukas
  • Hi Lukas,

    Thanks for the quick response.  Did you go to -35C?  Until we get down to -10 or -15, the current is stable, then it goes up (as the graph shows).   However at room temp, of course, current draw is fine.

    Was this on a F2274-EP device?  Can you run down to -55C and if its possible provide a current draw graph?   How are you monitoring the current draw?

    P1 has a button attached so we can simulate an interrupt if we wish to do so and exit LPM3.

    P2 I think the intent was to just set P2.0 for input, not all the ports.

    To make sure I understand:

    Set P1,P2,P3 and P4 ports to output (PxDIR = 0xFF)  x=1 to 4 and set PxREN = 0x00 

    Reading the datasheet it said unused pins should be pulled high, why set them to low??  

    Another engineer had worked on this code primarily, so I am going through and sorting this out.  

    Thank you,

    Charles

  • Hi Charles,

    I measured the current down to -55C, there was no change.

    The graph would look like a straight line at 0.6 uA.

    I put an Amperemeter between the power supply and the DVCC pin.

    If you set them to output, you don't need to take care about PxREN, correct set PxDIR to 0xFF, exxcept the button and the LED.

    You can also as alternative set them as input (PxDIR = 0x00) and enable Pull up resistor PxREN = 0xFF and PxOUT =0xFF.

    Do you see this on every unit? How many have you tested so far?

    Lukas

**Attention** This is a public forum