Community Translation - Em_EEPROM Component Read Function Stuck in Infinite Loop - KBA227502

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

cross mob
MotooTanaka
Level 9
Level 9
Distributor - Marubun (Japan)
First comment on blog Beta tester First comment on KBA

Hi,

I'd like to translate KBA227502 into Japanese.

moto

Original KBA: KBA227502

Em_EEPROM Component Read Function Stuck in Infinite Loop - KBA227502

Translated by: MoTa_728816

==============================

タイトル: Em_EEPROM コンポーネントのリード関数が無限ループにとどまってしまう問題 - KBA227502

ヴァージョン: **

状況:

PSoC® Creator™ 4.2 のプロジェクトで PSoC 3, PSoC 4, PSoC 5LP, PSoC 6 MCU デバイス用に Em_EEPROM コンポーネント v2_0, v2_10, V2_20 を 使用している場合。

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

問題:

Em_EEPROM コンポーネントが書込み処理をしているときに、想定外のリセットや電源喪失が発生した場合、Em_EEPROM_Read() や Cy_Em_EEPROM_Read() 関数を使用した処理が次の電源投入時に無限ループにとどまってしまう場合があります。

原因:

この問題はリード(Read)関数内のループの構成に起因します。無限ループが発生するのは不完全なフラッシュ書き込み処理によって、em_eeprom ヘッダーセクションのシーケンス番号 (変数 seqNum)が 0xFFFFFFFF に設定された場合に限られます。

ワークアラウンド:

以下のワークアラウンドを使用することによりこの問題を解決することが出来ます。

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 ファイル内の Cy_Em_EEPROM_Read() 関数を下記のように変更してください。

注意:PSoC 6 MCU 用のコードを変更する場合、エディタプログラムを管理者権限で実行する必要があります。

下記のコードを特定してください:

        if((CY_EM_EEPROM_SUCCESS == ret) && (0u != seqNum))

        {

numRowReads = (context->numberOfRows <= seqNum) ? (context->numberOfRows) : (seqNum);

numRowReads--;

            for(i = (seqNum - numRowReads); i <= seqNum; i++)

            {

startRowAddr = GetRowAddrBySeqNum(i, context);

                if (0u != startRowAddr)

                {

                    ...

上記で見つけたコードをワークアラウンドを含む下記のコードと置き換えてください。

        if((CY_EM_EEPROM_SUCCESS == ret) && (0u != seqNum))

        {

numRowReads = (context->numberOfRows <= seqNum) ? (context->numberOfRows) : (seqNum);

            for(i = 0; i < numRowReads; i++)

            {

startRowAddr = GetRowAddrBySeqNum(seqNum - ((numRowReads - 1) - i), context);

                if (0u != startRowAddr)

                {

                    ...

==============================

27-Apr-2020

moto

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

Hello, Tanaka-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:

>下記のコードを特定してください:

<下記のコードを見つけます:

Thanks,

Kenshow

7-Nov-2020