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

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

cross mob
YoOb_1790021
Level 5
Level 5
Distributor - Marubun (Japan)
First solution authored 10 likes received 10 likes given

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

0 Likes
1 Reply
JennaJo
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hello, Obana-san

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

It will be reviewed internally.

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

Due to the current volume of works, 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