2022年2月11日金曜日

高速通信カードFT245の使い方の紹介

 アプリケーションでのFT245カードの使い方を紹介します

[4月18日追加] 末尾に「FT245カードの簡単な使用法」のダウンロード先を追加しました。

思い付きハードでソフトに七転八倒」さんが開発されたFM-7/77用の高速通信カードFT245カードをアプリケーションで使用する場合に、通信元と通信先の両方の対応の方法を紹介します。

FM-7/77に装着されたFT245カードからのWindows側への送信は通常のRS232Cでの通信と同様に1バイト単位で送信されますが、Windows側からFT245カードへの送信は1バイトのデータをb7の1ビットとb6~b0の7ビットに分けて2回で送信されますので、それに合わせてFM-7/77側、Windows側の送受信ルーチンを対応させる必要があります。

FT245カード


FM-7/77側:

従来のRS232Cの送受信ルーチンRCVCH, SNDCHを次のプログラムに置き換えます。RCVCHは2回受信して1バイトを構成しています。 


  1. *================================================
  2. *
  3. * 1chr snd/rcv routine for FT-245
  4. *
  5. *===== receive 1 chr =====
  6. * 1st received byte : bit7(located on bit6)
  7. * 2nd received byte : bit6-0
  8. * return A:input chr
  9. RCVCH EQU *
  10. PSHS B
  11. LDB #$01 read cmd
  12. BSR INWAIT
  13. BSR INDAT get 1st byte
  14. ANDA #$40 get bit6
  15. ASLA
  16. PSHS A save bit7 of chr
  17. BSR INWAIT (unnecessary?)
  18. BSR INDAT get 2nd byte
  19. ANDA #$7F get bit6-0 of chr
  20. ORA ,S bit7+bit6-0
  21. LEAS 1,S returns the SP
  22. RCVEND PULS B,PC
  23.  
  24. * wait for data receive
  25. INWAIT EQU *
  26. IWLOP LDA $FDFE wait until
  27. ANDA #$80 $FDFE bit7=0
  28. BNE IWLOP exist receive data
  29. IWEND RTS
  30.  
  31. *read data
  32. * return A:input data
  33. INDAT STB $FDFD input cmd
  34. LDA $FDFE get data
  35. CLR $FDFD
  36. RTS
  37.  
  38. *===== send 1chr =====
  39. * A:output chr
  40. SNDCH EQU *
  41. PSHS A,B,Y
  42. LDY #$0100
  43. LDB #$02 write cmd
  44. BSR OUTDAT
  45. SWAIT LEAY -1,Y wait
  46. BNE SWAIT
  47. PULS A,B,Y,PC
  48. *
  49. OUTDAT STA $FDFE output data
  50. STB $FDFD output cmd
  51. CLR $FDFD
  52. RTS
  53. *================================================


Windows等のアプリケーション側:

例としてVisualC++でのFormプログラムを示します。

受信用の関数 serialPort1->Read()には変更がありませんが、送信用の関数serialPort1->Write()は次の serial_Write()関数で置き換えます。


  1. serialPort1->Write(tbuf, 0, 1);をserialPort_Write(tbuf);に置き換える
  2. //RS232C, FT-245カード両用出力ルーチン
  3. //FT245カード用は出力データをbit7とビット6-0に分けて2回で送信する
  4. int serialPort_Write(array<Byte>^ dat)
  5. {
  6. if (frsft == 0) { //RS232C
  7. serialPort1->Write(dat, 0, 1);
  8. }
  9. else { //FT245
  10. array <Byte>^ odata = gcnew array<Byte>(2);
  11. //1st send
  12. odata[0] = (dat[0] & 0x80) >> 1;
  13. serialPort1->Write(odata, 0, 1);
  14. //2nd send
  15. odata[0] = dat[0] & 0x7f;
  16. serialPort1->Write(odata, 0, 1);
  17. }
  18. return 0;
  19. }


これだけの変更で、従来のRS232Cを使用したアプリケーションがFT245を使用した高速通信に置き換えることができます。

私はこれをWindows上の仮想ドライブ構築ソフトCpmDrvWin.exeやFbasDrvWin.exeなどに適用して快適に使用しています。

[4月18日追加] 「FT245カードの簡単な使用法」をOneDriveにアップしました。


0 件のコメント:

コメントを投稿