みなさん、こんばんは。小島@和歌山大学です。
難解な問題にブチ当たったのですが、どなたか抜本的な
解決方法をご存じないかと期待して投稿します。
秋月の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
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-