FX3、CX3、FX3S、SD3、FX2G2、およびSD2のデフォルトのメモリマップの変更 - KBA229114 - Community Translated (JA)

Version 3

    Community Translated by  NoTa_4591161    Version: **

     

    Translation - English: Modifying the Default Memory Map in FX3, CX3, FX3S, SD3, FX2G2, and SD2 - KBA229114

     

    質問: FX3CX3FX3SSD3FX2G2、およびSD2のリンカスクリプトファイルを変更するにはどうすればよろしいでしょうか?

     

    回答: Cypress FX3ファミリチップは、256 KB512 KB2つのSRAMサイズで利用できます。各SRAMサイズのチップには、リンカスクリプトファイル(.ldファイル)を通じて提供される独自のメモリマッピングがあります。リンカスクリプトファイルに加えて、すべてのプロジェクトのプロジェクトディレクトリにcyfxtx.cファイルが必要です。cyfxtx.cファイルは、アプリケーション固有の例外ハンドラとメモリ割り当てルーチンを提供します。リンカスクリプトファイルは、Eclipse統合開発環境(IDE)のリンカステージで使用され、実行可能およびリンク可能な形式(.elf)ファイルを構築します。cyfxtx.c定義されたマクロは、ドライバーヒープとDMAバッファのメモリ領域を割り当てるために実行時に使用されます。

     

    デフォルトのリンカスクリプトファイル(.ldファイル)およびcyfxtx.cファイルで提供されるメモリマッピングが要件と競合する場合があります。 たとえば、212 KBのコード領域サイズが必要な場合でも、リンカスクリプトファイルではデフォルトのコードサイズが180 KBに設定されています。 このナレッジベースの記事(KBA)は、そのような問題に対処し、512 KB SRAMチップのリンカスクリプトファイルとcyfxtx.cファイルを変更する手順を提供します。 このKBAを参照して、256 KB SRAMチップを変更することもできます。

     

    デフォルトのリンカスクリプトファイル

     

    512 KB SRAMチップのデフォルトのリンカスクリプトファイル(fx3.ld)は、FX3 SDKのデフォルトパスであるC:\Program Files(x86)\Cypress\EZ-USB FX3 SDK\1.3\fw_build\fx3_fwにあります。

     

    リンカスクリプトファイルは、Tightly-Coupledメモリ(ITCM)セクションおよびシステムメモリとデータメモリにメモリを割り当てます。

     

    ITCMは、例外ベクターと割り込みサービスルーチン(ISR)コードを保持するための16 KBの専用スペースです。これは、ARM® CPUからITCMメモリ領域に読み書きすることは可能である間は、DMA転送のための転送先としてこのメモリ領域を使用することは不可能です。ITCM512 KBSRAMメモリ空間の一部ではないことに注意してください。

     

    システムメモリ空間は、アプリケーションコードを格納するために使用され、コード領域とも呼ばれます。

    データメモリ空間は、初期化されたデータとBSSデータ(初期化されていないグローバルデータ)を格納するために使用されます。

     

    512 KB SRAMのデフォルトメモリマップ

     

    1に、512 KB FX3ファミリチップのデフォルトのアプリケーションメモリマップを示します。512 KB SRAMのアドレスは0x40000000で始まり、0x4007FFFFで終わることに注意してください。

    1. 512 KB FX3ファミリチップのデフォルトメモリマップ

     

    ベースアドレス

    サイズ(KB

    ディスクリプタ領域

    0x40000000

    12

    コードエリア

    0x40003000

    180

    データエリア

    0x40030000

    32

    ドライバーエリア

    0x40038000

    32

    バッファ領域

    0x40040000

    224

    セカンドステージブートエリア

    0x40078000

    32

     

    :第2段階のブート領域はオプションです(アプリケーションが永続的なメモリ内ブートローダーを使用する場合にのみ必要です)。このブート領域が使用されていない場合、cyfxtx.cCY_U3P_SYS_MEM_TOP0x40080000に変更することにより、このセグメント用に予約されている32 KBをバッファ領域とマージできます。

    上記のメモリマッピングは、すべてのFX3ファミリサンプルプロジェクトのcyfxtx.cファイルに記載されてます。

     

    リンカスクリプトファイルとcyfxtx.cファイルの変更

     

    ユーザーアプリケーションに次の要件があるとします。

    • コードサイズ212 KB
    • 224 KBDMAバッファスペースを維持する

     

    DMAバッファサイズを224 KBに維持しながらコードサイズを32 KB増やすには、第2ステージのブートローダー領域の割り当てを解除する必要があります。

     

    要件に従ってメモリスペースを調整するには、リンカスクリプトファイルのデフォルトのメモリマッピングと、cyfxtx.cファイルで定義されたMACROSを変更します。

    リンカスクリプトファイルを変更するには、次の手順に従います。

     

    1. SYS_MEMスペースの長さを0x35000212 KBに相当)に変更します。

     

    SYS_MEM : ORIGIN = 0x40003000    LENGTH = 0x35000

     

    2. DATAスペースのORIGIN0x40038000に調整します(つまり、0x40003000 + 0x35000

     

    DATA  : ORIGIN = 0x40038000    LENGTH = 0x8000

     

    リンカスクリプトファイルを変更した後、cyfxtx.cファイルのMACROSを変更します。

     

    1. ヒープベースを0x40040000に変更します

     

    #define CY_U3P_MEM_HEAP_BASE0x40040000

     

    2. SYS_MEM_TOP0x40080000に変更します

     

    #define CY_U3P_SYS_MEM_TOP0x40080000

     

    RAMの最後の32 KBは、第2段階のブート操作用に予約されていることに注意してください。SYS_MEM_TOP値は0x40080000に変更されています。これは、アプリケーションに第2ステージのブート領域が必要ないためです。

     

    2では、デフォルトのメモリマップと変更されたメモリマップを比較しています。

     

    2. デフォルトのメモリマップと変更されたメモリマップの比較

     

    デフォルトのメモリマップ

    変更されたメモリマップ

    ベースアドレス

    サイズ(KB

    ベースアドレス

    サイズ(KB

    ディスクリプタ領域

    0x40000000

    12

    0x40000000

    12

    コードエリア

    0x40003000

    180

    0x40003000

    212

    データエリア

    0x40030000

    32

    0x40038000

    32

    ドライバーエリア

    0x40038000

    32

    0x40040000

    32

    バッファ領域

    0x40040000

    224

    0x40048000

    224

    セカンドステージブートエリア

    0x40078000

    32

    0x40080000

    0

     

    変更されたリンカスクリプトファイルとcyfxtx.cファイルは、参照用にこのKBAに添付されています。