PSoC 6 MCUのブロッキングおよびフラッシュオペレーションの部分的なブロッキングに関する制約 – KBA230568 - Community Translated (JA)

Version 2

    Community Translated by NoTa_4591161 Expert          Version: **

     

    Translation - English: Constraints on PSoC 6 MCU Blocking and Partially Blocking Flash Operations – KBA230568

     

     

    SoC 6 MCUの場合、ユーザーフラッシュの書き込み操作はセクター単位で実行され、ブロッキングまたは部分的ブロッキングとして実行される場合があります。

    ブロッキング

    この場合、書き込み中はフラッシュブロック全体を使用できません。したがって、その間は(バスマスターからの)フラッシュアクセスは発生しません。CPUの実行はSRAMから実行できます。すべてのプリフェッチを無効にする必要があります。フラッシュからのアプリケーションコードの実行は、両方のコアのフラッシュ書き込み期間中ブロックされます。

    フラッシュ操作のブロックに関する制約

    1. フラッシュへの書き込み中は、デバイスをリセットしないでください(XRESピン、ソフトウェアリセット、ウォッチドッグなど)。フラッシュの一部に予期しない変更が加えられる可能性があります。

    2. 低電圧検出回路は、リセットではなく割り込みを生成するように構成する必要があります。

    3. フラッシュ書き込み操作は、次のCM4状態のいずれかでのみ許可されます。

    a. CM4はアクティブで初期化されています:
    Cy_SysEnableCM4(CY_CORTEX_M4_APPL_ADDR)
    を呼び出します。注:必要に応じて、Cy_SysEnableCM4()を呼び出した後、いつでもCM4コアをディープスリープにすることができます。

    b. CM4はオフです:
    Cy_SysDisableCM4()
    を呼び出します。注:この状態では、デバッグモードはサポートされていません。

    4. ULP(コア電圧0.9 V)モードではフラッシュ書き込みはできません。

    5. 両方のアクティブなコアで割り込みを有効にする必要があります。フラッシュ操作中はクリティカルセクションに入らないでください。

    6. システムパイプ割り込み(IPC割り込み3および4)の優先度が最も高いか、少なくともパイプ割り込みが700 µsを超えて割り込みまたは保留状態にならないようにする必要があります。

    7. フラッシュ書き込み操作中は、CM0+CM4DMAおよび暗号)以外のバスマスターがフラッシュ読み取り操作を実行してはなりません。

    8. デフォルトのスタートアップを使用しない場合は、フラッシュの書き込み/消去操作の前に次の手順を実行してください。

     

    /* 1. システム操作用のIPCセマフォの割り当てと初期化 */

    static uint32_t ipcSemaArray [CY_IPC_SEMA_COUNT / CY_IPC_SEMA_PER_WORD];

     

    (void) Cy_IPC_Sema_Init(CY_IPC_CHAN_SEMA, CY_IPC_SEMA_COUNT, ipcSemaArray);

     

    /* 2. エンドポイント構造の配列を作成し、IPCパイプインフラストラクチャを構成します */

    static cy_stc_ipc_pipe_ep_t ipcPipeEpArray [CY_IPC_MAX_ENDPOINTS];

     

    Cy_IPC_Pipe_Config(ipcPipeEpArray);

     

    /* 3. クライアントコールバックの配列を作成し、コンフィグレーションの構造体によってシステムパイプを初期化します */

    static cy_ipc_pipe_callback_ptr_t sysIpcPipeCbArray [CY_SYS_CYPIPE_CLIENT_CNT];

     

    static const cy_stc_ipc_pipe_config_t systemIpcPipeConfig =

        {

    /* .ep0ConfigData */

    {

    /* .ipcNotifierNumber */ CY_IPC_INTR_CYPIPE_EP0,

    /* .ipcNotifierPriority */ CY_SYS_INTR_CYPIPE_PRIOR_EP0,

    /* .ipcNotifierMuxNumber */ CY_SYS_INTR_CYPIPE_MUX_EP0,

    /* .epAddress */ CY_IPC_EP_CYPIPE_CM0_ADDR,

    /* .epConfig */ CY_SYS_CYPIPE_CONFIG_EP0

    },

    /* .ep1ConfigData */

    {

    /* .ipcNotifierNumber */ CY_IPC_INTR_CYPIPE_EP1,

    /* .ipcNotifierPriority */ CY_SYS_INTR_CYPIPE_PRIOR_EP1,

    /* .ipcNotifierMuxNumber */ 0u,

    /* .epAddress */ CY_IPC_EP_CYPIPE_CM4_ADDR,

    /* .epConfig */ CY_SYS_CYPIPE_CONFIG_EP1

    },

    /* .endpointClientsCount */ CY_SYS_CYPIPE_CLIENT_CNT,

    /* .endpointsCallbacksArray */ sysIpcPipeCbArray,

    /* .systemPipeIsrHandler */ &SysIpcPipeIsr

        };

     

    Cy_IPC_Pipe_Init(&systemIpcPipeConfig);

     

    /* 4. 最後にフラッシュを初期化します */

    Cy_Flash_Init();

     

    /* すべてのMCUコアでこれらの手順を必ず実行してください */

     

    部分的にブロック

    この方法では、フラッシュアクセス中の時間枠がはるかに短くなり、許可されません。フラッシュからのアプリケーションコードの実行は、両方のコアのフラッシュ書き込み期間の一部でのみブロックされます。ブロック期間は、使用するAPIシーケンスによって異なります。

    フラッシュ操作を部分的にブロックすることに関する制約

    1. フラッシュへの書き込み中は、デバイスをリセットしないでください(XRESピン、ソフトウェアリセット、ウォッチドッグなど)。フラッシュの一部に予期しない変更が加えられる可能性があります。

    2. 低電圧検出回路は、リセットではなく割り込みを生成するように構成する必要があります。

    3. フラッシュへの書き込み中、アプリケーションコードはクロック設定を変更してはなりません。使用Cy_Flash_IsOperationComplete()フラッシュライト動作が終了されることを保証します。

    4. フラッシュへの書き込み中、アプリケーションコードはクロック測定を開始しないでください(Cy_SysClk_StartClkMeasurementCounters()を呼び出さないでください)。

    5. フラッシュ書き込み操作は、次のCM4状態のいずれかでのみ許可され  ます。C

    a. CM4はアクティブで初期化されています:
         Cy_SysEnableCM4(CY_CORTEX_M4_APPL_ADDR)
    を呼び出します。注:必要に応じて、Cy_SysEnableCM4()を呼び出した後、いつでもCM4コアをディープスリープにすることができます。
      b. CM4
    はオフです:
           Cy_SysDisableCM4()
    を呼び出します。注:この状態では、デバッグモードはサポートされていません。

    6. セクターによる分割には、次のルールを使用します。(このコンテキストでの読み取りとは、バスマスターの読み取りを意味します:CM0+CM4DMACryptoなど)

    a. 同じフラッシュセクターに対して同時に書き込みと読み取り/実行を行わないでください。これはすべてのセクターに当てはまります。
    b.
    ユーザーフラッシュでの書き込みルール:
         I.
    すべてのバスマスターは、UFLASH S2またはS3へのフラッシュ書き込み中にUFLASH S0および/またはS1から読み取り/実行できます。
         II.
    すべてのバスマスターは、UFLASH S0またはS1へのフラッシュ書き込み中に、UFLASH S2および/またはS3から読み取り/実行できます。
    提案:ブートローディングの場合、CM4のコードをS0またはS1に配置します。CM0 +コードはS0にあります。S2およびS3セクションにデータを書き込みます。

    7. ULPモード(コア電圧0.9 V)ではフラッシュ書き込みを実行できません。

    8. 両方のアクティブなコアで割り込みを有効にする必要があります。フラッシュ操作中はクリティカルセクションに入らないでください。

    9. システムパイプ割り込み(IPC割り込み3および4)の優先度が最も高いか、少なくともパイプ割り込みが700 µsを超えて割り込みまたは保留状態にならないようにする必要があります。

    10. フラッシュ書き込み操作中は、CM0 +CM4DMAおよび暗号)以外のバスマスターがフラッシュ読み取り操作を実行してはなりません。

    11. デフォルトのスタートアップを使用しない場合は、フラッシュの書き込み/消去操作の前に次の手順を実行してください。

     

    /* 1. システム操作用のIPCセマフォの割り当てと初期化 */

    static uint32_t ipcSemaArray [CY_IPC_SEMA_COUNT / CY_IPC_SEMA_PER_WORD];

     

    (void) Cy_IPC_Sema_Init(CY_IPC_CHAN_SEMA, CY_IPC_SEMA_COUNT, ipcSemaArray);

     

    /* 2. エンドポイント構造の配列を作成し、IPCパイプインフラストラクチャを構成します*/

    static cy_stc_ipc_pipe_ep_t ipcPipeEpArray [CY_IPC_MAX_ENDPOINTS];

     

    Cy_IPC_Pipe_Config(ipcPipeEpArray);

     

    /* 3. クライアントコールバックの配列を作成し、構成構造によってシステムパイプを初期化します*/

    static cy_ipc_pipe_callback_ptr_t sysIpcPipeCbArray [CY_SYS_CYPIPE_CLIENT_CNT];

     

    static const cy_stc_ipc_pipe_config_t systemIpcPipeConfig =

        {

    /* .ep0ConfigData */

    {

    /* .ipcNotifierNumber */ CY_IPC_INTR_CYPIPE_EP0,

    /* .ipcNotifierPriority */ CY_SYS_INTR_CYPIPE_PRIOR_EP0,

    /* .ipcNotifierMuxNumber */ CY_SYS_INTR_CYPIPE_MUX_EP0,

    /* .epAddress */ CY_IPC_EP_CYPIPE_CM0_ADDR,

    /* .epConfig */ CY_SYS_CYPIPE_CONFIG_EP0

    },

    /* .ep1ConfigData */

    {

    /* .ipcNotifierNumber */ CY_IPC_INTR_CYPIPE_EP1,

    /* .ipcNotifierPriority */ CY_SYS_INTR_CYPIPE_PRIOR_EP1,

    /* .ipcNotifierMuxNumber */ 0u,

    /* .epAddress */ CY_IPC_EP_CYPIPE_CM4_ADDR,

    /* .epConfig */ CY_SYS_CYPIPE_CONFIG_EP1

    },

    /* .endpointClientsCount */ CY_SYS_CYPIPE_CLIENT_CNT,

    /* .endpointsCallbacksArray */ sysIpcPipeCbArray,

    /* .systemPipeIsrHandler */&SysIpcPipeIsr

        };

    Cy_IPC_Pipe_Init(&systemIpcPipeConfig);

    /* 4. 最後にフラッシュを初期化します */

    Cy_Flash_Init();

    /* すべてのMCUコアでこれらの手順を必ず実行してください */