AKI-H8/3069F LANボードのDRAM増設
秋月で売られているこのLANボード、デフォルト(秋月が言うにおまけ)で2MバイトのDRAMが乗っているのに
いかんせんuClinuxを起動するだけでその大半を使うと言うことでuClinux使いにはDRAM増設が定石となってるようです。
実はまだuClinuxは動かしたことがないけどマイコン弄り手始めにDRAMを増設したときのメモ。
3069の仕様
3069は外部メモリ空間が8つのエリアによって分けられています。
このエリアのサイズはMD0~MD2ピンによって選ばれるモードによって左右されるんですが今回はモード5で動かします。
モード5はメモリ空間が16Mバイトで、それを8分割して一つのエリアは2Mバイトですが、
そのエリアのうちDRAMが使えるのはエリア2~5となっています
しかしこのLANボードにはエリア2に2MバイトのDRAMが既に接続されているのでこれ以上にDRAMが増設できるのは最大で6Mバイトとなります。
まぁ8Mもあれば何でも何とかなるでしょう・・・
そして、このエリア0〜7はCS0~7にそれぞれ対応していて望むエリアのCSにDRAMのをRASをつなげばいいです
あと私がはまった穴ですが、今回のように16bitアクセスのDRAMを使う場合
アドレスバスはA0からつなぐのではなく、A1からつなぐんだそうです。
ハード
デフォルトで5117800もしくは5117805のDRAMが乗ってるそうで、
これを買ってきてそのまま上に積むというのもいいんですが
私は家にあるPC98から抜いた72pinSIMMで増設を試みます。
そのSIMMがこれ
BUFFALOのEMV-P16Mというやつ。乗っているDRAMはOKI製M5118160A-60J(1Mバイトx16bit)が4つで合計8Mバイト。
これはOKIのページからデータシートがDLできるのでもらってきます
真ん中に付いているBUFFALOの石(MGA-24)が気になるけどデータシートが出てこないので無視することにします。
そしてこのDRAMとSIMMのピンとの接続をSIMMのピン表とDRAMのデータシート片手にひたすら調べてみた。
結果こんな感じ。
DRAMを上の画像のようにA~Bとすると
SIMM |
|
DRAM |
CAS0 |
→ |
C-UCAS,D-LCAS |
CAS1 |
→ |
C-LCAS,D-UCAS |
CAS2 |
→ |
A-LCAS,B-UCAS |
CAS3 |
→ |
A-UCAS,B-LCAS |
RAS0 |
→ |
C-RAS |
RAS1 |
→ |
D-RAS |
RAS2 |
→ |
A-RAS |
RAS3 |
→ |
B-RAS |
WE |
→ |
A,B,C,D-WE |
DQ1-8 |
→ |
C-DQ9~16,D-DQ1~8 |
DQ9-16 |
→ |
C-DQ1~8,D-DQ9~16 |
DQ17-24 |
→ |
A-DQ1~8,B-DQ9~16 |
DQ25-32 |
→ |
A-DQ9~16,B-DQ1~8 |
DRAMのOEはGNDにつないで常にH固定のよう
A0-9はABCD全て一緒に引き出されてます
この調べた結果から
SIMM |
|
H8/3069 |
CAS0,CAS2 |
→ |
LCAS |
CAS1,CAS3 |
→ |
UCAS |
WE |
→ |
WE |
RAS0 |
→ |
CS3 |
RAS1 |
→ |
CS4 |
RAS2 |
→ |
CS5 |
A0-A9 |
→ |
A1-A10 |
DQ1~16,DQ17~32 |
→ |
DQ1~16 |
と接続。
そして
回路図
他のSIMMでこの接続が使えるかは不明。
後はひたすら配線作業するのみ。
こんな感じ
うはー終わったーとか思ったらプルアップ抵抗入れるの忘れてて何となく
空間的に配線。
CS6までつないじゃってますがエリア6はDRAMが使えないというのに後で気づいたからで実際意味がないです。
メインがUEW線で気休め程度に電源だけはジュンフロン線でやりました。
まだうまくできた方。ハンダ付けを楽しめるようになってきた。
ソフト
DRAMを使うには3069のハードウェアマニュアルのP188にあるように
ABWCRの設定、RTCORの設定、RTMCSRのCKS2-0ビットの設定、DRCRBの設定、DRCRAの設定が順に必要になります
ABWCR(バス幅コントロールレジスタ)
エリア0〜1につながれたROM/RAMが8ビットアクセスであるか16ビットアクセスであるかを設定する。
ビット |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
ABW7 |
ABW6 |
ABW5 |
ABW4 |
ABW3 |
ABW2 |
ABW1 |
ABW0 |
それぞれ8ビットアクセスの時1,16ビットアクセスの時0。
エリア3,4,5に16ビットアクセスのDRAMを増設したのでABWCR="11000111"=0xC7。
RTCOR(リフレッシュタイムコンスタントレジスタ)
RTMCSRで決められた周期でRTCNTがカウントアップし、RTCNTとRTCORとが毎回比較され、一致するとリフレッシュ要求が起こる。
RTMCSR(リフレッシュタイマコントロール/ステータスレジスタ)
ビット |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
CMF |
CMIE |
CKS2 |
CKS1 |
CKS0 |
(1) |
(1) |
(1) |
CMF,CMIEは使わないので初期値の0にしておく。
CKSによってRTCNTのカウントするタイミングを設定する。
システムクロックφとすると、
CKS |
|
0 |
カウントなし |
1 |
φ/2 |
2 |
φ/8 |
3 |
φ/32 |
4 |
φ/128 |
5 |
φ/512 |
6 |
φ/2048 |
7 |
φ/4096 |
でRTCNTがカウントアップされる。
今回使うDRAMのデータシートからリフレッシュ周期は5117800=2048回/32mS,5118160=1024回/16msであるから最低でも1024/0.016=64kHzのリフレッシュ。
システムクロックは20MHzであるから、
CKS=6,RTCOR=7に設定し20MHz/2048*9=68.3kHzのリフレッシュ。
よって、RTCOR=7,RTMCSR="00110111"=0x37
DRCRB(DRAMコントロールレジスタB)
ビット |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
MXC1 |
MXC0 |
CSEL |
RCYCE |
(1) |
TPC |
RCW |
RLW |
MXCはカラムアドレスのビット数を設定する。
MXC |
|
0 |
8ビット |
1 |
9ビット |
2 |
10ビット |
おまけのDRAMにA0-9、増設したDRAMにA1-10にそれぞれカラムアドレス10ビットのものを使っているのでMXC=2
CSELはUCAS,LCASの出力端子の設定。PB4,5を使うのでCSEL=0
RCYCEはCASビフォアRAS(CBS)リフレッシュをするかしないか。するのでRCYCE=1
TPCはCBSリフレッシュにおいてCAS,RASをHにしたときのウェイトを決める。ウェイト1にするのでTPC=0
RCWはリード、ライト時のRAS,CAS間にウェイトを入れるかどうかを決める。必要ないのでRCW=0
RLWはリフレッシュ時のCAS,RAS間にウェイトを入れるかどうかを決める。これも必要ないのでRLW=0
よって、DRCRB="10011000"=0x98
DRCRA(DRAMコントロールレジスタA)
ビット |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
DRAS2 |
DRAS1 |
DRAS0 |
(1) |
BE |
RDM |
SRFMD |
RFSHE |
DRASはエリア2〜5のそれぞれででDRAMを使うのかSRAMなどを使うのかを設定する。
DRAS |
DRAMを使う空間 |
0 |
DRAMは使わない |
1 |
エリア2(CS2)のみ |
2 |
エリア2(CS2),3(CS3) |
3 |
エリア2,3をCS2だけで4Mの空間として使う? |
4 |
エリア2(CS2),3(CS3),4(CS4) |
5 |
エリア2(CS2),3(CS3),4(CS4),5(CS5) |
6 |
エリア2,3をCS2、エリア4,5をCS4で使う |
7 |
エリア2〜5をCS2で使う |
エリア2におまけDRAM,エリア3,4,5にDRAMを増設したのでDRAS=5
BEはDRAMが高速ページモードを使える場合は1で使うようにすると連続でメモリを読む場合は早くなる。このDRAMは使えるのでBE=1
RDMはBE=1のときにされるバーストアクセス時にRASアップモードを使うかRASダウンモードを使うか。おまけDRAMはRASダウンモード出ないといけないようなのでRDM=0
SRFMDはセルフリフレッシュをするかどうか。おまけDRAMは対応していないので禁止のSRFMD=0
RFSHEはRFSH端子からリフレッシュ信号を出すかどうか。今回接続していないので出力禁止のRFSHE=0
よって、DRCRA="10111000"=0xB8
こうしてDRAMの設定が終わると次はバスの設定をします。
WCRH,WCRL(ウェイトコントロールレジスタ)
ビット |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
WCRH |
W71 |
W70 |
W61 |
W60 |
W51 |
W50 |
W41 |
W40 |
WCRL |
W31 |
W30 |
W21 |
W20 |
W11 |
W10 |
W01 |
W00 |
W7-W0はそれぞれのエリアのウェイトステートを決める。
H8は20MHz動作なので1クロック50ns,DRAMのCASからのアクセス時間(tCAC)がmax15nsなので余裕で大丈夫・・・なはず
ということでDRAMを接続したCS2〜5のウェイトステートは0からW2〜5=0
よってWCRH="11110000"=0xF0,WCRL="00001111"=0x0F
ASTCR(アクセスステートコントロールレジスタ)
ビット |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
AST7 |
AST6 |
AST5 |
AST4 |
AST3 |
AST2 |
AST1 |
AST0 |
書き途中......