S7601A TCP/IP プロトコルスタック IC FAQ集
2001/8/3



 
FAQ1  新機能
「遅延Ack」って何?
●  クロック分周レジスタ[TCP_Clk_Divider]の使用方法は?
●  CHAP認証を使用するには?
「自動IP割り付け機能」とは?
  新しいMPU I/Fモードとは?
FAQ2  改良機能
●  CPU I/Fのどこが改良されたのか?
●  物理レイアインターフェイス(シリアルポート)のどこが強化されたのか?
●  5Vインターフェイスはどの端子について有効なのか?
FAQ3  PPP
●  PPPの切断、異常の判断は?
●  PPP接続・切断時の書き込み手順は?
●  どのようにローカルIPアドレス(自己IPアドレス)が割り付けられるのか?
FAQ4  TCP
どうすればTCPのステートが遷移するのか?
FAQ5  物理レイヤインターフェイス
●  モデムの制御方法は?
●  ボーレイトの設定方法は?
FAQ6  MPUインターフェイス
双方向バスの切り替りタイミングは?
BUSYX信号の役割は?
本FAQでは特に記載のない限り、拡張iAPIレジスタマップを用いて説明します。


FAQ1  新機能
●「遅延Ack」って何?
 S-7601Aは、ピアから正常なデータを受信したときや、送信したデータに対してピアから正常なACKフラグを受信したとき、ACKフラグを送信します。そのとき、設定時間だけ待ってからACKフラグを送信するというのが遅延ACKの概念です。
この遅延ACKの設定は遅延Ackコントロールレジスタ[Delayed_ACK_Control]を用いて行います。通常、その設定は不要です。しかし、込み合ったネットワークやラウンドトリップ遅延が極端に大きなネットワークでは適切な遅延ACKを設定することにより、トラフィックやパケット総量を軽減できる場合があります。適切な遅延ACK値を求める一般式はありません。もし、遅延ACKをデフォルト以外の値に設定するのなら、ネットワークを含めてシステム全体で充分検討してください。
ACKフラグの送信としては他に以下がありますが、これらは、遅延ACKの対象ではありません。ピアからSYNフラグ、FINフラグを受信したときや、フロー制御を実現するために、受信バッファが広がったときTCPヘッダのウインドウサイズフィールドへそのサイズを設定してピアへ通知する場合などです。また、 S-7601Aがデータを送信すべきタイミングであれば、遅延ACKの設定値によらず送信します。 S-7601AのACK送信は、スライディングウインドに対応しています。
● クロック分周レジスタ[TCP_Clk_Divider]の使用方法は?
 込み合ったネットワークやラウンドトリップ遅延が極端に大きなネットワークでは適切に設定されたTCPクロックジェネレータ使用することにより、トラフィックやパケット総量を軽減できる場合があります。
なお、このレジスタはインデックス0x00にのみ実装されています。このレジスタを設定するときは、インデックスが0x00である必要があります。その生成クロックは、ソケット0、ソケット1に共通に使われます。適切な分周比設定値を求める一般式はありません。 tcp_clkは1KHzが標準でこれを基準に微調整を行います。分周比設定値はネットワークを含めてシステム全体で充分検討してください。微調整される時間は、S-7601Aの再送信間隔、TCPタイムアウトまでの時間、2MSL時間、遅延ACK時間です。 TCPクロックレートが基準である1KHzのとき、再送信の1回目は約900ms後です。その後は倍々に送信間隔が増加します。4分経過するとTCPモードのソケットのタイムアウトとなります。
タイムアウト以降は約2分間隔で再送信しますがその状態では、そのコネクションは異常と判断して、ソケットをリセットすべきです。アプリケーションはタイマーなどを用いて送信への応答を監視して、アプリケーションが定めた規定時間内に正常な応答がなかった場合は、そのコネクションは異常と判断して、ソケットをリセットすべきです。
TCPモードでの再送信は、SYN, FINの送信と、データの送信に対する正常な応答がなかった場合に行われます。
● CHAP認証を使用するには?
 PPP最大リトライレジスタ[PPP_Max_Retry]のUse_CHAPビットをイネーブルにします。このビットがイネーブルであれば、LCPフェーズでピアからのCHAP認証の設定要求をACKします。CHAPチャレンジを受信したらアプリケーションは受信データとIDを読み出し、CHAP応答を組み立てて送信してください。通常はMD5のアルゴリズムが採用されています。MD5はRFC1321で標準化されています。CHAP応答が適切であれば S-7601AはピアからCHAP認証されます。ピアへCHAP認証の設定要求を送信することはできません。つまり、S-7601AはピアをCHAP認証することはできません。CHAP認証がイネーブルならば、PPPコントロールレジスタ[PPP_Ctrl_Stat]のUse_PAPビットの設定にかかわりなくCHAP認証が行われます。
