13.5.2 フラッシュメソッド Python スクリプトの作成について

この例の目的上、Python スクリプトは example_flash.py と呼びます。

  • スクリプトで必要なオブジェクトのインポートから開始します。
from flashprogrammer.flash_method_v1 import FlashMethodv1
from com.arm.debug.flashprogrammer import TargetStatus
  • 次に、メソッドを実装するクラスを定義します。
class ExampleFlashWriter(FlashMethodv1):
    def __init__(self, methodServices):
        FlashMethodv1.__init__(self, methodServices)
 
    def setup(self):
        # perform any setup for the method here
        pass
 
    def teardown(self):
        # perform any clean up for the method here
        # return the target status
        return TargetStatus.STATE_RETAINED
 
    def program(self, regionID, offset, data):
        # program a block of data to the flash
        # regionID indicates the region within the device (as defined in the flash configuration file)
        # offset is the byte offset within the region
 
        # perform programming here
 
        # return the target status
        return TargetStatus.STATE_RETAINED

  • __init__ 関数はコンストラクタであり、クラスインスタンスが作成されると呼び出されます。
  • methodServices では、メソッドはフラッシュプログラマを呼び出すことができます。これは直接アクセスできません。
  • FlashMethodv1 は、プログラミング中にメソッドが呼び出すことのできる関数を提供します。
  • program() メソッドと teardown() メソッドは、ターゲットの状態を示す値を返します。
    この値は次のいずれかです。
    • STATE_RETAINED - プログラミングの開始時から変更されていないターゲットの状態。この状態では、レジスタとメモリコンテンツが保存または復元されています。
    • STATE_LOST - レジスタおよびメモリコンテンツが変更されましたが、システムリセットは必要ありません。
    • RESET_REQUIRED - ターゲットのリセットが推奨されるか、必要です。
    • POWER_CYCLE_REQUIRED - ターゲットの電源を手動でいったん切ってから再投入する必要があります。例えば、デバッガによるリセットができない場合や、ターゲットの再初期化のために十分でない場合などです。

ターゲットプラットフォームのセットアップスクリプトとテアダウンスクリプト

ハードウェアプラットフォームにセットアップ (フラッシュプログラミングの前に実行する操作) またはテアダウン (フラッシュプログラミングの後に実行する操作)、あるいはその両方の機能が必要な場合、setup() 関数と teardown() 関数を含むスクリプトを 1 つまたは複数作成する必要があります。これらは、別々のスクリプトファイルである場合も、それらを組み合わせた 1 つのファイルである場合もあります。このファイルは、configdb Flash ディレクトリに配置して、フラッシュコンフィギュレーションファイルで接頭辞 FDB:// を使用して参照できるようにする必要があります。
例えば、setup() 関数と teardown() 関数を含む 1 つのファイルのコンテンツは、次のようになります。
from com.arm.debug.flashprogrammer.IFlashClient import MessageLevel
from flashprogrammer.device import ensureDeviceOpen
from flashprogrammer.execution import ensureDeviceStopped
from flashprogrammer.device_memory import writeToTarget

def setup(client, services):
     # get a connection to the core
     conn = services.getConnection()
     dev = conn.getDeviceInterfaces().get("Cortex-M3")
     ensureDeviceOpen(dev)
     ensureDeviceStopped(dev)
	 # Perform some target writes to enable flash programming
     writeToTarget(dev, FLASH_EN, intToBytes(0x81))

def teardown(client, services):
     # get a connection to the core
     conn = services.getConnection()
     dev = conn.getDeviceInterfaces().get("Cortex-M3")
     ensureDeviceOpen(dev)
     ensureDeviceStopped(dev)
	 # Perform some target writes to disable flash programming
     writeToTarget(dev, FLASH_EN, intToBytes(0))

フラッシュコンフィギュレーションファイルの作成

