[ttssh2-dev 601] Re: ticket #45271 / Serial Hard Flow

Back to archive index
matsuo zmats****@gmail*****
2023年 2月 13日 (月) 23:57:59 JST


松尾です。

 > こういう感じのプログラムを走らせたのかもしれませんね。
 > https://www.youtube.com/watch?v=lwuZ7xYtMKk&t=140s

ちょくちょくTera Termが出てくるのがおおっと思いますね。

 > Tera Term のときのオシロスコープの結果を見たかったのですが、
  :
 >> わかったこと
 >
 > - 接続先が DCE であること
 >    PC RTS(output) = device RTS(input)
 >    PC CTS(input) = device CTS(output)
 > - 「B. 今の RTS/CTS 制御」を想定している

同じ理解です。

 >> - デバイスは RTS を無視して送信する
 >
 > そうではないように思います。
 >> My circuit monitors its RTS input in case the PC wants to halt
 >> data flow on it's RTS (output) signal.

たしかにそうですね。

 >> - 57600bps速すぎない?
 >
 > 「USB 変換ケーブルだとバッファがあって、実際のポートだとバッファが
 > ないせいなのでは?」という予想を書いてくれていますね。

 > 物理特性とか回路設計がわかっていれば、あるいはシリアルデバイスを
 > よく使う人であればわかるのかもしれませんが、だいたいこのくらいの
 > 早さだと送信遅延を設定する、みたいな目安があるのでしょうか?

1byte毎ディレイ追加/速度を落とせば改善するかもしれないですね。
8(byte)+1(start)+1(stop)+0(parity)=10bitに
bpsを掛けたぐらいの時間?
多すぎですかねぇ・・。
行ごとディレイを入れるといい感じになるのは
CR(enter)で処理をスタートすることが多いからかなと思います。

PC側はチップ内受信バッファが少なくても
CPUがとても速ければ大丈夫かなとは思います。
多コアだしシステム全体に割り込み禁止して処理することもないはず。
最近のPC+OSならマウスポインタの動きのカクツキとか少ないですよね。
ただTera Termが遅くてOS内受信バッファが
あふれることがあるかもしれないです。

デバイスのほうは、CTS=0としても直後の1byte程度
受信してしまうことがある前提で作るほうが安全だと思います

PC(Tera Term)                 Device
-------------------------+------------
チップが1byte送信準備中
                        <----- CTS=0
送信してしまうかも       -----> どうなる?

デバイス側は受信したあとフラッシュ扱うことが多いと思うので
- 受信する
- CTS=0出力
- 割り込み禁止
- Flash書き込み
- 割り込み許可

割り込み禁止中の受信はどうなる?
ドキドキするポイントが結構ありそうです。

Tera Term以外でokだったら、デバイス側は大丈夫なのかなと思います


 > - trunk の動き
 > dcb.fOutxCtsFlow=TRUE で OS(とかドライバ)にまかせる
 >
 > - r10587
 > fOutxCtsFlow は有効にするものの、CTS が low だったら OS 任せに
 > せず送らない
 > -> これがダメだとすると、間に合ってない感じがするのでタイミング
 > のような気がします。

 > 気になっているのですが、r10587 の修正を入れると、逆に今まで送れて
 > いた環境で送れなくなったり、送信が遅くなるということは考えられる
 > でしょうか?

r10587 の修正で送信バッファに詰められなくなるので
遅くなるかもしれないです。
シリアル送受信処理は問題にいろいろ対応してきて
秘伝のソース状態だと思うので修正はなかなか緊張します。

Tera Termの送信フローが怪しいのかなと r10587 を見直していて
アプリ側のフロー制御が全然できていないのがわかりました。
r10593で修正しました。

修正だけでなく TERATERM.ini に
次の項目を追加(値はデフォルト値)しました。

[serial.maniac]
AppCTSDSRFlow = 1
RecieveBufferSize = 8192
SendBufferSize = 2048
XonLim = 2048
XoffLim = 2048

あかんなーというときパラメータの変更を試してもらえます。
これでもう一度ためしてもらいましょうか。



ttssh2-dev メーリングリストの案内
Back to archive index