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.

MSP430 4xxxと2xxxシリーズ  BOR起動の留意点

Expert 6930 points

Replies: 0

Views: 746

1 トラブルの原因

 ・ BOR解除されるVCC電圧は、有効なVCC電圧より低いので、即座に稼働させると不具合を起こすリスクが
  有ります。 特に、BOR解除後にすぐにMCLKをupするとトラブルのリスクが高くなります。

・ クリスタルを利用する場合は、100ms前後の発振安定待ちが有るので、この間に有効VCCに上昇すれば
  トラブルにはなりません。
・ しかし、クリスタルでなくVLOCLKを使うと、この待ち時間がないので対策が必要になります。

・ PMM(SVS)機能が有るデバイスでは、SVSを有効にすることで対処できます。
  data-sheetでSVS機能内蔵か確認してください。

**  FR2xxx/FR4xxxは、defaultでSVS有効ですので、このトラブルは該当しません。**

 

2 PMM/SVS機能がないデバイス

1) 外部にreset回路を設ける

・ 有効電圧以上になったらreset解除します。

2) 時間を稼ぐ

・ BOR解除から有効電圧になる時間をdelayで遅らせます。
  電源の立ち上がり特性を測定して、必要なdelay時間をWDT holdの後に挿入します。

WDTCTL = WDTPW + WDTHOLD;                           // Stop WDT
_delay_cycles( 1000 );                                       // delay 1ms

 

3 PMM/SVS機能内蔵のデバイス

・ SVSが有効になったのを確認してから、SVSCTLにVLDx電圧を設定します。
・ 供給VCC電圧がVLDxより低いとPORで停止し、VLDxを超えるとPOR解除され再起動されます。

・ 電源がふらついて上昇する場合は、下記に添付してあるcodeを参考にしてください。
   MSP430 F5/F6シリーズ VCCのdrop検出などに使用できるPMM機能の解説

・ 電源が素直に上昇する場合は、下記のcodeで評価してください。
  P1.0にSVS有効性判定のパルスが出ます。
  その後でVCC電圧が低いと、下記のように途中でPORが起きて再起動がかかります。


参考code

#include  <msp430.h>
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  // configure pins
  P1DIR |= BIT0; P1SEL &= ~BIT0; P1OUT |= BIT0;   // Set P1.0 LED on
  // configure ACLK = VLO
  BCSCTL3 = LFXT1S_2;
  P1OUT &= ~BIT0;                          // LED off
  // ****** checking SVSON *********
   do {
      SVSCTL = VLDON;                       // set SVS_VLD= 1.9V
      P1OUT ^= BIT0;                        // flashing LED
   //   _delay_cycles( 100 );                 // delay 100us
   } while ((SVSCTL & SVSON) == 0);
  // ** end of checking ***********

  // ***** if VCC < 2.8V, cause POR *******
  SVSCTL = VLD3;                            // set SVS_VLD= 2.8V
  // _delay_cycles( 1000 );                 //   Note 1
  SVSCTL |= PORON; 

 // Power up 2.8V over
  while(1)
  {
      P1OUT ^= BIT0;                              // LED flashing
      _delay_cycles( 100000 );
  }

//  while (1);
}

Note 1: PORが起きるのを防ぐには、delayを入れて電源の立ち上がりを待ちます。 

本スレッドは開示のみです。
ご質問は、カスタマーサポートセンタ(CSC)へお問い合わせください。

Kazuo Yamauchi