マイコン工作実験日記

Microcontroller を用いての工作、実験記録

NANDフラッシュへのアクセス

2008-05-11 15:58:21 | LCD
TechToysから購入したLCDには32MBのNANDフラッシュも搭載されていますので、こいつの読み書きに挑戦してみました。搭載されているのはHYNIXのHY27US08561Aという8ビット幅のものです。NANDをマイコンで使うのは初めてなので、データシートを最初からよみながらつなげてみました。

AT91SAM7SE256にはNANDフラッシュを接続するための信号として、NANDALE, NANDCLE, NANDWE, NANDOEが用意されています。SRAMやLCDをR/Wする際にはNWE/NOEが使われるのに対して、NAND用にはNANDWE/NANDOEが独立して用意されているのです。ところが、LCDボードではLCDとNANDのR/W信号は区別されておらず、共通となっています。そこで、セレクターとして74HC157を追加して、CE信号によりNANDWE/NANDOE と NWE/NOEのどちらをLCDボードにつなぐかを選択してやるようにしました。

その他のNANDフラッシュ関連信号としては、WPをプルアップしてやり、CEとR/Bを空いているGPIOで制御してやるように配線してやることで、ハードウェアの準備は完了。続いて、ソフトの準備です。サンプルのページ読み書きプログラムは、ATMELからもTechToysからも提供されていますので、それらを参照すれば簡単に試験準備は整います。まず最初にRESETコマンドを送り、続いてREAD IDコマンドを送って、正しくデバイスIDが読み出せることを確認しようとしました。ところが、これがちゃんと動いてくれません。

正しくIDが読み出せれば、0xAD, 0x75の2バイトのIDが返ってくるはずなのに、0x00, 0x00という結果になってしまいます。正しくNANDにアクセスできていないようです。ソフトは単純で間違えようが無いので、マイコンとLCDボード間の配線を確認してみますが、これも間違ってはいません。改めてLCDボードの回路図を見てみるとスグに原因がわかりました。なんと、LCDにつなげたデータバス16ビット(D0~D15)のうち、NANDフラッシュにつながっている8bitはD8~D15の上位8bitだったのです。SAM7SE256のNANDフラッシュインタフェースでは、8bit NANDアクセスの場合にはD0~D7の8bitでアクセスするので、実際には全くNANDフラッシュにアクセスできていなかったのです。

データ16ビットの上位と下位を入れ替えて配線しなおせば、NANDフラッシュへはアクセスできるようになります。しかし、そうしてしまうとLCDにアクセスする際には、座標や色データの16ビットをスワップしてやる必要が生じてしまいます。