• 検索結果がありません。

フラッシュ プログラムメモリ制御

ドキュメント内 PIC16(L)F1703/7 Data Sheet (ページ 102-118)

PIC16(L)F1703/7

PIC16(L)F1703/7

10.2.1

フラッシュ プログラムメモリの

読み出し

プログラムメモリからの読み出しは、以下の手順で実 行します。

1.

読み出したいアドレスをPMADRH:PMADRLレジ スタペアに書き込む。

2. PMCON1レジスタの CFGS

ビットをクリアする。

3. PMCON1

レジスタの

RD

制御ビットをセットする。

読み出し制御ビットをセットした後、プログラムメモ リ フラッシュ コントローラは2番目の命令サイクルで データを読み出します。このため、「

BSF PMCON1,RD

」 命令に続く

2

番目の命令は無視されます。データは、そ の次のサイクルで

PMDATH:PMDATL

レジスタペアに 格納されます。従って、これ以降の命令で

2

バイトと して読み出す事ができます。

PMDATH:PMDATLレジスタペアに格納された値は、

次 の読み出し動作か、ユーザが書き込みを実行するまで 保持されます。

図 10-1: フラッシュ プログラムメモリの 読み出しフローチャート 表 10-1: 各デバイスのフラッシュメモリの構成

デバイス 行消去

(

ワード

)

書き込みラッチ

(

ワード

) PIC16(L)F1703

32 32

PIC16(L)F1707

Note:

プログラムメモリの読み出し後の

2

つの

命令は、

NOP

とする必要があります。こ れにより、

RD

ビットがセットされた後の 次の命令でユーザが

2

サイクル命令を実 行するのを防ぐ事ができます。

Start Read Operation

Select

Program or Configuration Memory (CFGS)

Select Word Address (PMADRH:PMADRL)

End Read Operation Instruction Fetched ignored

NOP execution forced

Instruction Fetched ignored NOP execution forced Initiate Read operation

(RD = 1)

Data read now in PMDATH:PMDATL

PIC16(L)F1703/7

図 10-2: フラッシュ プログラムメモリの読み出しサイクルの実行

例 10-1: フラッシュ プログラムメモリの読み出し

Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

BSF PMCON1,RD executed here

INSTR(PC + 1)

executed here

PC PC + 1 PMADRH,PMADRL PC+3 PC + 5

Flash ADDR

RD bit

PMDATH,PMDATL

PC + 3 PC + 4

INSTR (PC + 1)

INSTR(PC - 1)

executed here INSTR(PC + 3)

executed here INSTR(PC + 4) executed here Flash Data

PMDATH PMDATL Register

INSTR (PC) INSTR (PC + 3) INSTR (PC + 4)

instruction ignored Forced NOP

INSTR(PC + 2)

executed here instruction ignored Forced NOP

* This code block will read 1 word of program

* memory at the memory address:

PROG_ADDR_HI : PROG_ADDR_LO

* data will be returned in the variables;

* PROG_DATA_HI, PROG_DATA_LO

BANKSEL PMADRL ; Select Bank for PMCON registers MOVLW PROG_ADDR_LO ;

MOVWF PMADRL ; Store LSB of address MOVLW PROG_ADDR_HI ;

MOVWF PMADRH ; Store MSB of address

BCF PMCON1,CFGS ; Do not select Configuration Space BSF PMCON1,RD ; Initiate read

NOP ; Ignored (10-1)

NOP ; Ignored (10-1)

MOVF PMDATL,W ; Get LSB of word

MOVWF PROG_DATA_LO ; Store in user location MOVF PMDATH,W ; Get MSB of word

MOVWF PROG_DATA_HI ; Store in user location

PIC16(L)F1703/7

10.2.2

フラッシュメモリのロック解除

シーケンス

ロック解除シーケンスは、意図しない自己書き込みま たは消去からフラッシュ プログラムメモリを保護す る仕組みです。以下の全ての動作を正常に完了するに は、このシーケンスを中断する事なく実行し、完了さ せる必要があります。

行消去

プログラムメモリ書き込みラッチへの書き込み

プログラムメモリ書き込みラッチからプログラム メモリへの書き込み

プログラムメモリ書き込みラッチからユーザ

ID

へ の書き込み

ロック解除シーケンスは、以下のステップで構成され ます。

1. PMCON2

への

55h

書き込み

2. PMCON2

への

AAh

書き込み

3. PMCON1

WR

ビットのセット

4. NOP

命令

5. NOP

命令

WR

ビットがセットされると、プロセッサは常に

2

つの

NOP

命令を実行します。行消去または行書き込み動作 中、プロセッサは内部動作をストールさせ

(

通常

2 ms)、

動作が完了してから次の命令を再開します。動作がプ ログラムメモリ書き込みラッチへの読み込みの場合、

