2014.5.26

前へ
次へ
ホームページトップへ戻る

CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!


[第56回]


●ハードウェアによるウォームブート(7)

この週末は手一杯の状況でしたので、またもやホームページの更新ができませんでした。
できるだけ毎日少しでも書くように努めたいとは思っているのですけれど…。
途切れ途切れの状況が続いておりますことをお詫びいたします。
どうか今しばらく気長におつきあいをお願いいたします。

前回からの続きです。
前回はCPU RESETによるウォームブートを考えるにあたり、0000番地スタートをウォームブート専用にすることはできそうだ、ということを書きました。
今回は残る第二の問題点について考えてみます。
その問題点は、

2)CPU(Z8S180)はPIC18F14K50との間でUSB通信のためのデータのやりとりを行っている。
突然のCPUリセットはシステムをハングアップさせてしまうが、それを避けるにはどうすればよいか。

というものでした。
それを解決するために、まずはZ8S180とPIC18F14K50との間でのデータ通信の仕組みについて説明をします。
PIC18F14K50周りの回路図は以前にもお見せしていますが、もう一度お見せすることにいたします。



回路図のうちでZ8S180とPIC18F14K50との間でのデータの送受信に使われるのはRB7,RB6,RB5,RB4とRC0〜RC7です。
各信号を使ってデータの送受信を行なう仕組みを下に簡単なタイミングチャートを使って図示してみました。



どちらもPIC18F14K50の側から見た信号として表記しています。
上がZ8S180がUSB経由でWindowsパソコンに送るデータをZ8S180からPIC18F14K50に送信するときのタイミング図で、下はその逆にUSB経由でWindowsパソコンから受け取ったデータをPIC18F14K50がZ8S180に送信するときのタイミング図です。

Z8S180がPIC18F14K50にデータを送信するときは、まずPIC18F14K50のRC0〜RC7に送信データを送ったあとRB7をLにします。
PIC18F14K50は通常はRC0〜RC7の向きを入力にして、ラインがぶつからないようにしています。
そしてRB7がLになったのを確認すると、RC0〜RC7からデータを読み込み、RB5をLにします。
Z8S180はRB5がLになったことを確認するとRB7をHにして送信ルーチンを終了します。
PIC18F14K50はRB7がHになったことを確認するとRB5をHにしてZ8S180から受け取ったデータをUSB経由でWindowsパソコンに送ります。

その逆にPIC18F14K50がWindowsパソコンからUSB経由でデータを受け取ったときにはいきなりZ8S180にそのデータを送るのではなくて、一旦受信バッファに蓄えます。
Legacy8080のUSB通信では、Z8S180の側のプログラムは割込み処理ではなくて、プログラムの流れの中でデータの送受信が必要になった時点でPIC18F14K50を呼び出すポーリング処理を行なっています。

Z8S180はUSBデータの受信をするとき(主としてキー入力処理)は、RB6をLにしてPIC18F14K50に受信データの送出を要求します。
PIC18F14K50はRB6がLになったのを確認すると受信バッファのデータをRC0〜RC7に送出します。
PIC18F14K50はこのときだけRC0〜RC7の向きを出力にします。
そしてRB4をLにします。
Z8S180はRB4がLになったことを確認するとRC0〜RC7のデータを読み込みます。
Z8S180はそのあとRB6をHにします。
PIC18F14K50はRB6がHになったことを確認するとRB4をHにして、RC0〜RC7の向きを入力に戻します。

このときもし送出すべきデータが無い場合にはPIC18F14K50は通常はZ8S180からPIC18F14K50へのデータ送信のときの応答に使うRB5をRB4と同時にLにしてZ8S180に送出すべきデータがないことを知らせます。

以上がZ8S180とPIC18F14K50の間で行なわれるデータ送受信の仕組みです。
もしもこの手続きの途中で突然にZ8S180だけがリセットされるとどうなるでしょう。
PIC18F14K50からみると、突然Z8S180からの応答が停止してしまったことになって、そこでPIC18F14K50もハングアップしてしまいます。
それを回避するにはどうしたらよいでしょうか。

前回説明しましたように、Z8S180がリセットされたときはアドレス0000からプログラムの実行を開始しますが、そのプログラムは通常の処理とは異なり、ウォームブート専用の処理とすることができます。
それならばそのウォームブートプログラムのなかでPIC18F14K50にCPU RESETが行なわれたことを知らせることができればなんとかなりそうです。
しかし上でお見せした回路図を見ますとそのための余分な信号線はZ8S180の側にもPIC18F14K50の側にも残念ながら残っていません。
いえ、もし残っていたとしてもそれを今から追加使用するということになりますと、ジャンパ配線をするか再度基板を作り直すかのいずれかしかありません。
すでにお伝えしておりますように、Legacy8080は受注販売を開始しその第一ロットは先日葛Z術少年出版様に納入したばかりです。
今更追加配線を行なうなどとてもできません。
困った。
どうしよう…。

それが前に書きました「出口なし」ということでした。
しかしながら、そこで諦めてしまうのではなくて、なんとかならないものかと一生懸命に考えていますと、案外活路は開けてくるものです。
うまい解決策がありました。

あ。
せっかくですので皆様もどうすればよいか、ちょっと考えてみてください。
その解決策につきましては次回に説明することにいたします。

CPLD+SIMMを使ってUSBプロトコルの解析を![第56回]
2014.5.26upload

前へ
次へ
ホームページトップへ戻る