トップ 一覧 検索 ヘルプ RSS ログイン

LM4F120 の DFU を使うの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{category 電子工作}}
!!!LF4F120 : Stellaris の DFU を使用する (2013/1)
ICDI デバッガがついている Stellaris LaunchPad で使う場合には、特に DFU を使わなくともいいのですが、単品で使う場合に備えてのメモ。

他のシリーズでも同様と思われます。

!!!一番シンプルな方法
フラッシュメモリをクリアする。

フラッシュメモリが空(*(unsigned int *)0x0000.0004 == 0xFFFFFFFF)の場合、自動的に USB DFU(ブートローダ)が起動します。

Stellaris LaunchPad の場合、ICDI 側からフラッシュを消去したのちに、SW を DEVICE にし、USB をデバイス側に接続し、LM Flash Programmer の Configuration タブで USB DFU を選択するだけです。

DFU 用ドライバは [StellarisWare のインストールフォルダ]\windows_drivers にあります。

!!!ブートピンを指定する方法
不揮発の BOOTCFG レジスタにポート、ピン番、論理を指定することで、リセット時に指定した条件がそろうと DFU が起動するようにできます。

ポートの設定等の情報はデータシートの
'''Register 38: Boot Configuration (BOOTCFG), offset 0x1D0'''
不揮発レジスタの操作については
'''8.2.3.6 Non-Volatile Register Programming'''
にあります。

不揮発レジスタの一部は LM Flash Programmer でも操作できるのですが、BOOTCFG はいじれないようです。

仕様がないので下記のコードで試したところ、書き換わって PortB5=H (Stellaris LaunchPad の場合、3.3V と PB5 と書いてある隣り合うピンをショート)にすることで DFU が起動するようになりました。PortB5 以外を使用する場合には下記コード中の該当箇所を書き換えれば動作します。多分。

 #include "inc/hw_flash.h"
 #include "inc/hw_ints.h"
 #include "inc/hw_sysctl.h"
 #include "inc/hw_types.h"
 #include "driverlib/debug.h"
 #include "driverlib/flash.h"
 #include "driverlib/interrupt.h"
 
 // ブートピンの設定。
 // 一度実行してしまうと CPU Unlock するまで変更できないので注意すること。
 void setbootcfg(void)
 {
 	int BOOTCFGV ;
 	// 出荷時値
 	BOOTCFGV = 0xFFFFFFFE ;
 	// ここでポート、信号番号、論理のビットをクリア
 	BOOTCFGV &= (~(FLASH_BOOTCFG_PORT_M + FLASH_BOOTCFG_PIN_M + FLASH_BOOTCFG_EN + FLASH_BOOTCFG_POL)) ;
 	// ここでポート、信号番号、論理を指定
 	BOOTCFGV |= (FLASH_BOOTCFG_PORT_B + FLASH_BOOTCFG_PIN_5 + FLASH_BOOTCFG_POL) ;
 	// BOOTCFG に書き込み
 	HWREG(FLASH_FMD) = BOOTCFGV;
 	HWREG(FLASH_FMA) = 0x75100000;
 	HWREG(FLASH_FMC) = FLASH_FMC_WRKEY | FLASH_FMC_COMT;
 	// 書き込み完了待ち
 	while(HWREG(FLASH_FMC) & FLASH_FMC_COMT) ;
 }

!!!ブートピンの指定を変更、クリアするには
不揮発レジスタ BOOTCFG のビットは 1->0 にしか変えられないため、ピンの指定をプログラムから変更、クリアする方法はありませんが、データシートの

'''4.3.4.3 Recovering a "Locked" Microcontroller'''

の操作によって、LSI 全体を初期化することで BOOTCFG を出荷時値に戻せます。

ここに書いてある操作は面倒なのですが、LM Flash Programmer の Other Utilities タブにある、Debug Port Unlock を行うことで、同じ効果があるようです。

CPU 種別の選択がありますが、Stellaris® Blizzard-class との記述 DATA SHEET にあるので、1番目が正解、ですね。多分... (2013/1/31 訂正)
CPU 種別の選択がありますが、Stellaris® Blizzard-class との記述が DATA SHEET にあるので、1番目が正解、ですね。多分... (2013/1/31 訂正)

ただし、DFU からこの操作は行えないので、ICDI ないしは JTAG プログラマ経由での接続が必要になります。

----
類似の記事:
[[LM4F120 Stellaris LaunchPad の UART5 が動かない]]