2012年10月21日

RS232Cボードを動かす(1)

  RS232Cボードをせっかく作ったので、とりあえずファイル転送が出来るかどうか試していました。

  正規のボード(PC-6061/PC60m61/PC-6061SR)では、ハードウエア的には、600/1200/2400/4800bps の転送速度が出せます。さらに今回作成したボードは、9600bps が出せるようにしました。

  ただ、BASIC でPRINT#-2、INPUT#-2 でデータを受け渡しする時、受信側(INPUT#-2)では、9600bps でデータ落ちが発生してしまいます。タイマ割り込みとか、VSYNC の関係かと思いましたが、違うようでした。

  以下、解析結果です。


・リバースケーブル
 通常、パソコン対パソコンで通信をするときは、リバースケーブルを使います。
 リバースケーブルの形式にもいろいろありますが、一番ちゃんとしているのは以下のような接続です。

リバースケーブル


 TXD(送信データ)が、相手のRXD(受信データ)に接続。
 RTS(送信要求)が、相手のCTS(送信可)に接続。
 DTR(データ端末レディ)が、相手のDSR(データセットレディ)に接続。


・データ送信

 DSR=on 、TxEMPTY=1、TxRDY=1 になるまで待つ。その後、データを出力する。

 DSR は、相手の端末の準備が完了している時は、on になっています(DTR=on として出力される)。
 TxEMPTY は、送信するデータがない時(つまりデータを送信したい時)に1になります。
 TxRDY は、CTS がon の時に1になります。


 結局、速度に関係なく、データが出力できる時には出力します。


・データ受信

 受信側は割り込みで処理されています。

 データを受信すると、RxRDY という信号がon になります。これは、サブCPUに接続されています。
 サブCPU は、ある一定の間隔でRxRDY を監視しており、on になるとメインCPUへ割り込みを掛けます。

 メインCPUは、割り込みがあると、まず RTS をoff にします(処理中にさらにデータが来るのを防ぐため)。
 その後、受信データを読み込んで、RS-232C用バッファに格納します。
 最後に、バッファの残量を確認して、2バイト以上残っていれば、RTS をon に戻します。


 ここで問題は、サブCPUのRxRDYの監視タイミングで、どうもかなり遅いようです(2ms程度?)。

 そのため、9600bps 以上では、受信データを取りこぼすようです。




posted by えすび at 18:50| Comment(0) | P6解析:RS232C | このブログの読者になる | 更新情報をチェックする