« RX62Nのシリアルモニタを作る | トップページ | RX62NでSDRAMにアクセスする方法 »

2011.04.20

RX62NのシリアルモニタとSDRAM

RX62N用にシンプルなモニタをつくり、シリアルのコンソールから、ROM上にHEXファイルをロードして、実行できるようにしました。そのほか、メモリダンプや、1~4バイトのメモリ書き込み、メモリフィルなどの機能もつけました。

Rx62n_monitor

JTAG ICEを使わなくてもプログラムのロードができるようになったので、JTAGはバウンダリスキャン専用に使えます。

そもそも、RX62NのSDRAMのデバッグをしたかったのですが、どうもうまく動いていません。
SDRAMの初期化ルーチンはこんな感じです。

void HardwareSetup(void)
{
 SYSTEM.SCKCR.LONG = 0x00010100; // ICLK=96MHz,BCLK=48MHz,PCLK=48MHz SDCLK出力,BCLK出力
 SYSTEM.SYSCR0.WORD = 0x5A03; // 外部バス有効

 IOPORT.PF6BUS.BYTE = 0xD0; // SDCLK出力,SDRAM有効
 IOPORT.PF4BUS.BYTE = 0x3F; // A15,14出力無効、A13-0出力有効
 IOPORT.PF5BUS.BYTE = 0x30; // P56,57はI/Oポート、P51はI/Oポート、D31~D8有効
// PC[7:0]を外部アドレスA23~A16として使う
 BSC.SDCCR.BYTE = 0; // SDRAM無効
 BSC.SDSELF.BIT.SFEN = 0; // セルフリフレッシュ無効
 BSC.SDRFEN.BIT.RFEN = 0; // オートリフレッシュ無効

 BSC.SDIR.WORD = 0x00FF; // 初期化オートリフレッシュ間隔3サイクル、
 BSC.SDICR.BIT.INIRQ = 1; // INIRQビットを1にして初期化開始
 while(BSC.SDSR.BIT.INIST) {}

 BSC.SDCCR.BYTE = 0x30; // バス幅を32bitに設定 SDRAM動作はまだ許可しない
 BSC.SDMOD.WORD = 0x0880; // モードレジスタ設定 CASレイテンシ2
 while(BSC.SDSR.BYTE != 0) {}
 BSC.SDTR.LONG = 0x00000003; // ライトリカバリ1 CASレイテンシ2
 BSC.SDADR.BYTE = 0; // 8ビットシフト MXC=00

 BSC.SDRFCR.WORD = 0xfff; // 4096サイクルごとに1サイクル ?
 BSC.SDRFEN.BIT.RFEN = 0; // オートリフレッシュ有効

 BSC.SDAMOD.BIT.BE = 1; // SDRAM 連続アクセス不許可
 BSC.SDSELF.BIT.SFEN = 0; // セルフリフレッシュ無効
//BSC.SDCMOD.BYTE = 0; // 動作モードのエンディアンと同じ

 BSC.SDCCR.BYTE = 0x31; // SDRAM動作許可
}


こうやって初期化した後に、こんなプログラムを実行すると、
while(1)
{
 p = (unsigned char *)0x08000000;
 or(i=0;i<1024;i++) *p++ = i;
}

バウンダリスキャンで見る限り、SDRAMのROWアドレスは出力されているのですが、同一ページ内のアクセスの際にカラムアドレスが出力されていないことがわかります。
また、SDRAMの接続を32bit幅に設定しているのに、DQM2とDQM3が正しく動いていないようにも見えます。

Rx62n_sdaddr

それから、シリアルモニタでSDRAMの領域をダンプしてみると、連続する0x400バイトで同じ値になってしまっています。やはり、カラムアドレスが動いていないのでしょう。
Rx62n_400

SDRAM関係のモードレジスタの設定が間違っているのでしょうけど、まだ解決できていません。

それにしても、組み込みの初期デバッグに、バウンダリスキャンは便利です。MITOUJTAGでバウンダリスキャンをしなければ、このバグに気付くのに軽く数日を要したと思います。

Rx62n_bscan
↑バウンダリスキャン可視化

|

« RX62Nのシリアルモニタを作る | トップページ | RX62NでSDRAMにアクセスする方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« RX62Nのシリアルモニタを作る | トップページ | RX62NでSDRAMにアクセスする方法 »