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

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

cross mob
HiOm_1802421
Level 5
Level 5
Distributor - Marubun (Japan)
50 replies posted 50 questions asked 25 replies posted

Hi,

I tried to translate this KBA228412 into Japanese.

Storing Information in Flash and Recovering After Reset in PSoC 4 Devices – KBA228412

==========

タイトル:PSoC 4デバイスでのフラッシュへの情報保存とリセット後の復旧 - 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 を参照してください。

==========

BR,

Omoi

0 Likes
2 Replies
JennaJo
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hello, Omoi-san

We receive your translation, it will be published to KBA to Community.

After upload, You will receive the points as the word of KBA.

Due to the current delay of processed work, Please bear with me for the delayed the response.

It could be delayed, but it will be processed soon.

Thanks for your contribution to CDC!

Will keep you update the status.

Thanks,

Jenna Jo

Jenna Jo
0 Likes
Kenshow
Level 8
Level 8
Distributor - Marubun (Japan)
50 solutions authored 25 solutions authored 10 solutions authored

Hi Jenna-san,

I have done 2nd review.

I picked up the part that would be fixed as follows:

>3 EEPROMコンポーネントを使用し、EEPROM APIを使用してその位置へ書き込む

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

>注意:使用しているデバイスによっては、全3オプションは利用出来ない場合があります。

<注意:使用しているデバイスによっては、3つのオプションすべては利用出来ない場合があります。

 

Thanks,

Kenshow

7-Nov-2020

0 Likes