AN702-00033-1v1-J

スタータキットを用いた
フラッシュオペレーション例
New 8FX Family
8-BIT MICROCONTROLLER
MB95560H/570H/580H series
APPLICATION NOTE
Publication Number AN702-00033
Revision 1.1
Issue Date January 31, 2014
A P P L I C A T I O N
N O T E
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
N O T E
目次
対象製品 ............................................................................................................................. 4
1
はじめに..................................................................................................................... 5
2
プログラミングのアルゴリズム ................................................................................. 6
2.1
概要 ........................................................................................................................ 6
2.2
フラッシュメモリの特長 ........................................................................................ 6
2.3
セクタ構成 ............................................................................................................. 6
2.4
フラッシュメモリのレジスタ ................................................................................. 7
2.5
フラッシュメモリの自動アルゴリズム起動 ........................................................... 8
3
ソースコード ............................................................................................................. 9
3.1
flash.asm ................................................................................................................ 9
3.2
Main.c ................................................................................................................... 15
4.
フラッシュ処理に関する注意事項 ........................................................................... 18
5.
その他の情報 ........................................................................................................... 19
改版履歴 ........................................................................................................................... 20
January 31, 2014, AN702-00033-1v1-J
3
A P P L I C A T I O N
N O T E
対象製品
本アプリケーションノートに記載されている内容の対象製品は、下記の通りです。
シリーズ名
MB95560H
品種型格 (パッケージサフィックスは除く)
MB95F564H,
MB95F564K,
MB95F563H,
MB95F563K,
MB95F562H,
MB95F574K,
MB95F573H,
MB95F573K,
MB95F572H,
MB95F584K,
MB95F583H,
MB95F583K,
MB95F582H,
MB95F562K
MB95570H
MB95F574H,
MB95F572K
MB95580H
MB95F584H,
MB95F582K
4
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
1
N O T E
はじめに
このアプリケーションノートでは, Spansion New 8FX ファミリ MB95560H/570H/580H
シリーズを例としたフラッシュの書換え処理について説明します。他の New 8FX ファミリ
共通で応用が可能です。プログラミングのアルゴリズム説明, flash.asm, フラッシュ消去の
C ソースコード, フラッシュ書き込みの C ソースコード, および Main.c を含む包括的な
プロジェクトについて説明します。
January 31, 2014, AN702-00033-1v1-J
5
A P P L I C A T I O N
2
N O T E
プログラミングのアルゴリズム
フラッシュ処理のアルゴリズム
2.1 概要
本品種に搭載されているデュアルオペレーションフラッシュメモリはユーザプログラムが
フラッシュメモリ上で動作している場合でも, バンクの異なるフラッシュメモリの消去や,
書込みが可能です。アプリケーションノートではフラッシュメモリの上位バンクより下位
バンクに対するセクタ書込み、セクタ消去の例を示します。
2.2 フラッシュメモリの特長
• セクタ構成:上位バンク 4KB / 8KB / 16KB + 下位バンク 2KB x2
• 自動書込みアルゴリズム (Embedded Algorithm)
• データポーリングによる書込み/消去完了の検出
• CPU 割込みによる書込み / 消去完了の検出
• JEDEC 標準規格コマンドとの互換性
• 消去 / 書込みサイクル (最小):100,000 回
2.3 セクタ構成
図 2-1 は, 8/12/20 KB フラッシュメモリのセクタ構成を示しています。図には, 各セクタ
の上位および下位アドレスが示されています。
図 2-1:8/12/20 KB フラッシュメモリのセクタ構成
6
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
N O T E
2.4 フラッシュメモリのレジスタ
図 2-2 に , フ ラ ッ シ ュ メ モ リ の レ ジ ス タ を 示 し ま す 。 詳 細 に つ い て は ,
MB95560H/570H/580H シリーズのハードウェアマニュアル第 20 章を参照してください。
図 2-2:8/12/20 KB フラッシュメモリのセクタ構成
January 31, 2014, AN702-00033-1v1-J
7
A P P L I C A T I O N
N O T E
2.5 フラッシュメモリの自動アルゴリズム起動
フラッシュメモリの自動アルゴリズムを呼び出す基本コマンドには、読出し/リセット、書
込み、チップ消去、セクタ消去という 4 つのタイプがあります。図 2-3 にコマンドの一覧
を示します。
図 2-3:コマンドシーケンス
MB95560H シリーズのハードウェアマニュアル記載のコマンドアドレスに 0xUAA8 と記載
のある版数のものがあります。他の New 8FX ファミリ同様に 0xUAAA にてアクセスが可能
です。 本アプリケーションノートではコマンドアドレスを 0xUAAA として取り扱っていま
す。
8
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
3
N O T E
ソースコード
この章では、サンプルコードについて説明します。
3.1 flash.asm
flash.asm は、フラッシュ書込み、セクタ消去を実行するためのアセンブリコードです。
_EraseStart は, flash.asm 内のセクタフラッシュ消去ルーチンの開始アドレスです。
_WriteStart は, flash.asm 内のフラッシュ書込みルーチンの開始アドレスです。それらは,
main () 内の命令によってコールできるようにエクスポートしています。
.EXPORT _EraseStart
.EXPORT _WriteStart
SWRE0 にて書込みを行うセクタの許可を行います。
セクタ SA0 または SA1 への消去書込みを行うには SA0E/SA1E の両方を”1”に設定します。
MOV
A, #03H
MOV
SWRE0,A
; SA0E/SA1E write enable
消去アドレスを EP から push して保存します。アドレスは main ()で割り当てられます。
_EraseStart:
;
MOVW
A,EP
PUSHW
A
; Save erase address
書込みアドレスを EP から push して保存します。書き込みデータを IX から push して保存
します。これらは main () で割り当てられます。
_WriteStart:
;
_write_address:
PUSHW
IX
MOVW
A,EP
PUSHW
A
January 31, 2014, AN702-00033-1v1-J
; Save write data
; Save write address
9
A P P L I C A T I O N
N O T E
フラッシュの自動アルゴリズムの消去および書込みに基づいて, UAAAH と U554H の U
は, 書込みアドレスの上位 4 ビットと同じです。
次のコードは, U を計算にて正しい UAAAH
と U554H を取得します。
MOVW
A,#0xF000
ANDW
A
MOVW
A,#0x0AAA
ORW
A
MOVW
EP,A
XCHW
A,T
MOVW
A,#0x0554
ORW
A
MOVW
IX,A
; 0x0AAA | (address & 0xf000)
; 0x0554 | (address & 0xf000)
レジスタ FSR でビット WRE を設定することによって, フラッシュ書込みを有効にしま
す。
SETB
10
FSR:WRE
; Write Enable
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
N O T E
フラッシュメモリ セクタ消去の自動アルゴリズム
MOV
A,#0xAA
MOV
@EP,A
MOV
A,#0x55
MOV
@IX,A
MOV
A,#0x80
MOV
@EP,A
MOV
A,#0xAA
MOV
@EP,A
MOV
A,#0x55
MOV
@IX,A
POPW
A
MOVW
EP,A
MOV
A,#30H
; The last data. Sector erase
MOV
@EP,A
; Start Erase
January 31, 2014, AN702-00033-1v1-J
; 0x*AAAH <= 0xAA
; 0x*554 <= 0x55
; 0x*AAAH <= 0x80
; 0x*AAAH <= 0xAA
; 0x*554 <= 0x55
; Restore Erase address SA
11
A P P L I C A T I O N
N O T E
フラッシュメモリ書込みの自動アルゴリズム
12
MOV
A,#0xAA
; 0xUAAAH <= 0xAA
MOV
@EP,A
MOV
A,#0x55
MOV
@IX,A
MOV
A,#0xA0
MOV
@EP,A
POPW
A
MOVW
EP,A
POPW
IX
MOVW
A,IX
; write data PD
MOV
@EP,A
; to write flash
; 0xU554 <= 0x55
; 0xUAAAH <= 0xA0
; write address PA
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
N O T E
消去ループ
消去/書込み消去コマンド発行後、RDY ビットが”0”となるまでに 2 マシンクロック(MCLK)
の遅延があります。そのため RDY ビット確認処理ループ実行前に NOP を 2 回挿入します。
詳細はハードウェアマニュアルの第 20 章を参照ください。
NOP
NOP
EraseLoop:
BBS
FSR:RDY,EraseEnd ; Erase Flash successes?
MOV
A,@EP
AND
A,#0x20
BZ
EraseLoop
BBS
FSR:RDY,EraseEnd ; Erase Flash successes?
; Check Time Out?
NOP
BBS
FSR:RDY,EraseEnd ; Erase Flash successes?
書込みループ
NOP
NOP
WriteLoop:
BBS
FSR:RDY,WriteEnd ; write Flash successes?
MOV
A,@EP
AND
A,#0x20
BZ
WriteLoop
BBS
FSR:RDY,WriteEnd ; write Flash successes?
; to check time out?
NOP
BBS
FSR:RDY,WriteEnd ; write Flash successes?
January 31, 2014, AN702-00033-1v1-J
13
A P P L I C A T I O N
N O T E
フラッシュ消去失敗, フラッシュのリセット, および A レジスタでのエラーフラグ設定
EraseError:
MOV
A,#0xF0
MOV
0xFF00,A
; Reset Flash
MOV
A,#01H
; Set error Flag
フラッシュ書込みの失敗, フラッシュのリセット, および A レジスタでのエラーフラグ設定
WriteError:
MOV
A,#0xF0
MOV
0xFF00,A
; Reset Flash
MOV
A,#01H
; Set error Flag
レジスタ FSR でビット WRE をクリアすることによって, フラッシュ書込みを無効にし
ます。
CLRB
FSR:WRE
; write disable
フラッシュ消去が成功した場合は, 成功フラグを A レジスタへ設定します。
EraseEnd:
MOV
A,#00H
MOVW
EP,A
; normal ack
フラッシュ書込みが成功した場合は, 成功フラグを A レジスタへ設定します。
WriteEnd:
14
MOV
A,#00H
MOVW
EP,A
; normal ack
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
N O T E
3.2 Main.c
Main.c は、フラッシュ書込み、セクタ消去を実行するための C コードです。
クローバル変数を定義します。
unsigned char result, Flag;
unsigned short address;
unsigned char data;
3.2.1
消去アドレスの指定
アセンブリおよび C 言語のコンパイル規則に基づくと, アセンブリ言語の変数
「_address」は, C 言語の変数「address」と同じです。次のコードは, main () で割り当て
られた消去アドレスを EP に転送します。これは, flash.asm で使用されます。
MOVW A, _address
MOVW EP,A
アセンブリフラッシュ消去ルーチンは, 次のコードでコールされます。
CALL _EraseStart
_EraseStart は, flash.asm 内のフラッシュ消去ルーチンの開始アドレスです。
3.2.2
書込みアドレス指定
次のコードは, main () で割り当てられた書込みアドレスを EP に転送し, データを
flash.asm で使用される IX に転送します。
MOV A,_data
;write data
MOVW IX,A
MOVW A, _address ;write address
MOVW EP,A
アセンブリフラッシュ書込みルーチンは, 次のコードでコールされます。
CALL _WriteStart
_WriteStart は, flash.asm 内のフラッシュ書き込みルーチンの開始アドレスです。
January 31, 2014, AN702-00033-1v1-J
15
A P P L I C A T I O N
3.2.3
N O T E
プログラミング機能の使用方法
次に, サンプルの C ソースメインコードを示します。Main.c からの flash.asm の使用方法を
示しています。コード全体についてはサンプルコードを参照してください。
EraseStart は, flash.asm 内のフラッシュ消去ルーチンの開始アドレスです。WriteStart は,
flash.asm 内のフラッシュ書込みルーチンの開始アドレスです。EraseStart と WriteStart
は, main () 内の命令によってコールできるようにインポートされています。
アセンブリおよび C 言語のコンパイル規則に基づき, アセンブリ言語の「_EraseStart」は
C 言語の「EraseStart」と同じ, 「_WriteStart」は「WriteStart」と同じです。
extern EraseStart;
extern WriteStart;
ユーザは, フラッシュ処理の結果に応じた, エラー発生時の処理や成功時の処理を追加で
きます。サンプルではポートへの出力を行っています。
void error(void)
{
IO_PDR0.bit.P05=0;
// do something here LED2
}
void success(void)
{
IO_PDR6.bit.P64=0;
// do something here LED3
}
16
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
N O T E
消去/書込みアドレス「0xB000」(SA0)および書込みデータ「0xA0」は, グローバル変数の
アドレスとデータによって flash.asm に転送されます。書込みアドレス「0xB000」(SA0)
とデータ「0xA0」は, ユーザによって割り当てを行います。サンプルではアドレスとデー
タを固定しています。
3.2.4
セクタ消去処理の呼び出し
flash_erase () がコールされ, セクタ消去の結果がフラグに返ります。
//--------------------------------------------------------// Sector Erase flash
//---------------------------------------------------------
3.2.5
address = 0xB000;
// set write address (SA0)
Flag = flash_erase();
// flash sector erase routine
書込み処理の呼び出し
flash_write () がコールされ, フラッシュ書き込みの結果がフラグに返ります。
//--------------------------------------------------------// Write
//---------------------------------------------------------
3.2.6
address = 0xB000;
// set write address (SA0)
data = 0xA0;
// set write data
Flag = flash_write();
// flash write routine
フラグの判定
Flag ==1 はフラッシュ書込み失敗であり, error () で何らかの処理を行います。Flag == 0
はフラッシュ書込み成功であり, success () で何らかの処理を行います。
if (Flag == 1)
error();
else
success();
January 31, 2014, AN702-00033-1v1-J
17
A P P L I C A T I O N
N O T E
4. フラッシュ処理に関する注意事項
この項では, フラッシュ処理に関する注意事項を示します。
サンプルではフラッシュのセクタ消去コマンドを発行しています。チップ消去コマンドの
処理を行った場合、NVR 領域のデータはすべて消去され、内蔵 CR トリミングのプリセッ
ト値などが消去されてしまいますのでご注意ください。
詳しくはハードウェアマニュアルの NVR の章を参照してください。
18
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
N O T E
5. その他の情報
Spansion 製品に関するその他の情報については、下記の Web サイトをご覧ください。
http://www.spansion.com/JP/
January 31, 2014, AN702-00033-1v1-J
19
A P P L I C A T I O N
N O T E
改版履歴
20
版数
日付
内容
1.0 版
2013/3/5
新規作成
1.1 版
2014/1/31
社名変更および記述フォーマットの変換
AN702-00033-1v1-J, January 31, 2014
A P P L I C A T I O N
N O T E
免責事項
本資料に記載された製品は、通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 (ただし、用途の限定はあ
りません) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が
確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 (原子力施設における
核反応制御, 航空機自動飛行制御, 航空交通管制, 大量輸送システムにおける運行制御, 生命維持のための医療機器, 兵器シ
ステムにおけるミサイル発射制御等をいう) 、ならびに(2) 極めて高い信頼性が要求される用途 (海底中継器, 宇宙衛星等を
いう) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また
は損害についても、Spansion は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス
はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故, 火災事故, 社会的な損害を生じさ
せないよう、お客様において、装置の冗長設計, 延焼対策設計, 過電流防止対策設計, 誤動作防止設計などの安全設計をお願
いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制されてい
る製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。
商標および注記
このドキュメントは、断りなく変更される場合があります。本資料には Spansion が開発中の Spansion 製品に関する情報が
記載されている場合があります。Spansion は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする
権利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性, 完全
性, 実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、ま
た、明示, 黙示または法定されているあらゆる保証をするものでもありません。Spansion は、このドキュメントに含まれる
情報を使用することにより発生したいかなる損害に対しても責任を一切負いません。
Copyright © 2013-2014 Spansion Inc. All rights reserved.
®
®
®
TM
TM
商標:Spansion , Spansion ロゴ (図形マーク), MirrorBit , MirrorBit Eclipse , ORNAND 及びこれらの組合せは、米国・
日本ほか諸外国における Spansion LLC の商標です。第三者の社名・製品名等の記載はここでは情報提供を目的として表記
したものであり、各権利者の商標もしくは登録商標となっている場合があります。
January 31, 2014, AN702-00033-1v1-J
21