PSoC 4デバイスでのフラッシュへの情報保存とリセット後の復旧 - KBA228412- Community Translated (JA)

Version 1

    Community Translated by  HiOm_1802421          Version: **

     

    Translation - English: Storing Information in Flash and Recovering After Reset in PSoC 4 Devices – KBA228412

     

    アプリケーションでWDTリセットが発生した回数をカウントするなど、ハードリセットやソフトリセットなどのリセット発生後に、幾つかのデータを復旧させる必要がある状況になる事があります。これはフラッシュへ情報を保存する事で出来ます。必要なユーザーデータがフラッシュに保存されている場合、内容はリセット後も保持されます。

    フラッシュへ情報を保存する方法は3つあります。

    1. リンカスクリプトにフラッシュのカスタム配置を定義し、フラッシュ書き込みAPIを使用してその領域へ書き込む。
    2. ユーザーSflash領域を使用する
    3. EEPROMコンポーネントを使用し、EEPROM APIを使用してその位置へ書き込む

     

    注意:使用しているデバイスによっては、全3オプションは利用出来ない場合があります。詳細はデバイスのデータシートを参照してください。

    次の例は、WDTリセットが発生した回数をカウントし、カウント値をフラッシュ領域へ保存する方法を示します。

     

    オプション1:リンカスクリプトにカスタム配置を定義

    リンカスクリプトを変更して、フラッシュ領域にカスタム配置を定義して変数を保存する方法は、アプリケーションノート AN89610 - PSoC® 4 and PSoC 5LP Arm® Cortex® Code Optimization を参照してください。

     

    次のコードスニペットを使用して、WDTリセットイベントを検出し、カウント変数を+1増加します。

     

      /* To store the reset count */

      volatile uint8 resetCounter CY_SECTION(".MY_Section1");

      uint8 WDT_Count[128];

      uint8 resetReason;

      main()

      {

      CyGlobalIntEnable;

      resetReason = CySysGetResetReason(CY_SYS_RESET_WDT|CY_SYS_RESET_PROTFAULT|CY_SYS_RESET_SW);

      if(resetReason == CY_SYS_RESET_WDT)

      {

      WDT_Count[0] = resetCounter + 1;

      returnVal = CySysFlashWriteRow(160u,WDT_Count); //Flash write can be done as only row operations.

      }

     

    オプション2:ユーザーSflash領域を使用する

    一部のPSoC 4デバイスは、ユーザーデータの保存に使用できる専用Sflash領域をサポートしています。

    Sflash領域を使用してユーザーデータを保存するには、次のコードを使用します。

     

      uint8_t buff[CY_SFLASH_SIZEOF_USERROW];

      uint8_t *mySFlash = (uint8_t*) CY_SFLASH_USERBASE;

      resetReason = CySysGetResetReason(CY_SYS_RESET_WDT|CY_SYS_RESET_PROTFAULT|CY_SYS_RESET_SW);

      if(resetReason == CY_SYS_RESET_WDT)

      {

          buff[0] = 1 + mySFlash[0];

          CySysSFlashWriteUserRow(ROW_NUMBER,buff)

          CyDelay(FLASH_WRITE_DELAY)

      }

     

    フラッシュ書き込みAPIの詳細は、PSoC 4 System Reference Guide を参照してください。

     

    オプション3:EEPROMコンポーネントを使用し、EEPROM APIを使用してその場所へ書き込む

    このアプローチはオプション2と同じですが、異なるAPIを使用します。アプリケーションでEEPROMを使用するには、オプション2のコードスニペットとコード例 CE195313 - PSoC Emulated EEPROM を参照してください。