冗長コピーから復元したときのEm_EEPROM コンポーネント読み出し関数の誤データ返送 - KBA227530 - Community Translated (JA)

Version 4

    Community Translated by  YoOb_1790021          Version: **

     

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

     

    内容:

    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);

    }

    ...