- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear Sirs and Madams,
I would like to translate KBA91483, please confirm to my work.
Procedure to Fetch Contents from Every Flash Location in PSoC®4 – KBA91483
Regards,
Masashi
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, Masashi-san
Confirm to work this KBA.
Thanks
Jenna
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Jenna-san,
I translated KBA91483 into Japanese.
We would appreciate it if you could confirm.
Regards,
Masashi
/***************************************************************************/
Procedure to Fetch Contents from Every Flash Location in PSoC®4 – KBA91483
PSoC®4のすべてのフラッシュロケーションからコンテンツをフェッチする手順 – KBA91483
userc_45255 が 2014/11/20 18:10 に作成。chaitanyav_41 が 2017/10/16 18:04 に変更。
Version: *A
質問:
ポインタを使用して、最初の192の場所にアクセスしようとすると、PSoC®4のフラッシュ読み取り操作が期待どおりに機能しません。この問題の理由は何ですか?フラッシュコンテンツにアクセスする前に設定を変更する必要がありますか?この問題はPSoC 5LPにも適用されますか?
回答:
PSoC 4 はArm® Cortex®-M0 CPU コアを使用しています。
Cortex-M0には固定CPUアドレス範囲0x00000000–0x000000BFに例外(割り込み)ベクタテーブルがあります。
例外ベクタテーブルは例外ハンドラと割り込みハンドラの開始アドレスを保持します。
例外ベクタテーブルはフラッシュ(0x00000000〜0x000000BF)またはSRAM(0x20000000〜0x200000BF)に配置できます。
PSoC Creator™のスタートアップコードはデフォルトでSRAMに保存します。
ファームウェアを介してフラッシュの場所0x00000000–0x000000BFからコンテンツにアクセスしようとすると、CPUサブシステムはそれをベクターテーブルアドレス/ SRAMアドレス0x20000000–0x200000BFに変換します。したがって、最初の192個のフラッシュの場所(たとえば、0x00000000–0x000000BF)にアクセスすると、誤った値(たとえば、0x00000000–0x000000BFではなく0x20000000–0x200000BFから)を受け取ります。残りのフラッシュ位置から正しい値を取得します。最初の192個のフラッシュ位置の正しい値を受け取るには次の手順を実行して、指定されたアドレスを操作しないようにCPUを構成する必要があります。
手順 1:
例外アドレステーブルをSRAMではなくフラッシュに再配置し、フラッシュアドレスへのアクセスがSRAMにリダイレクトされないようにします。そのためにはCPUSS_CONFIGレジスタ(アドレス:0x40000000)のVECS_IN_RAMフィールドをfalseに設定する必要があります。詳細については、PSoC 4 Registers TRMのSection 4 "CPUSS Registers"を参照してください。
PSoC CreatorプロジェクトのワークスペースエクスプローラでCm0start.cファイルを見つけます。
ファイルを開き、次の行を変更します
CY_CPUSS_CONFIG_REG |= CY_CPUSS_CONFIG_VECT_IN_RAM;
を
CY_CPUSS_CONFIG_REG |= 0;
へ変更。
図1に示すように、この設定によってアドレス0x00000000〜0x00000007以外のベクトルテーブル全体がフラッシュに配置されます。
これにより、ファームウェアを介してアドレス0x00000008–0x000000BFからフラッシュの内容を読み取ることができるはずです。
手順 2:
アドレス0x00000000–0x00000007はメインスタックポインタ(MSP)とリセットベクターを表します。
CPUを使用してこれらのアドレスから値をフェッチするにはCPUSS_SYSREQ(アドレス:0x40000004)レジスタのCPUSS_NO_RST_OVRビット(ビット番号27)を設定する必要があります。
これをPSoC Creatorに実装するには、ステートメントを追加する必要があります
CY_SET_REG32(CYREG_CPUSS_SYSREQ, CY_GET_REG32(CYREG_CPUSS_SYSREQ) | 0x08000000);
を
CY_CPUSS_CONFIG_REG |= 0;
の行の後に追加。
図2に示すように、Cm0start.cファイルに入力します。手順2を完了すると、すべてのフラッシュ位置から値を読み取ることができます。
図2. MSPの移動とベクターのフラッシュへのリセット
詳細についてはPSoC 4 Architecture TRMのSection 5.10 “Exception - Initialization and Configuration”を参照してください。
CPUSS_CONFIGおよびCPUSS_SYSREQレジスタの詳細については、PSoC 4 Architecture TRMのSection 4 セクション4“CPUSS Registers”をご覧ください。
上記のこれらの変更はPSoC 4プロジェクトにのみ適用されることに注意してください。この問題はPSoC 5LP(Cortex-M3コア)は該当しません。