●「自動IP割り付け機能」とは?
 PPPはネットワーク制御プロトコル(NCP)をいくつか定義しています。インターネットプロトコル制御プロトコル(IPCP)もその一つです。S-7601AではIPCPのIP-ADDRESSオプション(0x03)を使って、リモートピアのIPアドレスを割り付けることができます。以下にその手順を紹介します。
リモートピアから、IP-ADDRESSオプション(0x03)のIPアドレスフィールドに0.0.0.0を入れた設定要求を受信した場合、S-7601Aの自動IP割り付け機能がイネーブルであればNAKします。そのNAKパケットのIPアドレスフィールドには、10.10.x.xを入れます。xはランダムな値です。リモートピアは設定要求パケットのIP-ADDRESSオプションのIPアドレスフィールドにこの値をコピーして再度、送信するはずです。それはS-7601AによってACKされます。その結果、S-7601AによってリモートピアへIPアドレスを割り付けたことになります。
S-7601Aは割り付け機能がディスイネーブルであれば全ての値を受け入れ、ACKします。
 
リモートピアが要求したIPアドレス 自動IP割り付け機能イネーブル 自動IP割り付け機能ディスイネーブル
0.0.0.0 リモートピアへ10.10.x.xのIPアドレスを割り付ける。 要求されたIPアドレスとして0.0.0.0を受け入れる。
0.0.0.0 以外 要求されたIPアドレスを受け入れる。 要求されたIPアドレスを受け入れる。

  自動IP割り付け機能の制御は、PPP最大リトライレジスタ[PPP_Max_Retry]のIPADビットを使用します。

● 新しいMPU I/Fモードとは?
 S-7601Aでは新たにSPIシリアルモードが追加されました。SPIシリアルモードでは、クロックフォーマットとビットフォーマットが選択可能です。
S-7600Aは68kパラレルとx80パラレルの2つのパラレルモードとSIIシリアルの1つのシリアルモードをサポートします。S-7601Aではさらにシリアルを強化し、計4つのインターフェイスをサポートします。各モードはS-7600Aと同様に、PSX、C86端子で以下のように選択することができます。
 
PSX
C86
インターフェイス
0
0
SIIシリアル
0
1
SPIシリアル
1
0
x80パラレル
1
1
68kパラレル

  既に、S-7600Aをご使用のお客様が、同様にS-7601AでもSIIシリアルをご使用される場合には、C86端子が”0”であることをご留意下さい。S-7600AではC86端子がDon’t Careになっています。 


FAQ2  改良機能
●MPU I/Fのどこが改良されたのか?
 パラレルモードのイネーブル(制御)パルス幅とシリアルモードのシステムサイクル時間のMax値(1.9CLK)の制限がなくなりました。
 パラレルモードでのアドレスとデータのホールド時間が0ns(Min.)になりました。
補足説明
 S-7600A/01Aでは、アドレスとデータについてセットアップ時間とホールド時間を規定しています。S-7601Aでは各々のホールド時間を0ns(Min.)にすることで、プロセッサとの接続性を改善しています。

なお、アドレスのセットアップ・ホールド時間の規定は、以下のようになります。

68kモード READXの立下りエッジに対するCS、RS、WRITEXのセットアップ・ホールド時間です。
x80モード ライト時(読み出しサイクルのアドレス指定時を含む)では、
WRITEXの立上りエッジに対するCS、RS、READXのセットアップ・ホールド時間です。
リード時では、
READXの立上りエッジに対するCS、RS、WRITEXのセットアップ・ホールド時間です。
SIIシリアルモード アドレスセットアップ時間はSD6の立下りエッジに対するCS、RS、WRITEXの時間です。
アドレスホールド時間はSD6の立上りエッジに対するCS、RS、WRITEXの時間です。
● 物理レイアインターフェイス(シリアルポート)のどこが強化されたのか?
 DCD信号の入力レベルが変化すると、ポート割り込み(PInt)を発生させることができるようになりました。これによって、物理レイアの状態がよりタイムリーに確認することが可能となりました。
● 5Vインターフェイスはどの端子について有効なのか?
 入力端子と入出力端子について5Vインターフェイスが可能です。ただし、入出力端子については、入力状態のみとなりますのでご注意下さい。


