Community Translation - Detecting BOD Reset in PSoC 4 – KBA228415

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
MotooTanaka
Level 9
Level 9
Distributor - Marubun (Japan)
First comment on blog Beta tester First comment on KBA

Hi,

I'd like to try translating this KBA228415

moto

Original KBA: KBA228415

Detecting BOD Reset in PSoC 4 – KBA228415

Translated by: MoTa_728816

=================

タイトル: PSoC 4 で BOD Reset を検出する - KBA228415

BOD (ブラウンアウトディテクト) 回路は電源電圧が危険な可能性がある状態のときにデバイスにリセットを作動させて動作の保護やロジックの保持を行います。BOD 回路は VCCD を監視して、もし電圧レベルが安全な動作を行うための最小 VCCD 電圧よりも下がった場合にリセットを発生させます。システムは再び電源電圧が有効になるまではリセットを解除しません。BOD のイベントによっては、VCCD は最小ロジック動作電圧よりも下がってはいますが、最小ロジック保持電圧よりも高いところで留まる場合があります。

もし VCCD が最小ロジック動作電圧より下がり、しかし最小ロジック保持電圧を割っていない場合、BOD リセットが発生します;しかしレジスタの値は保持されます。もし VCCD が最小ロジック動作電圧と最小保持電圧のどちらよりも下がった場合、レジスタ値が保持されない BOD リセットが発生します。このレジスタ値の保持はスペシャルレジスタ、PWR_BOD_KEY を使用して検出することが可能です。PWM_BOD_KEY レジスタの値はファームウェアからの書込みか非保持 BOD リセット、XRES、POR のような非保持リセットイベントが発生した場合だけ変更されます。

ブラウンアウトリセットはアプリケーションに以下のコードを追加することで検出することが可能です。

int Check_BOD(void)

{

    // CYREG_PWR_BOD_KEY レジスタの現在の値をチェックする

    uint32 key = CY_GET_REG32(CYREG_PWR_BOD_KEY);

  

    // CYREG_PWR_BOD_KEY レジスタを 0x3A71 にセットする

    CY_SET_REG32(CYREG_PWR_BOD_KEY,0x3A71);

  

    // もし key が 0x3A71 であれば, プログラムはブラウンアウトによってリセットされたことが示される

    return (key == 0x3A71);

}

int main (void)

{

    if(Check_BOD())

    {

        //BOD Detected.

    }

  

    for(;;)

    {

        /* Place your application code here. */

    }

}

しかし、CYREG_PWR_BOD_KEY はハイバネートからの復帰でも保持されています。そのため、リセットコンディションもチェックする必要があります。

ハイバネートによるリセットコンディションは

     CySysPmGetResetReason() == CY_PM_RESET_REASON_WAKEUP_HIB

を使用してチェックできます。

もしこのコンディションが TRUE を返えした場合、それはリセットの原因がハイバネートであり、BOD をチェックする必要はないことを示します。

参考資料:

  1. PSoC 4100/4200 Family PSoC® 4 Architecture TRM
  2. PSoC 4100/4200 Family PSoC 4 Registers TRM (Technical Reference Manual)

=================

27-Mar-2020

moto

0 Likes
2 Replies