XMODEMプロトコルを使用してシリアルポートを介してファイルを送信する

XMODEMプロトコルを使用してシリアルポートを介してファイルを送信する

シリアルポートを介して小さなファイルを送信する必要があります(実際には/dev/ttyUSB0ポートにUSBシリアルコンバータが接続されています)。これはスクリプト可能でなければなりません。つまり、非対話型でなければなりません。

私が試したことは次のとおりです。

  • minicom- うまく動作しますが、インタラクティブです。--script=SCRIPTオプションが有望に見えますが、スクリプトの方法がわかりません。
  • sx- 非対話型ですが停止します。それはおそらく転送速度とバイトフォーマット(ストップビット、パリティ、データビット)を指定しなかったからです。

私のオプションは何ですか?


編集1:stty+sx

それでも幸運ではなく、minicomは38400 8N1ファイルを正しく送信しました。私が何をしているのか

sudo stty -F /dev/ttyUSB0 38400 cs8 -parenb -cstopb -ixoff
sx ~/test_signals/ones.bin -vvvvvvvvvvvv

sxちょうど凍った。出力は次のとおりです。

vorac@laptop:~/projects/megaboot$ sx ~/test_signals/ones.bin -vvvvvvvvvvvv
sx 0.12.21rc

mode:1
Sending /home/vorac/test_signals/ones.bin, 7 blocks: Give your local XMODEM receive command now.
wctx:file length=1000
                     Calling read: alarm=60  Readnum=128 

そしてちょうどそこにいる。受信者は、2バイトのcrc(「C」転送としてマークされている)の代わりに、短い1バイトのチェックサム方法(ファイルの先頭にNACK転送としてマークされています)を使用します。たぶんこれはサポートされていませんかcx


編集2:cu++sttysx

cuに関する広範な文書を読み取らないように、次のコマンドをコピーしました。この記事。まだ運がありません。

vorac@laptop:~$ sudo cu -l /dev/ttyUSB0 -s 38400
cu: open (/dev/ttyUSB0): Permission denied
cu: /dev/ttyUSB0: Line in use
vorac@laptop:~$ groups vorac
vorac : vorac adm dialout cdrom sudo dip plugdev lpadmin sambashare wireshark

答え1

xmodem変換はここで行われます。入力/出力リダイレクト後(例参照)Wouter Verhelstが提案したように、経験に基づいて追加してください。幸いなことに、Linuxで2つのコマンドを含むbinファームウェアを受け取りました。

$ sudo stty -F /dev/ttyUSB1 9600 cs8 -parenb -cstopb -ixoff
$ sudo stty -F /dev/ttyUSB1
speed 9600 baud; line = 0;
-brkint -imaxbel

$ sx fw.bin < /dev/ttyUSB1 > /dev/ttyUSB1

答え2

sxシリアルポート自体と通信せず、標準出力で通信します。役に立つタスクを実行するには、出力をリダイレクトする必要があります。

cu個人的には、シリアル接続を確立し、* MODEMを使用してデータの受信を開始するためにリモート側で必要なすべてを実行し、cuエスケープコードを使用してsxローカルで実行するのが最も簡単だと思います。エスケープシーケンスとして~$sx(次に渡すオプション)を使用してsxこれを実行できます。

ただし、cu行の先頭のエスケープシーケンスのみを認識していることに注意してください。

編集する:「Line in use」メッセージは、他のデバイスがシリアルポートを使用していることを示します。fuser /dev/ttyUSB0それが何であるかを調べるために走って殺します。または、USB-Serial ConverterをUSBポートから取り外して再接続すると、シリアルポートを占有しているすべてが確実に終了します。その後、ラインcuは正しく機能します。

それでも問題が解決しない場合は、古いロックファイルがある可能性があります/var/lock。ただし、kill -9以前のツールを使用しないと、これが発生する可能性はありません。

答え3

sxボーレートなどを設定していません。

あなたはこのようなことをしますstty。送信ファイルにXONまたはXOFFバイトがある場合は、xmodemに対してxon / xoffを無効にすることもできます-ixon

たとえば、115200、n、8、1の場合は、次のようにします。

stty -F /dev/ttyUSB0 115200 cs8 -parenb -cstopb -ixon

man stty詳細は参照してください。

答え4

似たようなことはできませんか?

$ picocom -b 115000 /dev/ttyUSB0 
// 2nd term
$ cat file > /dev/ttyUSB0

関連情報