■光通信プロトコルには謎が多すぎる

オプションポート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