■光通信プロトコルには謎が多すぎる
オプションポート15の通信は比較的単純で、ターミナルや通信ソフトでも通信できるのですが、光通信にはプロトコル(通信制御手順)というものが存在します。
このプロトコルを正しく解釈して、プログラムに反映させないと正常な通信はできません。
光通信の解析にあたり、プロトコルモニタを利用してザウルス−パソコン間の通信を傍受し数十種のサンプリングデータを元に解析を進めたものです。
現在、光通信に関する公式情報はソフトバンク刊:ザウルスSUPER TOOLS のCDROMに収録されている、過去に「出現ザウルスMark2 添付FD」収録されていたデータが存在します。(技術評論社:「ざべ(The BASIC) 」1995年7月号にも光通信解説記事もあります。)
通信タイミング関係はこちらの内容を参考にしています。
ただし、上記文書には欠落があり、そのままの情報を利用しても転送が正常にできない場合があります。
◆通信に使うシリアルポートの設定
9600,O,8,1 (9600BPS、奇数パリティ、データ8、ストップ1ビット)
調歩同期、半二重通信
フロー制御は「なし」でよい
この8ビット奇数パリティというのがくせもので、UNIX等では設定できないものがあります。
■プロトコルモニタにより実際のモニタデータから解析したもの
PC-ZAU | ダンプデータ | 意味 |
-> | 00 00 00 00 00 96 82 05 | 光通信ENQ |
<- | 00 00 00 00 00 96 82 16 | 光通信SYN |
-> | 00 00 00 00 00 96 81 10 | 光通信DH |
-> | 01 00 | ブロック番号 1 |
-> | 01 40 FE | 固定データ(01 40 FE) |
-> | 00 02 | データ長 |
-> | 22 49 22 2C 22 53 43 52 54 22 2C 22 43 4C 41 | "I","SCRT","CLA |
53 22 2C 22 4D 45 4D 31 22 2C 22 50 52 46 31 22 | S","MEM1","PRF1" | |
2C 22 43 4C 53 43 22 0D 0A 22 54 22 2C 22 83 56 | ,"CLSC"・・"T","・V | |
81 5B 83 4E 83 8C 83 62 | ・[・N・・・b | |
83 67 22 2C 22 83 74 83 40 83 43 83 8B 96 BC 22 | ・g","・t・@・C・・・シ" | |
2C 22 8E A9 97 52 92 A0 93 E0 97 65 22 2C 22 88 | ,"・ゥ・R・?・・・e","・ | |
F3 8E 9A 8C 60 8E AE 22 2C 22 | ・・・・`・ョ"," | |
95 AA 97 DE 83 52 81 5B 83 68 22 0D 0A 22 44 22 | ・ェ・゙・R・[・h"・・"D" | |
2C 22 20 22 2C 22 53 41 4D 50 4C 45 22 2C 22 81 | ," ","SAMPLE","・ | |
A1 5A 52 53 8C 60 8E AE C3 BD C4 BB DD EC D5 D9 | 。ZRS・`・ョテストサン・ユル | |
1F 20 97 DC EC 6D EC B4 | ・ ・ワ・m・エ | |
B3 EC D7 B0 BD 95 A8 8C EA 22 2C 2C 22 81 40 22 | ウ・ラース・ィ・・",,"・@" | |
0D 0A 22 44 22 2C 22 20 22 2C 22 53 41 4D 50 4C | ・・"D"," ","SAMPL | |
45 22 2C 22 81 A1 5A 61 75 42 | E","・。ZauB | |
41 53 45 8D EC 90 AC EC 6D EC 4C EC 62 EC 4A EC | ASE・・・ャ・m・L・b・J・ | |
50 1F 30 30 30 2F 30 30 30 20 20 20 4E 41 48 30 | P・000/000 NAH0 | |
30 34 36 35 1F 20 5A 61 75 42 | 0465・ ZauB | |
41 53 45 EC 6D 8C B4 8C 5E EC 67 EC 69 EC 8B 50 | ASE・m・エ・^・g・i・・P | |
4C 4B 20 66 6F 72 20 57 69 6E 64 6F 77 73 EC 92 | LK for Windows・・ | |
8D EC EC 8D EC 45 EC 67 8E 76 EC 62 EC 5E EC 6D | ・・・・・E・g・v・b・^・m | |
EC 6E B1 EC C7 B2 DD BA | ・nア・ヌインコ | |
DD C3 BD C4 27 39 35 EC 6D 92 F7 EC 81 90 D8 EC | ンテスト'95・m・・・・・リ・ | |
8A EC 4B 94 97 EC 62 EC 5E 93 FA EC 6D EC 52 EC | ・・K・・・b・^・・・m・R・ | |
67 EC 66 EC 56 EC 5E A1 1F 20 | g・f・V・^。・ | |
33 94 4E 91 4F EC 6A 44 4F 53 EC 6A 95 CA EC 8C | 3・N・O・jDOS・j・ハ・・ | |
EC 92 8D 90 EC 51 A4 EC 41 EC 89 EC 86 EC 8B B1 | ・・・・・Q、・A・・・・・・ア | |
EC D5 D8 B9 B0 BC AE DD EC 6D 8E C0 1F 8D 73 EC | ・ユリケーション・m・タ・・s・ | |
67 EC D5 DB EC AE D7 D1 | g・ユロ・ョラム | |
EC 6D 8A 4A 94 AD EC 6E EC 58 EC 66 EC 6A 57 69 | ・m・J・ュ・n・X・f・jWi | |
6E 64 6F 77 73 20 8F E3 EC 66 8D 73 EC 62 EC 65 | ndows ・・・f・s・b・e | |
EC 49 EC 8A A4 93 96 91 52 B1 | ・I・・、・・・Rア | |
EC C7 B2 DD 8A 4A 94 AD EC 82 57 69 6E 64 6F 77 | ・ヌイン・J・ュ・・Window | |
73 20 8F E3 EC 6D B4 EC C5 A8 C0 EC 92 8E 67 EC | s ・・・mエ・ナィタ・・・g・ | |
43 BF B0 BD EC 92 BA B0 EC C5 A8 DD EC AE EC 56 | Cソース・・コー・ナィン・ョ・V | |
EC DA C0 DD EC 69 EC 68 | ・レタン・i・h | |
EC 6D EC C5 EC B4 B2 DD EC 82 57 69 6E 64 6F 77 | ・m・ナ・エイン・・Window | |
73 20 8F E3 EC 6D C2 | ||
-> | E3 FF | チェックサム |
<- | 00 00 00 00 00 96 82 06 | 光通信ACK |
-> | 00 00 00 00 00 96 82 05 | 光通信ENQ |
<- | 00 00 00 00 00 96 82 16 | 光通信SYN |
-> | 00 00 00 00 00 96 81 10 | 光通信DH |
02 00 | ブロック番号 2 | |
01 40 FE | 固定データ | |
00 02 | データ長 | |
データ番号2の本体データ 〜 最終データの直前までは省略 | ||
<- | 00 00 00 00 00 96 82 06 | |
-> | 00 00 00 00 00 96 82 05 | |
<- | 00 00 00 00 00 96 82 16 | |
-> | 00 00 00 00 00 96 81 10 | |
-> | FF FF | ブロック番号 FFFF |
(最終ブロック) | ||
01 40 FE | 固定データ | |
E7 00 | データ長 | |
43 EC 8D EC 43 EC 8D 94 60 EC 43 EC 65 | ・・・C・・・`・C・e | |
EC 43 EC 5E EC 89 EC 43 EC 8D EC 43 EC 8D B1 B2 | ・C・^・・・C・・・C・・アイ | |
EC C5 A8 B1 EC 4B 1F 95 82 EC 4A EC 93 EC 66 EC | ・ナィア・K・・・・J・・・f・ | |
4C EC 7D EC 56 EC 5E A1 1F 20 | L・}・V・^。・ | |
EC 53 97 98 97 70 92 86 EC 6D 8A 46 97 6C EC 82 | ・S・・・p・・・m・F・l・・ | |
EC 52 EC 93 EC 69 EC 52 EC 67 EC 4B EC 66 EC 4C | ・R・・・i・R・g・K・f・L | |
EC 5E EC 89 97 C7 EC 43 EC 69 EC 67 8E 76 EC 45 | ・^・・・ヌ・C・i・g・v・E | |
EC 52 EC 67 EC 4B EC 41 | ・R・g・K・A | |
EC 8A EC 7D EC 56 EC 5E EC 89 EC 5B EC 71 A4 8B | ・・・}・V・^・・・[・q、・ | |
B3 EC 47 EC 65 89 BA EC 54 EC 43 A1 1F 20 8E 9F | ウ・G・e・コ・T・C。・ ・・ | |
EC 6D 5A 61 75 42 41 53 45 BC | ・mZauBASEシ | |
D8 B0 EC B8 EC 66 EC 7D EC 5E EC 49 89 EF EC 43 | リー・ク・f・}・^・I・・・C | |
EC 56 EC 7D EC 56 EC 87 EC 45 A1 1F 20 90 BB 8D | ・V・}・V・・・E。・ ・サ・ | |
EC A5 92 98 8D EC 20 31 39 39 35 2F 31 32 2F 32 | ・・・・・・ 1995/12/2 | |
30 20 95 79 8A 7E 20 8B | 0 ・y・~ ・ | |
67 93 BF 20 4E 41 48 30 30 34 36 35 22 2C 2C 22 | g・ソ NAH00465",," | |
81 40 22 0D 0A | ||
1A | (EOF) | |
9B 7F | チェックサム | |
<- | 00 00 00 00 00 96 82 06 | 光通信ACK |
データ転送終了 |
■光通信の基本通信パターン
◆通常ブロック:コントロールデータと、実データの通信
ZAU-PC | 記号 | 意味 |
-> | ENQ | ザウルスが受信できる状態か確認 |
<- | SYN | ザウルスは受信可能である |
-> | DH | データブロックを送るためのヘッダ |
-> | ブロック番号 ブロック番号(01〜加算、最終ブロックはFFFFh) | |
-> | 固定データ(01 04 FE) このデータは固定で良い | |
-> | データ長 可変、ただし最大長512バイト | |
-> | 【 データブロック】 0バイトから512バイト長までのデータ | |
-> | チェックサム データブロックのチェックサム | |
<- | ACK | 正常受信できたことを示す |
上記を1単位として通信を繰り返す
◆最終ブロック
ZAU-PC |
記号 |
意味 |
-> | ENQ | |
<- | SYN | |
-> | DH | |
FFFFh | 最終データブロックを示す | |
01 04 FE | 固定データ | |
-> | データ長 | |
-> | 【 データブロック】 | |
-> | 1AH | EOFデータの終わりを示す |
-> | チェックサム | |
<- | ACK | 正常受信できたことを示す |
これでおしまい。
■通信開始までの手続き
◆通信開始時のシンクロ
光通信の場合、相手機器が通信可能になっているかをサンプリングする必要があります。
ENQを送信して500ms以内にSYN レスポンスが返らない場合は再度ENQ を送信します。
この繰り返しは6分間継続し、正常にSYNが受信できない時は、通信エラーとして処理します。
SYN が返ってきたら、実際のデータを送信します。
◆データブロックの構成
内容 | 実際のデータ | ||
光通信データヘッダ(DH) | 00 00 00 00 00 96 81 10 | 固定 | |
ブロック番号(2バイト) | 1 から FFFFまで | 01 00 〜 FF FF | +1加算 |
制御コード | 01 | ||
デバイスコード | 40 | ||
??????? | FE | ||
データ長(2バイト) | 実際のデータブロックの長さ 最大512バイト/ブロック |
01 00 〜 00 02 | 可変 |
データ部 | (0〜512バイト) | データをそのまま送信 | |
チェックサム(2バイト) | データ部のみ単純加算チェックサムをとる データまでを加算後、10000Hで割った余り |
00 00 〜 FF FF | |
正常に受信できた時の応答 | ザウルス側で正常受信できた場合は、ACK を返す | 00 00 00 00 00 96 82 06 |
■イレギュラーな通信(通信開始時のシンクロの際に発生するもの)
コード | 内容 |
-> ENQ | ザウルスが受信できる状態か確認を送った時の応答 |
<- SYN | ザウルスは受信可能である(正常応答) |
<- CAN | ザウルス側は通信を中断した |
<- その他のデータ | 通信異常が発生したとして処理(無データも含む) |
■通信リトライ処理
CAN が返された場合以外はリトライ処理を行う。
初期リンク時 | 500ms 単位でリトライを行い6分間繰り返す |
データ通信進行中 | 500ms 単位でリトライを行い10秒間繰り返す |
※リトライ処理とは
通信異常の発生したブロックのENQ から再度送信を行う処理です。
リトライ制限を超えた場合は、通信エラーとして処理します。
※リトライの回数
2回(最初のデータ転送を併せて3回)行い、それでも転送不可能なときは、通信を中断します。
◆イレギュラーな通信(データブロックを送信完了後の応答)
コード |
内容 |
<- ACK | 正常受信できたことを示すACK(正常応答) |
<- NACK | 通信異常の原因がチェックサムであることを示す |
<- それ以外 | リトライ処理行う |
■通信タイミングに関するデータ
経験上のアドバイス:
転送タイミングに関しては、ms単位で指定があるものの通常の処理を行う限りシビアになることはありませんが、ENQ-SYN に関しては最優先処理が必要です。
実際にZauBASE のプログラムを組む際には、ENQ-SYN 500ms の部分のみインターバルタイマを利用してチェックを行っています。
◆シンクロ時
-> ENQ <- SYN におけるタイミング |
ENQ 送信後、受信側が500ms 以内にSYN
を返さない場合は、ENQ を再送します。 SYN が返るまで初期リンク時6分間、通常時10秒間、ENQ 再送を繰り返します。 受信側はENQ 待ち状態になり、初期リンク6分間、通常時10秒ENQ がこない場合通信中断となります。 リトライ制限秒数に関してはタイムアウト回数をカウントするという方式で対応しています。 |
◆データ転送時
<- SYN -> DH から始まるデータブロック |
SYN が戻った後、送信側が200ms 以内に DH以降のデータを送る必要があります。 受信側は、SYN 送信後、400mS 以内にDH 以降のデータを受信できいない場合はリトライ処理に入ります。 この部分は厳密にチェックを入れていませんが、9600BPSで送受信できるパソコンならSYNが戻ってから制限時間内に応答できるはずです。 |
◆正常受信確認時
->DATA <-ACK データ送信完了時のACK応答 |
受信側はデータブロックの最後の1バイトを受信後、400ms
以内にACK を送信する必要があります。 送信側はACK が送られてくるのを1秒待ち、ACK がこない場合はリトライ処理データブロックを転送するときは、送信側は4秒以内に転送する必要があります。 (9600BPS なら十分この制限をクリアできます) 受信側は最初の1バイト受信後、5秒間データブロックを受信し続けるが、5秒以内にデータブロックの最後まで受信できないときはリトライ処理を行います。 |
★一口メモ★
データの最後に EOF(1Ah) を付加することを忘れないようにして下さい。(これを忘れると通信が完了したことがザウルスに通知されず、いつまでも通信状態が継続します)
シャープの純正インタフェースを利用した場合、光通信エコー(送信したデータがそのまま、受信データとなる)がありますので、それを考慮したプログラムが必要になります。
また、ノートPC等に内蔵されているIrDA-ASK互換インタフェース、PCMCIAカードタイプのインタフェースについては、CS(ハードウェアフロー)を有効にすると、ハングアップするものがあります。
原因は良くわからないのですが、CSを無効にすると正常に通信できます。
シリアルポートのフロー制御については、テキストデータの通常通信時のみXon,Xoffを指定し、それ以外はNon で大丈夫です。
参考文献:ソフトバンク株式会社 ZAURUS Super Tools PIRICA編 付録CD-ROM