FAQ3  PPP
●PPPの切断、異常の判断は?
 PPP割り込みコードレジスタ[PPP_Int_Code]を使用します。
PPP接続確立はステータスコードの0x09で確認できます。PPP切断はステータスコードの0x0Aで確認できます。ピアからPPP切断を要求された場合、ステータスコードは0x04 - 0x0A - 0x01と遷移します。この場合、0x0Aか0x01であればPPP切断と判断できます。ステータスコードの0x01, 0x02, 0x05, 0x08は異常系のPPP切断を示します。多くのダイアルアップサーバはPPP切断するとダイアルアップ接続そのものを切断します。また、アプリケーションはタイマーなどを用いて接続要求への応答を監視して、アプリケーションが定めた規定時間内に0x09に遷移しない場合は、異常と判断すべきです。アプリケーション仕様で決定することがらですが、PPP切断または異常と判断したらハードウエアリセットか少なくともソフトウエアリセットすることをお勧めします。その後、必要ならあらためてダイアルアップ接続してください。
PPP接続・切断時の書き込み手順は?
 以下にPPP接続・切断時の書き込み手順を紹介します。 PPPの接続・切断は、PPPコントロール/ステータスレジスタ[PPP_Ctrl_Stat]を使用します。
(注)これらは一例ですので、実際の手順はアプリケーション仕様に従い決定してください。
(1) PPP接続時の書き込み手順例
7 6 5 4 3 2 1 0
PPP_Int Con_Val Use_PAP TO_Dis PPP_Int_En Kick PPP_En PPP_Up/SRst
0 0 0 0 0 0 0 1
- 1 - 0 - 0 0 0
(その他のレジスタ設定)
- 1 - 0 - 0 1 0
(PPP接続確立確認)
※ -は、必要に応じて設定
(2)PPP切断時の書き込み手順例
7 6 5 4 3 2 1 0
PPP_Int Con_Val Use_PAP TO_Dis PPP_Int_En Kick PPP_En PPP_Up/SRst
- 1 - 0 - 0 0 0
(PPP切断確認)
0 0 0 0 0 0 0 0
※ -は、必要に応じて設定
(3)PPP切断時の書き込み(ピアからの切断、異常系の切断)手順例
7 6 5 4 3 2 1 0
PPP_Int Con_Val  Use_PAP TO_Dis PPP_Int_En Kick PPP_En PPP_Up/SRst
(0PPP切断確認)
0 0 0 0 0 0 0 0
●どのようにローカルIPアドレス(自己IPアドレス)が割り付けられるのか?
 ローカルIPアドレスレジスタ[Local_IP_Addr]を設定してからPPP接続を行うと、S-7601AはNCPフェーズでまずその設定値のIPアドレスを設定要求します。ピアがそれをACKすればローカルIPアドレスは設定値になります。ピアにフローティングIPアドレス割り付けの機能がある場合は、S-7601Aからの設定要求をNAKして、ローカルIPアドレスを割り付ける場合もあります。
このレジスタをデフォルト値としてPPP接続を行うと、S-7601AはNCPフェーズで0.0.0.0のIPアドレスを設定要求します。ピアは必ずこれをNAKしてローカルIPアドレスを割り付けます。
PPP接続確立を確認してから、このレジスタを読み出すと最終的にネゴシエーションされたなローカルIPアドレスを示します。
FAQ1の自動IP割り付けを参照>


FAQ4  TCP
●どうすればTCPのステートが遷移するのか?
 アプリケーションからTCPのステートを遷移させるには、ソケットアクティブレジスタ[Socket_Activate]を使用します。
ソケットアクティブレジスタでソケットをアクティブ(”0”から”1”)にすることで、TCPクライアントモードではSYNフラグを送信してCLOSEDからSYN_SENTに遷移(アクティブオープン)します。TCPサーバモードではCLOSEDからLISTENへ遷移(パッシプオープン)してSYNフラグを待ち受けます。
ESTABLISHEDからFIN_WAIT1、CLOSE_WAITからLAST_ACKはソケットアクティブレジスタでソケットを非アクティブ(”1”から”0”)にすることで行います。このときFINフラグを送信します。また、FINフラグを受信したことによりCLOSE_WAITになった場合も、ソケットアクティブレジスタに"0"を書き込み、S-7601AからFINフラグを送信してそのコネクションをクローズします。しかし、コネクションが異常、 S-7601AがTCPモードのソケットのタイムアウト状態、ソケットステータス0レジスタのSnd_Empビットが"0"のときなどはFINフラグを送信しない場合があります。そのときは、ソケットをリセットしてCLOSEDとしてください。
S-7601AからFINフラグを送信した結果、ピアからFINフラグを受信し、TIME_WAITになった場合、2MSL時間(S-7601Aでは約6分)経過すると自動的にCLOSEDとなります。アプリケーションが2MSL時間を待てない場合、ソケットをリセットしてCLOSEDとすることは事実上容認されています。また、RSTフラグを受信するなど、そのコネクションを異常と判断したら、ソケットをリセットしてCLOSEDとしてください。 


