Show page source of serial #122244

Tera Term でシリアルポートに関するバグレポートが多くあり、根強く更新されているものもある

本当にバグがあるのか、デバイスドライバやケーブルや対向装置のせいで動かすことが不可能な指定をして「動かない」と言っているのかわからない

 * #27448 !TerraTerm Crash
 * #32320 COM flow with control : missing data in log file
 * #39187 Hardware Flow Control
 * #39369 CH340Gでフロー制御効かない件への対応
 * #42103 HW Flow Control not working
 * #45271 Hardware Flow Control Does not work in Teraterm
 * forum_message:82938 RTS & CTS handshaking not working in Teraterm

=== 動かないというのではないが、気になるticket
 * #36094 XON/XOFF hardcoded limits too high

= シリアルに関する資料っぽい情報
 * #31573 シリアル接続 低速通信レート時
   * 「ドライバで対応している転送速度」というものがある。Tera Term では好きに速度を指定できるが、対応している速度でないと正しく動かない。
 * #10945 シリアル通信時のフロー制御不具合
   * BSOD が起きるのはたいていソフトのせいではなくドライバのせい
   * USB-Serail 変換チップのメーカー
      * FTDI
      * Prolific

= 手持ちの動作確認に使える機器
 * PC1(COMあり)
   * Windows 8.1
   * チップ: GD75232?
 * PC2 !ThinkPad X61 + ウルトラベース X6(COMあり)
   * Windows XP
   * チップ: PC87392?
 * PC3(COMあり)
   * Windows XP
   * チップ: MAX3243?
 * PC4(COMなし)
   * Windows 10
 * PC5(COMなし)
   * Windows 11
 * PC6 DELL !OptiPlex 790(COMあり)
   * Windows 10
 * PC7 DELL !OptiPlex 7010(COMあり)
   * Windows XP
 * PC8 !ThinkPad X200s (COMなし)
   * Windows 7
 * PC9 !ThinkPad X201 (COMなし)
   * Windows 10
 * PC10 HP Pavilion dv6000(COMなし)
   * Windows Vista
 * USB-Serial 変換器 [https://www.buffalo.jp/product/detail/bsusrc0605bs.html バッファロー BSUSRC06]
   * チップ: FT232BM
 * USB-Serial 変換器 [https://www.ratocsystems.com/products/rs232c/232cusb/usb60f/ ラトックシステム REX-USB60F]
   * チップ: FT232BL
   * [https://www.ratocsystems.com/pdffile/convert/usb60f.pdf マニュアル] によると「フロー制御なし」「RTS/CTS」「DTR/DSR」「XON/XOFF」に対応
 * シリアルケーブル(ストレート)
   * 9ピンすべて結線
   * 他ピンへの結線なし
   * テスターで確認
 * シリアルリバースアダプタ / [https://www.elecom.co.jp/products/AD-R9.html ELECOM AD-R9] D-Sub9ピンメス - D-Sub9ピンオス
   * 2-3, 3-2, 4-6, 5-5, 6-4, 7-8, 8-7, SHELL-SHELL 結線
   * 1 と 9 は結線なし
 * シリアルケーブル(クロス) / [https://www.sanwa.co.jp/product/syohin?code=KR-ECLK2 サンワサプライ KR-ECLK2]
   * 2-3, 3-2, 4-6, 5-5, 6-4, 7-8, 8-7, フレーム-フレーム 結線
   * 1 と 9 は結線なし

= #45271 テスト
 * 送信側は {{{ttcomtester --device com1 --rts hs --verbose}}} と起動する
 * 受信側は {{{ttcomtester --device com1 --rts on --verbose}}} と起動する
 * 送信と受信を入れ変えるときは引数を変えて ttcomtester を起動し直す

|| テスト                   ||     ||                  ||                           ||
|| テスト1 (ttssh2-dev 545) || PC1 || PC4 + BSUSRC06   || ストレートケーブル+変換器 ||
|| テスト2 (ttssh2-dev 550) || PC1 || PC4 + REX-USB60F || ストレートケーブル+変換器 ||
|| テスト3 (ttssh2-dev 550) || PC1 || PC3              || ストレートケーブル+変換器 ||
|| テスト4 (ttssh2-dev 550) || PC3 || PC4 + REX-USB60F || ストレートケーブル+変換器 ||
|| テスト5                  || PC1 || PC6              || クロスケーブル            ||
|| テスト6                  || PC6 || PC3              || クロスケーブル            ||
|| テスト7                  || PC6 || PC4 + REX-USB60F || クロスケーブル            ||

== rev10551
https://osdn.net/projects/ttssh2/scm/svn/commits/10551

||         || send mode →      || s (big data) →     || send mode ←        || s (big data) ←       ||
|| テスト5 || 1:OK 0:OK 0->1:NG || 1:16bytes 1<->0:N/A || 1:OK 0:OK  0->1:NG  || 1:14bytes   1<->0:N/A ||
|| テスト7 || 1:OK 0:OK 0->1:NG || 1:14bytes 1<->0:N/A || 1:OK 0:※1 0->1:※2 || 1:4096bytes 1<->0:OK  ||

※1 3文字まで送信側 "send xx, 1 byte", 4文字目から送信側 "send xx, 0 byte"

※2 r で 1 にすると3文字だけ表示される

 * s (big data) の送信がうまくいかない
 * send mode の 0->1 復旧で、0の間に押したキーのデータが表示されない
   * PC3 からの送信時に 3 文字だけ効いている

== rev10557
https://osdn.net/projects/ttssh2/scm/svn/commits/10557

||         || send mode →         || s (big data) →     || send mode ←         || s (big data) ← ||
|| テスト5 || 1:※1 0:※2 0->1:※3 || 1:OK 1<->0:OK       || 1:※4 0:※2 0->1:※3 || 1:OK 1<->0:OK   ||
|| テスト7 || 1:※4 0:※2 0->1:※3 || 1:OK 1<->0:OK       || 1:※1 0:※5 0->1:※6 || 1:OK 1<->0:OK   ||

※1 基本的に大丈夫だ("send size 1 (finish)" と表示される)が、連続して打っていると "writing.." と表示されるときがある。その時のキーは受信側に表示されない。

※2 0 にした1文字目は送信側に何も表示されない。2文字目から送信側に "writing.." と表示される。

※3 r で 1 にしても 0 の間のデータは表示されない。その後(1の状態で)送信しても送信側 "writing.." となり受信側に表示されない(l で見ると CTS は ON になっているのに)。送信側の close / open で復旧する。

※4 最初は大丈夫だが、しばらく打っていると "write() error 4317,0x10dd 識別操作子が無効です。" と表示され、その後キーを受け付けなくなる。アプリを落とすしかない。PC6 固有の問題?

※5 0 にした3文字目まで送信側に "send size 1 (finish)" と表示される。4文字目は送信側に何も表示されない。5文字目から送信側に "writing.." と表示される。

※6 r で 1 にすると 3 文字だけ表示される。その後(1の状態で)送信しても送信側 "writing.." となり受信側に表示されない(l で見ると CTS は ON になっているのに)。送信側の close / open で復旧する。

 * s (big data) の送信がうまくいくようになった
 * s (big data) の送信時には r でのコントロールが効いている
 * send mode の 0->1 復旧で、0の間に押したキーのデータが表示されない
   * PC3 からの送信時に 3 文字だけ効くが、そのほかはだめ

== rev10562
https://osdn.net/projects/ttssh2/scm/svn/commits/10562

||         || send mode →       || s (big data) → || send mode ←       || s (big data) ← ||
|| テスト5 || 1:OK 0:OK 0->1:※1 || 1:OK 1<->0:OK   || 1:OK 0:OK 0->1:※1 || 1:OK 1<->0:OK   ||
|| テスト7 || 1:OK 0:OK 0->1:※1 || 1:OK 1<->0:OK   || 1:OK 0:OK 0->1:※1 || 1:OK 1<->0:OK   ||

※1 受信側が0の間に送信側で押したキーの結果は、受信側を1に復旧しても表示されない

 * send mode で送れるようになりました。
{{{
連続して打って詰まった?ときの動作はこうなりました。受信側に、取りこぼされずに表示されています。
send 31, sent 0 byte pending
send size 1 (finish)
send 32, sent 0 byte pending
send size 1 (finish)
send 33, sent 0 byte pending
send size 1 (finish)
send 34, sent 1 byte
send 32, sent 0 byte pending
send size 1 (finish)
send 33, sent 0 byte pending
send size 1 (finish)
send 31, sent 0 byte pending
send size 1 (finish)
}}}


= Hardware flow control
In my understanding, hardware flow control is followings:
{{{
https://tldp.org/HOWTO/Serial-HOWTO-19.html#ss19.4
https://tldp.org/HOWTO/Text-Terminal-HOWTO-11.html#ss11.7
https://en.m.wikipedia.org/wiki/RS-232#RTS,_CTS,_and_RTR
https://www.youtube.com/watch?v=lwuZ7xYtMKk&t=140s

Now we are considering flow control of B.

A. Original define (half duplex,asymnetric)
=====
1. PC tells "I Request To Send to you."
PC(DTE)           device(DCE)
  RxD  ----------
  TxD  ----------
  RTS 1--------->
  CTS  ----------
=====
2. device acks "You are Cleared To Send to me."
PC                device
  RxD  ----------
  TxD  ----------
  RTS 1--------->
  CTS  <---------1
=====
3. PC sends data.
PC                device
  RxD  ----------
  TxD  --------->
  RTS 1--------->
  CTS  <---------1

B. Mordan define (full duplex,symmetric)
=====
1. device tells "I am Ready To Receive."
PC(DTE)           device(DCE)
  RxD  ----------
  TxD  ----------
  RTS  ----------
  CTS  <---------1
=====
2. PC can send data.
PC                device
  RxD  ----------
  TxD  --------->
  RTS  ----------
  CTS  <---------1
=====
3. If device buffer close to overflow, device tells "I am not Ready To Receive."
PC                device
  RxD  ----------
  TxD  --------->
  RTS  ----------
  CTS  <---------0
=====
4. PC stops sending.
PC                device
  RxD  ----------
  TxD  ---------- stop
  RTS  ----------
  CTS  <---------0
=====
5. If buffer data is processed and enough buffer, device tells "I am Ready To Receive."
PC                device
  RxD  ----------
  TxD  ----------
  RTS  ----------
  CTS  <---------1
=====
6. PC restart send.
PC                device
  RxD  ----------
  TxD  ---------> send
  RTS  ----------
  CTS  <---------1
}}}