「AKI-H8/3069F LANボードのDRAM増設」の編集履歴(バックアップ)一覧に戻る

AKI-H8/3069F LANボードのDRAM増設 - (2007/07/22 (日) 23:33:08) のソース

*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がこれ
#image(simms.jpg,http://www29.atwiki.jp/soukz/pub/simm/simm.jpg)
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|
と接続。
そして[[回路図>http://www29.atwiki.jp/soukz/pub/simm/simm_c.png]]
他のSIMMでこの接続が使えるかは不明。

後はひたすら配線作業するのみ。
こんな感じ
#image(wholes.jpg,http://www29.atwiki.jp/soukz/pub/simm/whole.jpg)
#image(backs.jpg)
うはー終わったーとか思ったらプルアップ抵抗入れるの忘れてて何となく[[空間的に配線>http://www29.atwiki.jp/soukz/pub/simm/chu.jpg]]。
CS6までつないじゃってますがエリア6はDRAMが使えないというのに後で気づいたからで実際意味がないです。

メインがUEW線で気休め程度に電源だけはジュンフロン線でやりました。
まだうまくできた方。ハンダ付けを楽しめるようになってきた。


**ソフト
DRAMを使うには3069のハードウェアマニュアルのP188にあるように
ABWCRの設定、RTCORの設定、RTMCSRのCKS2-0ビットの設定、DRCRBの設定、DRCRAの設定が順に必要になります

&bold(){ABWCR(バス幅コントロールレジスタ)}
エリア0〜1につながれたROM/RAMが8ビットアクセスであるか16ビットアクセスであるかを設定する。
|ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER:0|
||ABW7|ABW6|ABW5|ABW4|ABW3|ABW2|ABW1|ABW0|
それぞれ8ビットアクセスの時1,16ビットアクセスの時0。
エリア3,4,5に16ビットアクセスのDRAMを増設したので"11000111"=0xC7。

&bold(){RTCOR(リフレッシュタイムコンスタントレジスタ)}
RTMCSRで決められた周期でRTCNTがカウントアップし、RTCNTとRTCORとが毎回比較され、一致するとリフレッシュ要求が起こる。

&bold(){RTMCSR(リフレッシュタイマコントロール/ステータスレジスタ)}
|ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER:0|
||CMF|CMIE|CKS2|CKS1|CKS0|(1)|(1)|(1)|
CMF,CMIEは使わないので初期値の0にしておく。
CKSによってRTCNTのカウントするタイミングを設定する。
システムクロックφとすると、
|CKS||
|CENTER:0|カウントなし|
|CENTER:1|φ/2|
|CENTER:2|φ/8|
|CENTER:3|φ/32|
|CENTER:4|φ/128|
|CENTER:5|φ/512|
|CENTER:6|φ/2048|
|CENTER: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

&bold(){DRCRB(DRAMコントロールレジスタB)}
|ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER: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


&bold(){DRCRB(DRAMコントロールレジスタB)}

書き途中......