前回記事に書いたシグネチャーアナライザのHP5006Aですが、こいつを汎用マイコンの故障検出に使うにはMPUをフリーラン状態にしなければどうしようもないということで、フリーランについて調べてみました。
私の持っている6809関係の書籍を一通り確認してみましたがフリーランに関する説明はありませんでした。
やはりアスキーの 6809ハンドブック
(どなたかご存知でしたら教えて下さい^^;;)
インターネットで集めたマイコンのフリーランの資料では68系に限らず80系や68K系等も
同じ特性で動作すると記述がありますのでZ80関係の書籍も調べてみましたがフリーランの正体が
分からず状態です^^;;;
(どれも英文なので話の半分も見えていなかったりします・・・・)
と、いうわけで予備機の数台あるFM-8実機で動作を調べてみました。
アスキの6809ハンドブック P.190を引用させてもらうと
ボードを保守するために、ボード上ではフリーランするようにデータバスをシステムから開放し、プロセッサのリセット直後から1バイト命令たとえばCLRB($5F)が実行されるように抵抗ジャンパを組みます。リセット直後、プロセッサは$5F5F番地の$5F(CLRB)を実行します。各アドレスラインはCLRBの1バイト命令の実行により、ちょうどバイナリカウンタになります。
とあります。
これを読んだだけでは私には具体的に何をすればいいのか分かりませんでしたが、HP社のアプリケーションノートAN-222に具体例がありました。
13ページからの「Section 4 General Hardware Considerations」が私のやりたいことにかなり近いと思われます。
アプリケーションノートでの実例は6800MPUですが、6809ハンドブックのP.191に「6809,6800,6801/3も等しくなります」
とあるので6809同様と考え読み進めます。
アプリケーションノートの16ページに6800でCLRBを使ったフリーランの実例がありました。
MPUに付けるとこんな感じ^^
(結論を先に書くとFM-8で実験する場合メインMPUではNGでサブMPUでSC28を外すと安定します)
本当は割込み線(NMI,IRQ,FIRQ)もプルアップが必要なようですが、オシロで見たところ必要なさそうなので省略してます。
と、いうわけでこの状態で電源オン、MPUをスタートさせます。
アドレスバスに発生するアドレスをロジアナで測定してみると、
なんと、きれいなカウンタ出力が出ていました。
きちんと$FFFF番地から$0000にループしているようです。
ときどきバス無効?? の$FFFFが出ますが1番地ずつインクリしています。
アドレスバスの波形を見ると、どうやらMPUのフリーランというのはPC値をそのままアドレスバスに番地出力するもので、0番地からFFFF番地を無限ループする仕組みのようです。
その方法としてはアドレスバス~データバスになっている閉ループ回路でデータバスを開放して開ループにすることでフリーランモードになると書かれていました。
その際、カウンタのインクリメントの条件としてデータバスに命令を指定するとその命令ステップでインクリするようです。
シグネチャーアナライザでアドレス関係の回路をテストするためには1バイト命令で1番地ずつインクリすることで目的の指示値が得られる仕組みのようでした。
シグネチャーアナライザは、6809に限らずZ80や68K等どのMPUでも応用できるようで、
データバスにNOP等の1ステップアドレスをインクりする命令に相当するデータを作っておき、MPUをRUNさせると延々とアドレスをインクリさせる動作に入り、その連続したアドレスバスの変化を利用した測定を行う測定器と理解しました。
MPUが無事にフリーランしたところで、シグネチャーアナライザを接続し指示を確認してみました。
測定条件は6809ハンドブックにある条件を使用しています。
START = A15立ち下がり
STOP = A15立ち下がり
クロック = E立ち下がり
この条件でアドレスバスの各指示を確認してみると
6809ハンドブックの通りの指示値が表示されました(^^)
A5ライン測定中 = 1U5P
(HP5006AはLED消灯で立下がり検出です。今回の測定ではSTART/STOP/CLOCKを立ち上がりにしても同じ指示値でした)
各アドレス線の指示値をメモ
ライン | 指示値 | ライン | 指示値 | ライン | 指示値 |
Vss | 0000 | A4 | 1U5P | A10 | 37C5 |
Vdd | 0003 | A5 | 0356 | A11 | 6U28 |
A0 | UUUU | A6 | U759 | A12 | 4FCA |
A1 | FFFF | A7 | 6F9A | A13 | 4868 |
A2 | 8484 | A8 | 7791 | A14 | 9UP1 |
A3 | P763 | A9 | 6321 | A15 | 0001 |
とりあえずMPUからのアドレスバス指示は全て確認が取れました。
あとは故障していない基板で各ポイントの指示値を調査して指示値の再現性があれば回路図にまとめることで障診断のヒントになるかと思われます。
しかし、フリーランも理解できていない、シグネチャーアナライザやロジアナの使い方も手探り状態では正しいデータはいつ収集できることやら・・・・
今回の実験では謎がたくさん出てきましたが、シグネチャーアナライザ使用の第一歩にはたどり着いた感じです。
(FM-8の場合、メインCPU回路やサブのSC28が付いた状態では正常にフリーランしないので、フリーランの条件などもっと情報を集める必要がありそうです・・・)
謎はおいおいまとめていく予定です(^^)
View Comments
samも「アスキーの 6809ハンドブック」を愛用しています(^^
samはHWについてはよくわかりませんが、データバスの値を$5F固定にするということで、
こうするとどのアドレスを呼んでも$5F固定でCLRBの命令ですべてのアドレスが埋まることになり、
リセットベクタは$5F5F、つまりリセット直後$5F5Fから実行、延々とCLRBを実行する・・・
ブランチしないのでアドレスバスはきれいにカウントされていくということのようですね(^^;
Z80(8080や8085も一緒)の場合はリセット後は0000hから実行と決まっているので
データバスを00h(NOP)や任意の1バイト命令の値にすると延々と実行する
と理解しました。おもしろいですね・・・
6809ハンドブックを見たときに故障個所を見つけることのできる測定器があるのを見て衝撃を受けました^^
S1はほとんどゲートアレイ化されているので応用は難しそうですが、故障中のFM-11AD2+を修理したくてHP5006Aを入手しました。
そういえば、FM-11のシグネチャリストも作らずにそのままになっていますね・・・
完全に忘れられたチャレンジになってます^^;;;
このシグネチャアナライザという測定器を知るまではMPUをカウンタにしてアドレスを連続で発生させるという使い方は知りませんでした(^^)