初めまして。
今、ハイパーターミナルのYMODEMと同様のファイル送信処理を
VB6.0(WinXP)にて作っています。
現在、ファイル送信時に付加されるCRCコードの計算で
つまづいてしまいました。
ファイル名 :text.txt
内容 :ABC
ファイルサイズ :3[Byte]
上記のファイルを送信したとき、ハイパーターミナルでは
下記のようなシーケンスになります。
<SH><NULL><Not SH> <DATA><NULL> <CRC(uper)><CRC(lower)>
※<DATA> :text.txt + NULL + 3
※<DATA><NULL> :合計128[Byte]
※<CRC(uper)> :B7
※<CRC(lower)> :3B
極窓等でCRCコード生成を試しましたが、同じCRCコードには
なりませんでした。
CRCコード生成時の初期値やXORをとる値が違ったりするのでしょうか。
ご存知の方、もしくは参考になるHPをご存知でしたら教えて頂きたいです。
よろしくお願いします。
この投稿はマルチポストです。
●マルチポストされている場所
http://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?no=3065&reno=no&oya=3065&mode=msgview&page=0
----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。
>の掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。
どこに?
分からないです・・・
マルチポスト先を削除しましたので、
よろしくお願いします。。。
どこかで上位と下位が反転してるなんてことは無いのかな。
こんなとこは当然見てるか。。
http://page.freett.com/seaside/vip/crc/CRC.htm
データ部ってこんな感じですか?
74,65,78,74,2E,74,78,74,00,03,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
16進ね
>ねろさん
お返事ありがとうございます。
そちらのサイトも見ましたが、もう一度、よく読んで確認してみます!
>ななしさん
お返事ありがとうございます。
データ部はその通りです。
ファイル名 :text.txt
内容 :ABC
ファイルサイズ :3[Byte]
参考までに・・・
ファイル名・サイズを送信した後のファイル内容を送信するシーケンスです。
<SX><SH><Not SX> <DATA><SUB> <CRC(uper)><CRC(lower)>
※<DATA> :ABC + SUB
※<DATA><SUB> :合計128[Byte]
※<CRC(uper)> :&H41
※<CRC(lower)> :&H4B
YModemの仕様を忘れてしまったのですが
CRCの計算は私の提示したデータ部(128Byte)からの算出で
いいのでしょうか?
また、オプションでファイルの変更日時、ファイル属性
シリアルナンバーもヘッダに付加できるようですが
この辺の確認はできていますか?
CRC部が取れているようなので、アナライザーか何かを使って
いるのだと思いますが、具体的な送信データはありませんか?
>参考までに・・・
#ヘッダがSTXのときはデータ部は1024Byteだった気がします
#SOHのときは 128Byte
#2バイト目はブロック番号で、3バイト目は(NOT 2バイト目)
#なので、<SH> とか<Not SH>と表現するのはちと微妙な感じ。
http://www.st.rim.or.jp/~phinloda/proto2.html
>CRCの計算は私の提示したデータ部(128Byte)からの算出で
いいのでしょうか?
CRC算出はデータ部、ヘッダ部共に算出しているかと思われます。
>また、オプションでファイルの変更日時、ファイル属性
>シリアルナンバーもヘッダに付加できるようですが
>この辺の確認はできていますか?
どのようにすれば、上記の情報を送信出来るかが分からないため、
確認はしていません。
ハイパーターミナルの操作としては、[転送(T)]→[ファイルの送信(S)]より、ファイルを送信しています。
なお、回線モニタにて送信データを調べていまが、ファイル名とファイルサイズのみがヘッダ情報として送信されているようです。
>具体的な送信データはありませんか?
下記のようなデータでよろしいでしょうか(^^;
====================================================================
ファイル名:test.txt
ファイルサイズ:3byte
ファイルデータ:ABC
====================================================================
送信データ---ヘッダ情報(?)
01,00,FF,74,65,73,74,2E,74,78,74,00,33,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,B7,3B
>>> B7,3B がCRCコードかと・・・
---C受信---
送信データ---データ部
01,01,FE,41,42,43,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,41,4B
>>> 41,4B がCRCコードかと・・・
---ACK受信---
送信データ---<EOT>:コントロールコード
04
---C受信---
送信データ
01,00,FF,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00
---ACK受信---
>#ヘッダがSTXのときはデータ部は1024Byteだった気がします
>SOHのときは 128Byte
ヘッダがSTXの場合でも、送信データが128byte以下であれば128byteサイズで
送信しているようです。
>2バイト目はブロック番号で、3バイト目は(NOT 2バイト目)
>なので、<SH> とか<Not SH>と表現するのはちと微妙な感じ。
この辺は私の誤りです。すみません。
えっと提示されたデータで検証してみました。
http://cvs.sourceforge.net/viewcvs.py/platformx/bootldr/crc.c?rev=1.1.1.1&view=markup
を参照してください(Cですけど)
74,65,73,74,2E,74,78,74,00,33,00,00,00,00,00,00
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
00,00
130Byte(データ部 + CRC 2バイトは0で計算)
結果 b73b
41,42,43,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,1A,
00,00
130Byte(データ部 + CRC 2バイトは0で計算)
結果 414b
となります。
ヘッダ部(01 00 FF)は計算に含まれませんので確認して
みてください。
追加です。参照URLで使用している定数についてはこちらです。
http://cvs.sourceforge.net/viewcvs.py/platformx/bootldr/crc.h?rev=1.1.1.1&view=log
英語ですけど
ymodemについての知識で少し誤解があるようなので
http://www.jkmicro.com/tutorials/xymodem.txt
を参照することをお勧めします。
#"SOH"を検索してみてください
私も忘れているので偉そうなことは言えませんが
ぶっちゃけ、この通りに作れって事です。
RFCみたいなもんですね
#多少の融通を利かせないとつらいですが
翻訳サイト
http://www.excite.co.jp/world/
お返事の程、大変遅くなりました。
"ななし"さんの助言で、VB6.0にてCRCコード作成出来ました!
そして、いろいろと勘違いしていることがありました・・・
本当にありがとうございました!
ツイート | ![]() |