2016年03月07日

YMODEM を実装した

 YMODEM によるファイル転送を実装した。

 screen でシリアル経由で接続している場合、コマンド "yload" を実行してから、screen 上で ctrl-A + : によりコマンドモードに移行し、exec !! lsb ファイル名 で転送を実行する。

 XMODEM プロトコルにしなかったのは、ファイルサイズが 128 バイトの倍数になるように 0x1A が付加されてしまう XMODEM の仕様がどうしても気に入らなかったため。実害がない場合が多いとはいえ、ファイルサイズを指定できないのはプロトコルとして問題でしょ、というわけで、YMODEM 限定とした。

 YMODEM プロトコルは、受信側が送信側に "C" または NAK を送ることで開始されるので、本当は送信側で lsb を起動してから受信側で yload を実行するのがよいはずだが、うまくいかなかった。そこで、「データが来ない時は 10 秒後に再試行する」という仕様を利用して、2回目の "C" で転送を始めるようにしている。上の画面キャプチャで、"Start YMODEM..." の行の次に "C" が1個あるのは、送信側に拾ってもらえなかった最初の "C" の名残です。

 シリアルでコンソール入出力とファイル転送ができるようになったので、頑張ればベアメタルで動かせるかも。わくわく。

タグ:Raspberry Pi
Posted at 2016年03月07日 23:23:44
email.png