1 Reply Latest reply on Apr 21, 2020 6:29 PM by JuyoungJ_06

    Community Translation - Em_EEPROM Component Read Function Returns Incorrect Data when Restored from a Redundant Copy - KBA227530

    YoOb_1790021

      Hi,

       

      I tried to translate this KBA227530 into Japanese.

       

      Em_EEPROM Component Read Function Returns Incorrect Data when Restored from a Redundant Copy - KBA227530

      https://community.cypress.com/docs/DOC-17630

      ----------------------------------

      タイトル:冗長コピーから復元したとき、Em_EEPROM コンポーネントの読み取り関数が誤ったデータを返す

       

      内容:

      PSoC® 3、PSoC 4、PSoC 5LP、または PSoC 6 MCUデバイス用の Em_EEPROM コンポーネント v2_0、v2_10 または v2_20 を使っている PSoC Creator™ 4.2 プロジェクト。

       

      PSoC 6 MCUのエミュレートEEPROMのミドルウェアを使用する psoc6sw-1.0 または psoc6sw-1.1 ライブラリを使っている ModusToolbox™ IDE プロジェクト。

       

      問題:

      冗長コピーが有効で、冗長コピーからデータが復元されると、Em_EEPROM_Read() および Cy_Em_EEPROM_Read() 関数は、Em_EEPROM にデータを復元しますが、

      結果として誤ったデータを返します。2番目の読み取り操作では、Em_EEPROM から正しいデータを返します。

       

      原因:

      この問題は、ポインタ演算のエラーが原因で発生します - 合算演算は、タイプの異なる2つのオペランド(uint32_t * とuint32_t)で実行されるため、予測できない演算結果が生じます。

       

      解決方法:

      次の回避策を使用して問題を修正できます:

       

      1.cy_em_eeprom.c ファイルを探し出して、そのバックアップを作成します。PSoC ファミリとコンポーネントのバージョンに応じて、このファイルは次のディレクトリにあります:

       

           PSoC Creator 4.2:PSoC 3, PSoC 4, 或いは、PSoC 5LP:

           a. Em_EEPROM v2_10

           C:\Users\<Username>\Documents\PSoC Creator\4.2\Downloads ( 4.2).cylib\Em_EEPROM_Dynamic_v2_10\API\cy_em_eeprom.c

       

           b. Em_EEPROM v2_20

           C:\Users\<Username>\Documents\PSoC Creator\4.2\Downloads ( 4.2).cylib\Em_EEPROM_Dynamic_v2_20\API\cy_em_eeprom.c

       

           PSoC Creator 4.2 かつ PSoC 6 MCU:

           a. PDL 3.0.4

           C:\Program Files (x86)\Cypress\PDL\3.0.4\middleware\em_eeprom\cy_em_eeprom.c

       

           b. PDL 3.1.0

           C:\Program Files (x86)\Cypress\PDL\3.1.0\middleware\em_eeprom\cy_em_eeprom.c

       

           ModusToolbox かつ PSoC 6 MCU:

           a. ModusToolbox v1.0

           <user_home>\ModusToolbox_1.0\libraries\psoc6sw-1.0\components\psoc6mw\em_eeprom\cy_em_eeprom.c

       

           b. ModusToolbox v1.1

           <user_home>\ModusToolbox_1.1\libraries\psoc6sw-1.1\components\psoc6mw\em_eeprom\cy_em_eeprom.c

       

      2.cy_em_eeprom.c ファイルの CheckCrcAndCopy() 関数コードを更新します。

       

      注意:PSoC Creator および PSoC 6 MCU のコード更新を実行するには、管理者権限でエディタ ソフトウェアを実行します。

      次のコードを探し出します:

      if(CY_EM_EEPROM_SUCCESS == ret)

      {

         (void)memcpy((void *)(dstAddr), (void *)(writeRamBuffer + rowOffset), numBytes);

      }

      ...

       

      上記のコードを回避策を含む次のコードに置き換えます:

      if(CY_EM_EEPROM_SUCCESS == ret)

      {

          (void)memcpy((void *)(dstAddr), (void *)((uint32_t)writeRamBuffer + rowOffset), numBytes);

      }

      ...

       

      ----------------------------------

       

      Best regards,

      obana