みなさん、こんばんは。小島@和歌山大学です。 難解な問題にブチ当たったのですが、どなたか抜本的な 解決方法をご存じないかと期待して投稿します。 秋月の3067Fのボードで、最初に付いている32KBのSRAMを 取り除き、512KBのSRAMを取り付けました。このSRAMに以 下のような容量で値を書き込んだのですが、だいたい100 バイト程度書いた辺りから、値がまったくのデタラメになっ てしまいます。 unsigned int i; unsigned int record0[60000]; unsigned int record1[60000]; unsigned int record2[60000]; unsigned int record3[60000]; for(i=0; i<10000; i++){ record0[i] = 0x5555; record0[i] = 0x5555; record0[i] = 0x5555; record0[i] = 0x5555; } これに対し、次のような感じならば問題なく書けます。 unsigned int i; unsigned int record0[60000]; unsigned int record1[60000]; unsigned int record2[60000]; unsigned int record3[60000]; for(i=0; i<10000; i++){ record0[i] = 0x5555; } for(i=0; i<10000; i++){ record1[i] = 0x5555; } for(i=0; i<10000; i++){ record2[i] = 0x5555; } for(i=0; i<10000; i++){ record3[i] = 0x5555; } つまり、短い間隔で連続しないアドレスをアクセスす ると、最初の内は大丈夫でも、ある時期を境に正常に アクセスできなくなるようなのです。逆に、同じタイ ミングでもシーケンシャルなアクセスならば問題が発 生しないようです。 バスコントローラの設定は一番遅い設定にしています し、クロックも仕様書の範囲内(20MHz)です。試しに 16MHzにしてみましたが、結果は同じでした。 また、CSとWR波形も監視してみましたが、致命傷にな るような鈍り方もしていませんでした(もっとも、こ ちらは専門外なので、実はダメな波形なのかもしれま せんが)。 とにかく、接触不良であったり、パターンが切れかかっ ているというのであれば、ランダムアクセスであれ、 シーケンシャルアクセスであれ、リードライトが正常 にできない場所が現れそうな物ですが、シーケンシャ ルの場合にはそれがまったく現れないのが理解できま せん。 何か、こういうときにはハードのこの辺が怪しいとか、 ソフトでこうすれば解決するかも知れないとか、アド バイスありましたらお願いします。 ちなみに、換装したSRAMは日立製の70nsタイプの物で す。 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 小島 央 (Hiroshi Kojima)@和歌山大学大学院システム工学研究科 ∩∩ ・E-mail 1: s012019@xxxxxxxxxxxxxxxxxxxx "∪" ・E-mail 2: funfly@xxxxxxxxxxxx http://www.kisweb.ne.jp/personal/funfly/index.html -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-