プロセッサは常に

2

つの

NOP

命令を実行し、続けて次 の命令を継続します。

ロック解除シーケンスが中断される事のないように、

シーケンスの実行前にグローバル割り込みを無効にし て、完了後に再度有効にします。

図 10-3: フラッシュ プログラムメモリ ロック 解除シーケンスのフローチャート

Write 055h to PMCON2

Start Unlock Sequence

Write 0AAh to PMCON2

Initiate

Write or Erase operation (WR = 1)

Instruction Fetched ignored NOP execution forced

End Unlock Sequence Instruction Fetched ignored

NOP execution forced

PIC16(L)F1703/7

10.2.3

フラッシュ プログラムメモリの消去

コード実行時、プログラムメモリの消去は行単位での み可能です。行を消去するには、以下の手順を実行し ます。

1.

消去する行内のいずれかのアドレスを

PMADRH:PMADRL

レジスタペアに書き込む。

2. PMCON1レジスタの CFGS

ビットをクリアする。

3. PMCON1

レジスタの

FREE

および

WREN

ビット をセットする。

4. PMCON2

レジスタに

55h、AAh

を順に書き込む

(フラッシュ

プログラミング ロック解除シーケンス)。

5. PMCON1

レジスタの

WR

制御ビットをセットし

て消去を開始する。

例10-2を参照してください。

BSF PMCON1,WR

」命令の後、プロセッサは消去動作 をセットするために

2

サイクル必要です。このため、

WR

ビットをセットした直後は、

2

つの

NOP

命令を実行 する必要があります。プロセッサは

2 ms (typ.)

の消去 時間の間、内部動作を停止します。クロックと周辺モ ジュールは動作を継続するため、これはスリープとは 異なります。消去サイクル後、プロセッサは

PMCON1

書き込み命令後の

3

番目の命令から動作を再開します。

図 10-4: フラッシュ プログラムメモリ消去の フローチャート

Disable Interrupts (GIE = 0)

Start Erase Operation

Select

Program or Configuration Memory (CFGS)

Select Row Address (PMADRH:PMADRL)

Select Erase Operation (FREE = 1)

Enable Write/Erase Operation (WREN = 1)

Unlock Sequence (FIGURE x-x)

Disable Write/Erase Operation (WREN = 0)

Re-enable Interrupts (GIE = 1)

End Erase Operation CPU stalls while Erase operation completes

(2ms typical) 10-3

PIC16(L)F1703/7

例 10-2: プログラムメモリの

1

行消去

; This row erase routine assumes the following:

; 1. A valid address within the erase row is loaded in ADDRH:ADDRL

; 2. ADDRH and ADDRL are located in shared data memory 0x70 - 0x7F (common RAM)

BCF INTCON,GIE ; Disable ints so required sequences will execute properly BANKSEL PMADRL

MOVF ADDRL,W ; Load lower 8 bits of erase address boundary MOVWF PMADRL

MOVF ADDRH,W ; Load upper 6 bits of erase address boundary MOVWF PMADRH

BCF PMCON1,CFGS ; Not configuration space BSF PMCON1,FREE ; Specify an erase operation BSF PMCON1,WREN ; Enable writes

MOVLW 55h ; Start of required sequence to initiate erase MOVWF PMCON2 ; Write 55h

MOVLW 0AAh ;

MOVWF PMCON2 ; Write AAh

BSF PMCON1,WR ; Set WR bit to begin erase

NOP ; NOP instructions are forced as processor starts

NOP ; row erase of program memory.

;

; The processor stalls until the erase process is complete

; after erase processor continues with 3rd instruction BCF PMCON1,WREN ; Disable writes

BSF INTCON,GIE ; Enable interrupts Required Sequence

PIC16(L)F1703/7

10.2.4

フラッシュ プログラムメモリへの

書き込み

プログラムメモリに書き込むには、以下の手順を実行 します。

1.

書き込む行のアドレスをPMADRH:PMADRLに書 き込む。

2.

各書き込みラッチにデータを書き込む。

3.

書き込み動作を開始する。

4.

全てのデータの書き込みが完了するまでステップ

1

3

を繰り返す。

プログラムメモリに書き込みを実行する際は、書き込 み先に何もデータが書き込まれていないか、書き込ま れている場合、事前に消去しておく必要があります。プ ログラムメモリの消去は行単位でのみ可能です。書き 込み開始時に自動的に消去が実行される事はありま せん。

プログラムメモリへの書き込みは、1ワードずつまた は複数ワードを一度に書き込む事ができます。一度に 書き込む事ができる最大ワード数は、書き込みラッチ の数と同じです。詳細は、図 10-5 (32 個の書き込み ラッチによるプログラムメモリへの行書き込み

)

