フリースケール Kinetis K60Xxxx の永久デバイスロック
テクニカル・ノート 77989
アーキテクチャ:
Arm
コンポーネント:
general
更新日:
2018/08/25 14:02
はじめに
バージョン6.30.3以前のIAR Embedded Workbench for ARMにおいて、ターゲット(Target) > コア(Core)で「Cortex-M4」を選択するか、ターゲット(Target) > デバイス(Device)で「Freescale K60Xxxx」を選択し、新規プロジェクトをゼロから作成すると、デフォルトのリンカ設定ファイルgeneric_cortex.icfが選択される。
このリンカ設定ファイルを使用すると、ボードにコードをダウンロードしようとしたときにデバイスが永久に保護されてしまいます(すなわち、デバイスを再プログラミングできなくなります)。
IAR Embedded Workbench for ARMバージョン6.30.4以降では、別途用意されているデフォルトのリンカ設定ファイル(Freescale\MK60xxxx.icf)が自動的に選択されるため、この問題は発生しません。
解決方法
IAR Embedded Workbench for ARM 6.30.3以前:
K60Xxxxデバイスに対して以下のリンカ設定ファイルを使用してください。
$TOOLKIT_DIR$\examples\Freescale\K60\
TWR-K60\GettingStarted\config\K60X_Flash.icf
IAR Embedded Workbench for ARM 6.30.4以降:
以下の場所にあるデフォルトのリンカ設定ファイルを使用してください(このファイルは自動的に選択されます)。
$TOOLKIT_DIR$\config\linker\Freescale
背景
バージョン6.30.3以前のIAR Embedded Workbench IDEでARM Cortex用のデフォルトのリンカ設定ファイルを使用すると、コードがアドレス0から配置されます。このとき、コードの規模が大きくなりアドレス0x40Cを超えると、NVFSECレジスタがプログラムされてしまいます。
NVFSECレジスタには、チップのデータを一括で消去する機能を永久に無効にするための2ビットが用意されています。これらのビットは、MEEN (Mass Erase Enable Bits: 一括消去有効ビット)と呼ばれます。また、このレジスタにはフラッシュの保護を制御する2ビット(SEC)も用意されています。これらのビットを組み合わせて使用すると、デバイスを永久にロックできます。
なお、バージョン6.30.3以前のIAR Embedded Workbench for ARMでは、オプション(Optionos) > ターゲット(Target) > デバイス(Device)でFreescale K60Xxxxを選択すると、リンカ(Linker) > 設定(Config) > リンカ設定ファイル(Linker configuration file)がデフォルトでgeneric_cortex.icfに設定されます。
この設定を変更するには、以下の画像を参照してください。
注1:
IAR K60N512キットに含まれるすべてのサンプルプロジェクトは、デフォルトのリンカ設定ファイルをK60X_ram.icfまたはK60X_Flash.icfのいずれかで書き換えます。これにより、デバイスのロックに関する問題が発生しなくなります。
注2:
Freescale MQXに付属のサンプルプロジェクトでは、vector.cにベクタテーブルが格納されています。このテーブルは、フラッシュ設定エリアまで拡張され、正しい値が設定されます。
注3:
フラッシュ保護ビット(SEC)のみでデバイスがロックされた場合、J-Link Commander (jlink.exe)のコマンドを使用してデバイスのロックを解除できます。
J-Link> unlock Kinetis
注4:
I-jetおよびIAREmbedded Workbench for Armバージョン8.40.1以降では、arm\config\debugger\NXPのデバッグマクロを使用してロック解除が自動的に実行されます。
View(表示) > Macros(マクロ) > Debugger Macros(デバッグマクロ) ウィンドウを使用すると、そこにMassErase()マクロがあります。 View(表示) > Macros(マクロ) > Macro Quicklaunch(マクロクイック起動)ウィンドウを使用して、マクロを手動で実行できます。
IAR Embedded Workbench for Armバージョン6.60.1〜8.32.3では、I-jetを使用して以下のコマンドを使用してロックを解除できます。
<installation dir>\arm\bin\jet\bin\Kinetis_unlock_swd.bat
注5:
最近のバージョンのIAR Embedded Workbench for ARMでは、フラッシュローダにNVFSECレジスタの書き込み保護が組み込まれています。保護されたフラッシュエリアに書き込めるようにするには、プロジェクト(Project) > オプション(Options) > デバッガ(Debugger) > ダウンロード(Download) > デフォルトの.boardファイルのオーバライド(Override default .board file) > 編集(Edit...) > 追加パラメータ(Extra parameters)で以下のオプションを指定する必要があります。
--enable_config_write
パラメータの説明:
0x40C~0x40Fにユーザのデータでプログラミングできます。ユーザがプログラミングしない場合は、ブロック0を消去した後に、フラッシュローダによって0xFFFFFFFE (保護されていない状態)が書き込まれます。
全ての製品名は、それぞれの所有者の商標または登録商標です。