RX62NでSDRAMにアクセスする方法
RX62NのSDRAMコントローラの設定方法は謎が多く、サンプルプログラムもなく、ペリフェラルジェネレータで生成したコードも意味不明なのでかなりてこずったのですが、レジスタの設定をちょこちょこ変えながら、オシロやバウンダリスキャンで波形を観察していくことで、完璧にアクセスできるようになりました。
前回、DQM2とDQM3が正しく動いていないと書きましたが、それはあるレジスタの設定に間違いがあったためです。「設定禁止」の値になっていたのです。正しく設定するとDQM2、DQM3はちゃんと動きました。
しかし、SDRAMが動くようになったものの、2つのバグに悩まされました。
1つめのバグは、SDRAMを初期化した後に2秒ほどアクセスできない現象が起きていたことです。初期化直後にいはメモリエラーが頻発し、なぜか2秒くらいすると、エラーが全くなくなるのです。
その原因はアドレス線の一部(BA0/1)が出力されていなかったことにありました。BA0とBA1が入力設定になっていたため、電気的に浮いてしまっていて、それが自然に充電されるまでに2秒くらいかかっていたのでしょう。
これも、バウンダリスキャンでBA0とBA1が入力になっていることを見て発見できました。
PF4BUSレジスタを正しく設定することで、BA0とBA1が出力されるようになりました。
これでメモリの全域に正しくアクセスできます。
次のバグは、SDRAMのオートリフレッシュを有効にすると、データの読み書きでエラーが生じることです。原因はSDRFCRレジスタのREFW[3:0]の設定でした。REFW[3:0]が0000(デフォルト)だと、オートリフレッシュコマンドを発行した直後に次のバンクアクティブを発行可能になってしまいます。そのため、エラーが生じます。
このレジスタは1回のオートリフレッシュを何クロックかけて実行するかを示すためにあります。SDRAMのアクセス速度は60~70nsなので、4サイクルに設定します。
これでSDRAMに正しく、エラーなく、全域にアクセスできるようになります。
memset関数で16Mバイト全域をフィルすると、1秒くらいでした。
SDRAMコントローラの完全な初期化コードは下記のURLに置いておきます。
http://www.tokudenkairo.co.jp/hiroba/?m=pc&a=page_fh_diary&target_c_diary_id=130&comment_count=0
この情報が、皆様のご参考になれば幸いです。
| 固定リンク




コメント
現在RX621でSDRAMを付けて動作させようとしています。
なかなかうまくいかず、検索でここに着ました。
SDRAMコントローラの完全な初期化コードのURLのリンクが切れているようです。
ご報告致します。
投稿: ま゛ | 2014.09.05 14:11