を参 照してください。

書き込みラッチは、

PMADRH:PMADRL

の上位

10

ビット

(PMADRH<6:0>:PMADRL<7:5>)

で定義されるフラッ シュ行アドレスの境界に対応づけられ、PMADRLの下 位5ビット

(PMADRL<4:0>)

が読み込む書き込みラッチ を決定します。この境界を越えて書き込む事はできま せん。プログラムメモリへの書き込みが完了したら、

書き込みラッチのデータは0x3FFFにリセットされます。

書き込みラッチにデータを書き込んでプログラムメモ リの行書き込みを実行するには、以下の手順を実行す る必要があります。この手順は大きく

2

つの部分に分 かれます。最初に、PMDATH:PMDATL からのデータ

を、

LWLO = 1

のロック解除シーケンスで各書き込み

ラッチに書き込みます。書き込みラッチに書き込む最 後のワードの準備が整ったら、LWLOビットをクリア してロック解除シーケンスを実行します。これによっ てプログラミング動作が始まり、全てのラッチの内容 がフラッシュ プログラムメモリに書き込まれます。

1. PMCON1レジスタのWRENビットをセットする。

2. PMCON1レジスタの CFGS

ビットをクリアする。

3. PMCON1レジスタの LWLO

ビットをセットする。

PMCON1

レジスタの

LWLO

ビットが「

1

」の場 合、書き込みシーケンスを実行しても書き込み ラッチにデータが書き込まれるだけでフラッシュ プログラムメモリへの書き込みは始まりません。

4.

書き込み先のアドレスをPMADRH:PMADRLレジ スタペアに書き込む。

5.

プログラムメモリに書き込むデータを

PMDATH:PMDATL

レジスタペアに書き込む。

6.

ロック解除シーケンスを実行する

(

セクション10.2.2

「フラッシュメモリのロック解除 シーケンス」)。以 上で書き込みラッチへの書き込みが完了します。

7.

次のアドレスを指すようにPMADRH:PMADRLレ ジスタペアをインクリメントする。

8.

前回から

2

番目のラッチへの書き込みが完了する まで手順

5

7

を繰り返す。

9. PMCON1レジスタの LWLO

ビットをクリアする。

PMCON1

レジスタの

LWLO

ビットが「

0

」の場 合、書き込みシーケンスを実行するとフラッシュ プログラムメモリへの書き込みが始まります。

10.

プログラムメモリに書き込むデータを

PMDATH:PMDATL

レジスタペアに書き込む。

11.

ロック解除シーケンスを実行する(セクション10.2.2

「フラッシュメモリのロック解除シーケンス」

)

。以 上でプログラムメモリ ラッチの内容が全てフ ラッシュプログラムメモリに書き込まれました。

Note:

書き込みラッチへのデータ書き込み、ま

たはフラッシュ書き込みの動作を始める には、特定のロック解除シーケンスが必 要です。ロック解除シーケンスが中断さ れた場合、ラッチまたはプログラムメモ リへの書き込みは始まりません。

Note:

プログラムメモリ書き込みラッチは、書き

込みまたは消去動作が完了するたびにブ ランク状態(0x3FFF)にリセットされます。

こ のた め、プロ グラ ムメ モリ 書き 込み

PIC16(L)F1703/7

DS40001722A_JP - p.109

Prelimina ry

 2014 Microchip Technology Inc.

図 10-5:

32

個の書き込みラッチによるフラッシュ プログラムメモリへのブロック書き込み

6 8

14

14 14

Write Latch #31 1Fh

14 14

Program Memory Write Latches

14 14 14

PMADRH<6:0>:

PMADRL<7:5>

Flash Program Memory

Row

Row Address Decode

Addr

Write Latch #30 1Eh Write Latch #1

01h Write Latch #0

00h

Addr Addr Addr

000h 0000h 0001h 001Eh 001Fh

001h 0020h 0021h 003Eh 003Fh

002h 0040h 0041h 005Eh 005Fh

3FEh 7FC0h 7FC1h 7FDEh 7FDFh

3FFh 7FE0h 7FE1h 7FFEh 7FFFh

14

PMADRL<4:0>

400h 8000h - 8003h 8009h - 801Fh

Configuration Words USER ID 0 - 3

8007h – 8008h 8006h

DEVICE ID Dev / Rev

reserved reserved

Configuration Memory

CFGS = 0

CFGS = 1

PMADRH PMADRL

7 6 0 7 5 4 0

c4 c3 c2 c1 c0

r9 r8 r7 r6 r5 r4 r3

- r2 r1 r0

10 5

PMDATH PMDATL

7 5 0 7 0

-8004h – 8005h

Rev. 10-000004A_A0

ドキュメント内 PIC16(L)F1703/7 Data Sheet (ページ 102-118)