AVR-SD拡張回路(また改良)

| 2 Comments | No TrackBacks

前回の回路がまた間違ってました。

  1. アドレス線を使いたければ、データ線と同様ラッチしなければいけない
    これまでデータ線のみでアドレスのラッチを忘れていました。データのタイミングがAVRの割り込みからは間に合わないので、同然アドレスもラッチする必要があります。
  2. ラッチではなくてフリップフロップを使う必要がある(かも)
    出力リクエスト時の^WRとデータ線の確定タイミングは、8080ではデータが先に確定します。これに対し、8085や8086では^WRが先に確定するので、ラッチだと瞬間的にでたらめなデータがAVRに取り込まれる可能性があります。 Z80のドキュメントを調べてみたところ、CMOS版のZ84C004では"Data stable prior to /WR Fall"が-140ns~-10nsで、WRが先に確定することがあるようです。 実際にはAVRの反応はこれよりはるかに遅いことと、^IORQなど他の信号線とORをとっていることで実害はないと思いますが、念のためFlip Flop(374)を使うことにします。

先日日本に行った際に4075(3OR)は手に入らなかったので(代わりに4072(4OR)を買ったけど)、4078(8OR)を使って、占有I/Oアドレスをひとつだけで行くことにしました。 ソフトウェア的にはコマンドのための通信量が増えるのですが、まぁこれはトレードオフでしょう。 これ以上汎用ロジックICを増やすと、通常のDIPを使っている関係上、基板に乗り切らなくなってしまいますし、CPLDを使ったほうが簡単になるので。

というわけで、修正した回路が以下です。 I/Oアドレスは0x00に固定してしまいました。安直...。

20090127-AVR_SD-OR8.PNG

この修正で、ATmegaの6本ものI/Oが余ることになりました。 あと一つ減らすとATtiny861(20ピン)でも足りることになるのですが、実際にはRAM容量の関係(512Bytes)でちょっと厳しいですね。 FATでは512バイトのバッファを取らないとかなり性能的に厳しいので。

あ、XCKもXTAL1/2も空いているので、ATmega88(以上)なら外部クロックを使って高速に動作させることができますね。

No TrackBacks

TrackBack URL: http://www.markn.org/cgi-bin/mt/mt-tb.cgi/817

2 Comments

実験はできそうですか?

もし必要ならば、一枚でも実験基板作りますのでおっしゃってください。
P6側のソフトウェアはどうしましょうか?
AVR のプログラム領域から SRAM に読み出したりするのはどうでしょう?
で、P6 の外部 ROM としてマッピングするとかできないかな?
せっかくなので、32K の SRAM の半分を外部 ROM として、
後半分を 16K の RAM (PC-6006 コンパチ)としたり。

Leave a comment