• 締切済み

フラッシュメモリアクセス

スパンションのフラッシュメモリ(S29AL008J)の処理について質問です。 チップイレーズの処理でバスサイクルの3回目と4回目の間にウェイトを 数マイクロ秒入れないと正常にコマンドが受付られず全くイレーズできま せんでした。 データシートを見てもそこにウェイトを入れる仕様にはなっていません。 メーカー代理店に聞いてもわからないようです。 書き込み(プログラム)はウェイトを入れなくても正常に行えます。 16ビットモードで下記の通りコマンドを実行しています。 /* 1回目 */ dat = 0x555; /* 555番地 */ *dat = 0x00AA; /* AA */ /* 2回目 */ dat = 0x2AA; /* 2AA番地 */ *dat = 0x0055; /* 55 */ /* 3回目 */ dat = 0x555; /* 555番地 */ *dat = 0x0080; /* 80 */ 数マイクロ秒待つ /* ウェイト*/ /* 4回目 */ dat = 0x555; /* 555番地 */ *dat = 0x00AA; /* AA */ /* 5回目 */ dat = 0x2AA; /* 2AA番地 */ *dat = 0x0055; /* 55 */ /* 6回目 */ dat = 0x555; /* 555番地 */ *dat = 0x0010; /* 10 */ 何かすっきりしないので悩んでいます。 ご存知の方いらっしゃいましたら教えてください。

みんなの回答

  • bug_bug
  • ベストアンサー率78% (36/46)
回答No.2

付記です. コード上怪しい点を感じましたので追記してみます. dat変数の型定義が半端な場合, 記載の不具合が発生する可能性があります. volatile unsigned short *dat; なら問題は発生しませんがvolatileが抜けていた場合, コンパイラの最適化により3回目のコマンド入力が省略されてしまいます. (同じアドレスオフセットへの書き込みのため, 最終処理のみ残る) ACタイミングよりこっちの方が怪しいので, 未確認であれば優先的に見ておくべきでしょう. ご注意ください.

yuuhizuki
質問者

お礼

bug_bug様 ご指摘ありがとうございます。 すみません ソースコードは簡略化して記載してしまいました。 volatileは入れてあります。

  • bug_bug
  • ベストアンサー率78% (36/46)
回答No.1

デバイス側のPIN端で制御信号の波形を見るのが一番解決が早いと思います. (個人でオシロは難しいですが, 代理店に確認されてる辺りでお仕事と解釈してます) 提示の情報ではJEDEC準拠のWORD形式のコマンドを入力されているようで, 特に間違いは見当たりません. 症状から私であれば「Chip Eraceができないのではなく, Program(書き込み)が実力でできてしまっている」とアタリを付けます. 怪しいのはACタイミング上/CEのHigh期間であるとか同Setupの条件などですが, 挙げるとキリがないので割愛します. メモリコントローラ側がワンチップマイコン等であれば話は簡単です. バスコントローラのクロックを下げたり, 設定値を変更し信号制御のタイミングを間延びさせることでウェイト無しでアクセスできると思います. これが確認できれば, AC条件を満たせていない可能性が高いと思います.(断言はできませんが) コントローラ側や接続について情報があれば, もう少し良いアドバイスができるかもしれませんが・・・

yuuhizuki
質問者

お礼

bug_bug様 早速の回答ありがとうございます。 ワンチップマイコンを使用していますので 色々と設定を変更して確認してみます。 ちなみにマイコンのバス設定は16bit、3ステートアクセス、 ウェイトなしです。 少し時間がかかるかもしれませんが、 何か分かりましたら、結果を報告します。 ありがとうございました。

関連するQ&A