FAQ5  物理レイヤインターフェイス
●モデムの制御方法は?
 S-7601Aの物理レイアインターフェイス(シリアルポート)は以下の二つから制御が可能です。
? S-7601Aのネットワークスタックからの制御
? MPUインターフェイスを経由してホストMPUからの制御
モデムを制御する場合には、?のホストMPUからの制御を選択します。この切り替えはシリアルポートコンフィグレジスタ[SP_Config]のSCTLビットにより行います。
アプリケーションがモデム、ダイアルアップ関連の制御を行うときはこのビットを”0”にします。PPP,TCP,UDPの通信をすることきは”1”にしてネットワークスタックから物理レイアインターフェイス(シリアルポート)を制御します。
●ボーレイトの設定方法は?
 シリアルポートボーレート分周レジスタ[SP_BAUD_Rate_Div]を使用します。
以下の式を使って設定値を計算します。
プログラム値=[(clk周波数)/(ボーレート)] - 1 
ここで、clkはS-7601Aのクロックレートです。

例えば、S-7601Aクロックレートが256kHzで、64Kbpsのボーレートの通信をする場合、プログラム値は以下の通りです。

(256 kHz / 64 k) - 1 = 4 - 1 = 3
これらのレジスタにプログラムする最低値は0x0003です。
 またボーレート精度を2%以内の精度で合わせこむ必要があります。そのためS-7601Aクロックレートとボーレートの比を整数倍の近く必要があります。例えば、S-7601Aクロックレートが76800Hzで9600bpsの通信をする場合、
76800 / 9600 = 8
と整数倍になり、問題ありませんが、クロックレートを100KHzとすると
100000 / 9600 = 10.41
となり、整数値からずれてしまいます。このときのレジスタに9設定したとすると、ボーレイトを10000bpsに設定したこととなります。
10000 / 9600 = 1.041
ですのでボーレイトに4.1%のずれがあります。この場合はスペックアウトとなり通信できません。このずれが前後2%以内におさまるようにしてください。

 

FAQ6  MPUインターフェイス
● 双方向バスの切り替りタイミングは?
 S-7601Aのデータバス(SD7-0)は以下の論理で入出力が切り替えられます。
68Kモードの場合、CS=H, READX=H, WRITE=H
x80ボードの場合、 CS=H, READX=L, WRITE=H
の条件で、データバス(SD7-0)は出力状態となります。この状態では、MPUはデータバスをドライブできません。上記以外の状態では、データバスは入力状態となります。
● BUSYX信号の役割は?
 S-7601Aの68Kパラレル、x80パラレル、SIIシリアルの3つのモードでは、BUSYX信号の状態を監視して、次の処理を行う必要があります。SPIシリアルではBUSYX信号を監視する必要がありません。ただし、S-7601Aのクロック周波数をSPIシリアルのSCK周波数の2倍以上にする必要があります。

BUSYX信号はS-7601Aの内部回路とMPUインターフェイスのデータ通信のために必要となります。
書き込みサイクルでは、1)アドレス指定, 2)データ指定の2サイクルが必要です。2)のデータ指定がなされた時点でMPUインターフェイスは内部回路にデータを転送します。このデータ転送中に次の命令が来るのを避けるため、ビジー状態となります。
読み出しサイクルでは、1)アドレス指定, 2)アドレス確認, 3)データ読み出しの3サイクルが必要です。2)のアドレス確認がなされた時点で内部回路からMPUインターフェイスにデータが転送されます。MPUインターフェイスにデータがセットアップされるまで、ビジー状態となります。
BUSYX信号の出力パルス幅はS-7601Aのクロック周波数に多く依存します。通常、S-7601Aのクロック周波数を遅くすると、BUSYX信号の出力パルス幅は長くなります。逆に、クロック周波数を速くすると、BUSYX信号の出力パルス幅は短くなります。