第 9 章 8 ビットタイマカウンタ(TC3, TC4)
14.4 フラッシュメモリ領域へのアクセス
フラッシュメモリの書き込み
/
消去/Security Program
設定時は、フラッシュメモリのすべての領域に対し てリード、プログラムフェッチを実行することができません。従って、フラッシュメモリ領域に対して これらの操作を行うときはBOOTROM
領域もしくはRAM
領域上の制御プログラムによってフラッシュ メモリをアクセスする必要があります(
フラッシュメモリのプログラムで直接フラッシュメモリを書き換 えることはできません)
。これらの領域上で制御プログラムを実行するにはシリアルPROM
モード、また はMCU
モードを使用します。注
1)
フラッシュメモリ領域の書き込み、読み出しは1
バイト単位、消去は全領域または4K
バイト単位で実行可能で す。読み出しについては1
つの転送命令で実行可能ですが、書き込み/消去については、コマンドシーケンス方 式を使用していますので、数個の転送命令を実行する必要があります。注
2)
既にデータ(FFHを含む)が書き込まれたフラッシュのアドレスに対し、再度データの書き込みを行う場合、セク タイレースまたはチップイレースによって、かならずそのアドレスのデータを消去した後に書込みを実行して下 さい。14.4.1 シリアル PROM モードのフラッシュメモリ制御
シリアル
PROM
モードは、BOOTROM上に予め用意された制御プログラムによってフラッシュメ モリをアクセスするモードです。フラッシュメモリのアクセスに関するほとんどの動作は、シリアル インタフェース(UART)
の通信データによって簡易的に制御可能ですので、ユーザは制御レジスタの 操作を特に意識する必要はありません。シリアルPROM
モードの詳細については「シリアルPROM
モード」の章を参照してください。シリアル
PROM
モードで任意の周辺機能を使用してフラッシュメモリをアクセスする場合は、RAM ローダコマンドを利用して、RAM上で制御プログラムを実行する必要があります。この場合の操作 は、「14.4.1.1
シリアルPROM
モードのRAM
ローダモードでRAM
領域に制御プログラムを展開して 書き込む例」を参照してください。14.4.1.1
シリアルPROM
モードのRAM
ローダモードでRAM
領域に制御プログラムを展開して書き込む例
(1 ~ 2
はBOOTROM
による制御、3 ~ 9はRAM
に展開されたプログラムによる制御となります
)
1. RAM
ローダで書き込み制御プログラムをRAM
に転送します。2. RAM
領域にジャンプします。3.
割り込みマスタ許可フラグを禁止 (DI) にします。(IMF← “0”)4. FLSCR<FLSMD>を “0011B”
に設定します。(
コマンドシーケンスの実行を許可します) 5.
消去コマンドシーケンスを実行します。6.
フラッシュメモリの同一アドレスに対して2
回連続でリード命令を実行します。(読み出した値が同一になるまで 6.を繰り返します)
7.
書き込みコマンドシーケンスを実行します。8.
フラッシュメモリの同一アドレスに対して2
回連続でリード命令を実行します。(
読み出した値が同一になるまで8.
を繰り返します) 9. FLSCR<FLSMD>を “1100B” に設定します 。
(コマンドシーケンスの実行を禁止します)
TMP86FH47BUG
第14
章 フラッシュメモリ14.4
フラッシュメモリ領域へのアクセスPage 150
注
1) RAM
領域からフラッシュメモリに書き込みを行うときは、事前に割り込みマスタ許可フラグ (IMF)を“0” に設定し、割り込みを禁止にしてください。通常は
RAM
に展開するプログラムの先頭でDI
命令を 実行してください。注
2) RAM
ローダを使用する場合は、BOOTROMによってウォッチドッグタイマは禁止に設定されていますので、RAMローダプログラムによってウォッチドッグタイマを禁止に設定する必要はありません。
(プログラム例)チップイレースを実行した後、F000Hに
3FH
のデータを書き込む (RAMに展開するプログ ラム)
DI ; 割り込みを禁止 (IMF←"0")
LD (FLSCR),00111000B ; コマンドシーケンスの実行を許可
LD IX,0F555H
LD IY,0FAAAH
LD HL,0F000H
; ####フラッシュメモリチップイレース処理 ####
LD (IX),0AAH ; 1st Bus Write Cycle
LD (IY),55H ; 2nd Bus Write Cycle
LD (IX),80H ; 3rd Bus Write Cycle
LD (IX),0AAH ; 4th Bus Write Cycle
LD (IY),55H ; 5th Bus Write Cycle
LD (IX),10H ; 6th Bus Write Cycle
sLOOP1: LD W,(HL)
CMP W,(HL)
JR NZ,sLOOP1 ;同一の値が読み出されるまでループする
; #### フラッシュメモリ書き込み処理 ####
LD (IX),0AAH ; 1st Bus Write Cycle
LD (IY),55H ; 2nd Bus Write Cycle
LD (IX),0A0H ; 3rd Bus Write Cycle
LD (HL),3FH ; 4th Bus Write Cycle, (F000H)=3FH
sLOOP2: LD W,(HL)
CMP W,(HL)
JR NZ,sLOOP2 ;同一の値が読み出されるまでループする
LD (FLSCR),11001000B ; コマンドシーケンスの実行を禁止
sLOOP3: JP sLOOP3
14.4.2 MCU モードのフラッシュメモリ制御
MCU
モードの場合、RAM上で制御プログラムを実行することによってフラッシュメモリの書き 込みを行うことができます。RAM
上で実行する制御プログラムは、予めフラッシュメモリ内にコピ ーを用意しておくか、通信端子などを利用して外部から取り込む必要があります。以下に
MCU
モードでRAM
上の制御プログラムを実行する方法(
例)
を示します。14.4.2.1 MCU
モードからRAM
領域に制御プログラムを展開して書き込む例(1 ~ 2
はフラッシュメモリ上のプログラムによる制御、3 ~ 11はRAM
に展開されたプログラムによる制御となります
)
1.
書き込み制御プログラムをRAM
に転送します。2. RAM
領域にジャンプします。3.
割り込みマスタ許可フラグを禁止 (DI) にします(IMF← “0”)。4.
ウォッチドッグタイマを使用している場合は禁止に設定します。5. FLSCR<FLSMD>を “0011B” に設定します。
(
コマンドシーケンスの実行を許可します) 6.
消去コマンドシーケンスを実行します。7.
フラッシュメモリの同一アドレスに対して2
回連続でリード命令を実行します。(
読み出した値が同一になるまで7.
を繰り返します) 8.
書き込みコマンドシーケンスを実行します。9.
フラッシュメモリの同一アドレスに対して2
回連続でリード命令を実行します。(読み出した値が同一になるまで 9.を繰り返します)
10. FLSCR<FLSMD>
を“1100B”
に設定します。(
コマンドシーケンスの実行を禁止します) 11.
フラッシュ領域にジャンプします。注
1) RAM
領域からフラッシュメモリに書き込みを行うときは、事前に割り込みマスタ許可フラグ (IMF)を“0” に設定し、割り込みを禁止にしてください。通常は
RAM
に展開するプログラムの先頭でDI
命令を実行してくださ い。注
2)
フラッシュメモリに書き込みを行うときにノンマスカブル割り込みを意図的に使用しないでください (ウォッチ ドッグタイマを使用している場合は禁止にしてください)。書き込み中にノンマスカブル割り込みが発生する と、フラッシュメモリ (割り込みベクタ) から想定しないデータ値が読み込まれるためマイコンが誤動作する恐 れがあります。TMP86FH47BUG
第14
章 フラッシュメモリ14.4
フラッシュメモリ領域へのアクセスPage 152
(プログラム例)E000H~EFFFHのセクタイレースを実行した後、E000Hに
3FH
のデータを書き込む (RAM に展開するプログラム)
DI ; 割り込みを禁止 (IMF←"0")
LD (WDTCR2),4EH ; WDT 2進カウンタのクリア
LDW (WDTCR1),0B101H ; WDTの禁止
LD (FLSCR),00111000B ;コマンドシーケンスの実行を許可
LD IX,0F555H
LD IY,0FAAAH
LD HL,0E000H
; #### フラッシュメモリセクタイレース処理 ####
LD (IX),0AAH ; 1st Bus Write Cycle
LD (IY),55H ; 2nd Bus Write Cycle
LD (IX),80H ; 3rd Bus Write Cycle
LD (IX),0AAH ; 4th Bus Write Cycle
LD (IY),55H ; 5th Bus Write Cycle
LD (HL),30H ; 6th Bus Write Cycle
sLOOP1: LD W,(HL)
CMP W,(HL)
JR NZ,sLOOP1 ; 同一の値が読み出されるまでループする
; #### フラッシュメモリ書き込み処理 ####
LD (IX),0AAH ; 1st Bus Write Cycle
LD (IY),55H ; 2nd Bus Write Cycle
LD (IX),0A0H ; 3rd Bus Write Cycle
LD (HL),3FH ; 4th Bus Write Cycle, (E000H)=3FH
sLOOP2: LD W,(HL)
CMP W,(HL)
JR NZ,sLOOP2 ; 同一の値が読み出されるまでループする
LD (FLSCR),11001000B ; コマンドシーケンスの実行を禁止
JP XXXXH ; フラッシュ領域にジャンプします。
(プログラム例)F000Hからデータをリードして
RAM
の98H
に格納するLD A,(0F000H) ; F000Hからデータを読み出す
LD (98H),A ; 98Hにデータを格納する
TMP86FH47BUG
第14
章 フラッシュメモリ14.4
フラッシュメモリ領域へのアクセスPage 154
第 15 章 シリアル PROM モード
15.1 概要
TMP86FH47BUG
はフラッシュメモリへのプログラミング用に2K
バイトのBOOTROM(MASK ROM)を
内蔵しています。
BOOTROM
は、シリアルPROM
モードで有効になります。シリアルPROM
モードは、TEST
端子とBOOT
端子、RESET
端子で制御され、UART
を通して通信します。シリアル
PROM
モードには、フラッシュメモリ書き込み、RAM
ローダ、フラッシュメモリSUM
出 力、製品識別コード出力、フラッシュメモリステータス出力、フラッシュメモリ消去、フラッシュメモリ
Security Program
設定の7
種類のモードがあります。シリアルPROM
モードでは、メモリのアドレス割り当てが
MCU
モードと異なります。図15-1
にシリアルPROM
モードでのメモリアドレスマップを示し ます。表
15-1 シリアル PROM
モード動作範囲項目 Min Max 単位
電源電圧 4.5 5.5 V
高周波周波数 2 16 MHz
注) 上記の高周波周波数の範囲であってもサポートされない周波数があります。詳細については表