CRCコードを算出するには?

解決


延命菊  2005-04-29 00:50:13  No: 121347

初めまして。
今、ハイパーターミナルの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をご存知でしたら教えて頂きたいです。

よろしくお願いします。


(報告)  2005-04-29 00:59:11  No: 121348

この投稿はマルチポストです。

●マルチポストされている場所
http://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?no=3065&reno=no&oya=3065&mode=msgview&page=0
----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。


どこに  2005-04-29 01:09:52  No: 121349

>の掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。
どこに?


延命菊  2005-04-29 01:28:01  No: 121350

分からないです・・・
マルチポスト先を削除しましたので、
よろしくお願いします。。。


ねろ  2005-04-29 02:04:25  No: 121351

どこかで上位と下位が反転してるなんてことは無いのかな。
こんなとこは当然見てるか。。
http://page.freett.com/seaside/vip/crc/CRC.htm


ななし  2005-04-29 03:06:14  No: 121352

データ部ってこんな感じですか?

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進ね


延命菊  2005-04-29 03:32:13  No: 121353

>ねろさん

お返事ありがとうございます。
そちらのサイトも見ましたが、もう一度、よく読んで確認してみます!


延命菊  2005-04-29 03:33:11  No: 121354

>ななしさん

お返事ありがとうございます。
データ部はその通りです。


延命菊  2005-04-29 03:42:21  No: 121355

ファイル名      :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


ななし  2005-05-02 19:21:17  No: 121356

YModemの仕様を忘れてしまったのですが
CRCの計算は私の提示したデータ部(128Byte)からの算出で
いいのでしょうか?

また、オプションでファイルの変更日時、ファイル属性
シリアルナンバーもヘッダに付加できるようですが
この辺の確認はできていますか?

CRC部が取れているようなので、アナライザーか何かを使って
いるのだと思いますが、具体的な送信データはありませんか?

>参考までに・・・
#ヘッダがSTXのときはデータ部は1024Byteだった気がします
#SOHのときは 128Byte
#2バイト目はブロック番号で、3バイト目は(NOT 2バイト目)
#なので、<SH> とか<Not SH>と表現するのはちと微妙な感じ。

http://www.st.rim.or.jp/~phinloda/proto2.html


延命菊  2005-05-09 22:58:17  No: 121357

>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>と表現するのはちと微妙な感じ。
この辺は私の誤りです。すみません。


ななし  2005-05-10 02:09:11  No: 121358

えっと提示されたデータで検証してみました。
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)は計算に含まれませんので確認して
みてください。


ななし  2005-05-10 02:12:08  No: 121359

追加です。参照URLで使用している定数についてはこちらです。

http://cvs.sourceforge.net/viewcvs.py/platformx/bootldr/crc.h?rev=1.1.1.1&view=log


ななし  2005-05-10 08:24:00  No: 121360

英語ですけど
ymodemについての知識で少し誤解があるようなので
http://www.jkmicro.com/tutorials/xymodem.txt
を参照することをお勧めします。
#"SOH"を検索してみてください

私も忘れているので偉そうなことは言えませんが
ぶっちゃけ、この通りに作れって事です。
RFCみたいなもんですね

#多少の融通を利かせないとつらいですが

翻訳サイト
http://www.excite.co.jp/world/


延命菊  2005-05-30 20:59:48  No: 121361

お返事の程、大変遅くなりました。

"ななし"さんの助言で、VB6.0にてCRCコード作成出来ました!
そして、いろいろと勘違いしていることがありました・・・

本当にありがとうございました!


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加