このメソッドを使用してフラッシュをプログラムするには、フラッシュデバイス、使用するメソッド、およびパラメータまたは必要なその他の情報を記述するコンフィギュレーションファイルを作成する必要があります。これは .xml ファイルで、ターゲット固有の情報を含んでいるため、通常はターゲットのその他のコンフィギュレーションファイルと同じディレクトリ (Boards/<Manufacturer>/<Board name> ) に格納されます。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<flash_config
    xmlns:xi="http://www.w3.org/2001/XInclude"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.arm.com/flash_config"
    xsi:schemaLocation="http://www.arm.com/flash_config flash_config.xsd">
    <devices>
        <device name="Example">
            <regions>
                <region address="0x8000" size="0x10000"/>
            </regions>
            <programming_type type="FILE">
                <method language="JYTHON" script="FDB://example_flash.py" class="ExampleFlashWriter" method_config="Default"/>
                <setup script="FDB://file_target.py" method="setup"/>
                <teardown script="FDB://file_target.py" method="teardown"/>
            </programming_type>
        </device>
    </devices>
    <method_configs>
        <method_config id="Default">
            <params>
                <!-- Use last 2K of RAM -->
                <param name="ramAddress" type="integer" value="0x00100000"/>
                <param name="ramSize" type="integer" value="0x800"/>
            </params>
        </method_config>
    </method_configs>
</flash_config>
  • flash_config タグは、使用した XML 空間とスキーマを定義します。通常、このタグを変更する必要はありません。flash_config タグの下にはデバイスタグが必要です。これには、それぞれターゲット上の 1 つのフラッシュデバイスを表す多数のデバイスタグが含まれます。デバイスタグは、デバイス名を定義します。これは、info flash コマンドで報告される名前で、特定のデバイスに合わせてプログラミングする際にのみ使用されます。さらに、ターゲットのメモリ内でフラッシュデバイスが含まれる多数の領域を定義します。各領域のアドレスは、プログラム対象のイメージの各ロード領域のアドレスに照合されます。
  • programming_type タグは、フラッシュプログラミング操作に使用するプログラミングメソッドとセットアップ/テアダウンスクリプトを定義します。現在、FILE のみがサポートされています。
  • method タグは、プログラミングメソッドを実装するスクリプトを定義します。現在、言語属性では JYTHON のみがサポートされています。スクリプト属性およびクラス属性は、ロードするスクリプトファイルと、そのスクリプト内でプログラミングメソッドを実装するクラスの名前を定義します。method_config 属性は、デバイスで使用するパラメータのセットを定義します。これにより複数のデバイスがパラメータのセットを共有することができます。
  • programming_type には、オプションのセットアップタグおよびテアダウンタグが含まれる場合があります。これらのタグは、フラッシュプログラミングの前後に呼び出すスクリプトおよびそのスクリプト内のメソッドを定義します。
  • method_configs タグ内では、各デバイスのパラメータは method_config タグ内に含まれます。
  • パラメータには、一意の名前とデフォルト値が必要です。メソッドに渡された値はオーバーライドできます。DS-5デバッガ内の flash load コマンドに関するヘルプを参照してください。
  • コンフィギュレーションファイルが、例えばスクリプトファイルなどの別のファイルを参照している場合、接頭辞 FDB:// は、ファイルがコンフィギュレーションデータベースの Flash サブディレクトリにあることを示します。複数のデータベースがある場合は、各データベースの Flash サブディレクトリでファイルが検索されます。
  • 変更が必要な最後のファイルは、ターゲットのディレクトリ内の project_types.xml ファイルです。このファイルは、フラッシュコンフィギュレーションが上で作成されたファイルにある可能性があることを DS-5 に知らせます。トップレベルの platform_data タグに次の行を追加する必要があります。
    <flash_config>CDB://flash.xml</flash_config>
    接頭辞 CDB:// は、flash.xml ファイルが project_types.xml ファイルと同じディレクトリにあることを DS-5 に知らせます。
非機密扱いPDF file icon PDF 版ARM DUI0446WJ
Copyright © 2010-2015 ARM.All rights reserved.