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

AKI-H8/3069F LANボードのDRAM増設 - (2007/08/04 (土) 02:15:16) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

*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を増設したのでABWCR="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(){DRCRA(DRAMコントロールレジスタA)} |ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER: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の設定が終わると次はバスの設定をします。 &bold(){WCRH,WCRL(ウェイトコントロールレジスタ)} |ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER: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 &bold(){ASTCR(アクセスステートコントロールレジスタ)} |ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER:0| ||AST7|AST6|AST5|AST4|AST3|AST2|AST1|AST0| 書き途中......
*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を増設したのでABWCR="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(){DRCRA(DRAMコントロールレジスタA)} |ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER: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の設定が終わると次はバスの設定をします。 モード5ではアドレスバスなどのバス関係のピンをバス用として使うのために それぞれのポートのDDRを出力モードにしないと使えないので P1DDR = 0xff アドレスA0-A7 P2DDR = 0x07 アドレスA8-A10 P8DDR = 0x0E CS1〜3 で有効にします &bold(){WCRH,WCRL(ウェイトコントロールレジスタ)} |ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER: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 &bold(){ASTCR(アクセスステートコントロールレジスタ)} |ビット|CENTER:7|CENTER:6|CENTER:5|CENTER:4|CENTER:3|CENTER:2|CENTER:1|CENTER:0| ||AST7|AST6|AST5|AST4|AST3|AST2|AST1|AST0| それぞれのエリアのアクセスステート数を決める。 前述のように(多少違うが)DRAMは速いので最小で十分。 よってASTCR="110000011"=0xC3 まとめると(ヘッダファイルはルネサスのからDLできるものを使用) BSC.RTCOR = 7; BSC.RTMCSR.BYTE = 0x37; BSC.DRCRB.BYTE = 0x98; BSC.DRCRA.BYTE = 0xB8; P1DDR = 0xff; P2DDR = 0x07; P8DDR = 0x0E; BSC.WCR.BYTE.H = 0xF0; BSC.WCR.BYTE.L = 0x0F; BSC.ASTCR.BYTE = 0xC3; #comment

表示オプション

横に並べて表示:
変化行の前後のみ表示: