フラッシュメモリのリードライト

M29F400用のソケット TSOP48ピンソケットを入手する。
アマゾンなどで販売されている
変換基板付きで販売されているのを購入すべきである。
筆者が注文したときは、基板付きがなかったので、単品で購入したが、入手してから愕然とした
3段チドリで 0.375mmピッチでずれている
ピン間隔は1.5mmである
こんな変換基板は販売されていない

パターンを作成する方法で対処した。
0.7mmのドリルであなを開け
ソケットを取り付けた

パターンを作成すると、変換基板の48ピンを
配線するより楽になる。

2)読込ーーーーーーーーー

SRAMは CE、OE をLOWに落として
アドレスを設定すれば、データバスD0〜D7にデータが出る

フラッシュメモリも同様に、目的のアドレスを入れ、チップセレクトするとデータが出力される

4Mのデータを書き込む時間は このマイコンのスピードで 約3〜4秒程度 LEDで、全部点灯で終了
消去は 約1〜2秒であった

プログラムである

ーーアドレスセットーーーーーーーーーーーーーーー
adress_out:

      lds w,addat0
      lds w1,addat1
      lds w2,addat2
      out portA,w
      out portC,w1
      sts portG,w2
      nop
ret
ーーーーーーーーーーーーー読込ーーーーー

read_ram1:
     rcall adress_out
     cbi portE,R_CE ; adress SET
     nop
     cbi portE,R_G ; adress SET
     nop
     nop
     in w,pinF
     sts ramdatA,w
     nop
     sbi portE,R_G
     sbi portE,R_CE
ret


ーーーーーーーー  書込み プログラムーーーーーーーーーーーーー
さて書込みは大変である
3バイトの書込みコマンドを毎回入れて、データを書き込んでいく
ポートFは 入力から出力へ変更する


write_data:
;
  LDI w,0xFF ;OUT
  sts DDRF,w ;

  sbi portE,W_G ; write--->high
  nop
  cbi portE,W_CE ; chip SET

;--------- add AAA
ldi w,0xAA
out portA,w
ldi w,0x0A
out portC,w
ldi w,0
sts portG,w
nop
ldi w,0xAA
sts portF,w

cbi portE,W_W ; write SET
nop
sbi portE,W_W
nop
sbi portE,W_CE
;--------- add 555
nop
cbi portE,W_CE
nop
ldi w,0x55
out portA,w
ldi w,0x05
out portC,w
ldi w,0
sts portG,w
nop
ldi w,0x55
sts portF,w

cbi portE,W_W ; write SET
nop
sbi portE,W_W
nop
sbi portE,W_CE
nop
;--------- add AAA
cbi portE,W_CE
nop
ldi w,0xAA
out portA,w
ldi w,0x0A
out portC,w
ldi w,0
sts portG,w
nop
ldi w,0xA0
sts portF,w

cbi portE,W_W ; write SET
nop
sbi portE,W_W
nop
sbi portE,W_CE
nop
cbi portE,W_CE
;-------add+-data--------------------
lds w,addat0
lds w1,addat1
lds w2,addat2
out portA,w
out portC,w1
sts portG,w2


;
lds w,ramdatA
sts portF,w ;data

cbi portE,W_W ; write SET
nop
sbi portE,W_W
nop
sbi portE,W_CE
nop

;--IN mode ---------------
LDI w,0x00 ;IN
STS DDRF,w ;
write_data1: ;PB-BUSY
sbis pinB,W_RB ;Hなら次をスキップ
rjmp write_data1


;^^^^ polong^^^^^^^^^^^^^^
cbi portE,W_CE ; chip SET
nop
cbi portE,W_G ; read-->low
nop
nop
in w,pinF
sts ramdatBP,w
nop
sbi portE,W_G
sbi portE,W_CE

ret



ーーーー消去ーーーーーーーーー
SDRAMと異なるのは、プログラム前に初期に戻しておく必要がある
書込みと同様に 6バイトのコマンドでチップ消去する
昔なら、紫外線消去だろう

フラッシュメモリの使い方の概念がわかれば、後は簡単である

回路図

ATmega64 を使ったが データ16ビットを扱うためには ポートが足りない
74HC245などの双方向バスバッファでデータバスを切り替えれば良いが、面倒なので
8ビットモードで動作させることにした。

Dポートは4行のLCDのコントロール
PA、PC はアドレス
データはPFポートに配置した

3)書込みーーーーーー

書込みはSRAMのように簡単ではない
アドレスセットし、データをセットする その後、チップセレクトしてから、W端子をOFF-ON
することで、書込みできるが、目的のデータを入れる前に、書込みコマンド 3バイトを先に入れなけれならない。

更に、
SRAMは 00に書き込んで、FF書き込んで というように 常時再書き込みできるが
フラッシュメモリは、ビットを消すと言う概念である

つまり、最初は FF (ビットを立てておく)
例えば C3(1100−0011)を書き込んでしまうと
その後、F0 を再書き込みしても
     C0 (1100ー0000)になってしまう。

再度書き込む場合は チップイレースまたは(セクタイレース)をして メモリを FFに
戻してやる必要がある。

書込みは RY(ビジー)端子を見ながら書込みも必要である


4)消去ーーーーーー
  書込みと同様に 6バイトのコマンドを入力すれば良い
  

フラッシュメモリ M29F400 が入手できたので、これを使って書込み、読み出しに挑戦してみよう
512k×8ビット 256×16ビット の4Mのメモリである

データバスは D0〜D15 16ビット
アドレスバスは A0〜A17 まである
後は チップイネーブル端子 CE、OE W 
出力として ビジー端子 RYを持つ

BYTE端子を LOWにすると 8ビット Hで 16ビット出力する

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
フラッシュメモリの基本的な使い方の概念さえ知っていれば、簡単である
これが、以外に簡単に書かれていないので、英文マニュアルを読みながら苦労した

1)8ビットモードで使用する場合
  D0〜D7 を使う
  D15 は アドレスのAー1である

  すなわちマイコンのアドレス端子に接続する場合は
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
  マイコン        M29F400
 A0 ーーーーーーーー D15
 A1 ーーーーーーーー A0
 A2 ーーーーーーーー A1
 A3 ーーーーーーーー A2

というように ずらして接続する