受信用TNCの製作(4)
受信用TNCはAX.25の受信を目的としていますので、今回はAX.25について解説します。
通信のプロトコル(手順)は、物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、プレゼンテーション層、アプリケーション層の7つに分かれています。
AX.25は物理層からネットワーク層までが規定されているのですが、今回は音声信号(パケット音)をデータに変換することが目的なので、データの0と1がどのような周波数を使用してどのような速度で送信されているのかという物理層と、送信されたデータの0と1の羅列がどのような意味を持つのかというデータリンク層の部分がわかれば足りることになります。
これに関する参考書は、物理層についてはトランジスタ技術スペシャルNo.113「ワイヤレスデータ通信の基礎と応用」、データリンク層については「パケット通信ハンドブック」と「パケット無線ネットワーク」、その他“TNC-X: An Expandable Microcontroller-Based Terminal Node Controllerを中心としたインターネット上の各種情報です。
特に“TNC-X: An Expandable Microcontroller-Based Terminal Node Controller”は実際に作成されたTNCで使用されているプログラムを基に説明されていることから、理解の中心となりました。
以下に、受信用TNCでポイントとなる部分を説明します。
(1) Bell202規格【物理層】
周波数変調の際の副搬送波に、1200Hzと2200Hzを使用するものです。それぞれの周波数がビットの0と1に対応するのではありません(これについては後のNRZIを参照)が、音声信号の1200Hzと2200Hzが区別(各周波数を検出)できればよいことになります。
(2) データ転送速度(1200bps)及び変調速度(1200baud)【物理層】
データの転送速度は1200bps、すなわち1200分の1秒ごとに1ビットのデータが送信されることになります。変調速度も1200baud、つまり1ビットのデータ送信のために1200分の1秒ごとに(1)の周波数が切り替わることになります。
(3) NRZI【物理層】
(1)で説明した副搬送波の2つの周波数に対して一方がビットの0や1に対応するのが、RZI符号化です。
これに対して、Ax.25では、一方から他方へ変化する場合には「0」、変化しない場合は「1」を表すというNRZI符号化を使用しています。
この2つの差は、RZIの場合、ある局が1200Hzを「0」2200Hzを「1」として送信している場合に、受信側が1200Hzを「1」2200Hzを「0」と解釈してしまうとビットデータが反転してしまうのに対して、NRZIでは副搬送波が変化すれば「0」直前と同じなら「1」と判定するため、周波数の高低の解釈の差でデータが反転してしまうことはありません。
これはSSBでの送受信のときに、LSBとUSBの違いがあってもNRZIの場合は復調可能という利点があります。
RZIとNRZIのどちらも、周波数の変化点をビットの切れ目と捉えることで、データの同期をとることができます。
(4) スタートフラグ及びエンドフラグ【データリンク層】
データの始まりあるいは終わりを示すために、「01111110」、16進数で表すと「0x7E」を使用します。
(5) ゼロ・インサーション【物理層】
上記(3)のNRZIの場合、データに「1」が連続すると副搬送波が変化しないため、データの同期がとりにくくなります。
また、上記(4)で説明したスタートフラグあるいはエンドフラグと、データの「1」が6つ連続した時の区別がつかなくなってしまいます。
そこで、送信時にデータの「1」が5回連続した場合には、その次には必ず「0」を挿入し、受信側で「1」が5回連続したら続く「0」を削除するという方法がとられます。
これにより、「1」が6回連続したらヘッダー又はフッターであることが検出できます。
なお、余分なビット「0」が随時追加されるため、送信されるビット数は必ずしも8ビットの倍数にはなりません。余分な「0」を取り除けば、8ビットの倍数になります。
(6) アドレスフィールド【データリンク層】
Ax.25はコンピュータのLANで使用されるHDLCという伝送制御方式と同様のデータ形式ですが、アドレス部に宛先局と送信局のコールサインを入れることができように、長くなっています。
HDLCではアドレス部が1バイトしかありませんが、Ax.25ではコールサインが6バイト+SSIDに1バイトの計7バイトが最低宛先局と送信局の2つ分必要なため、14バイトとなっています。さらに、中継局の情報を入れると7バイトずつ増えることになります。
このアドレスの長さは一定ではないため、コールサインをアスキーコードで表したもの(たとえば「J」は2進数で「01001010」になります)、これを左シフトして最下位が「0」の場合(先の「J」は「10010100」になります)は次の1バイトもアドレスを示し、最下位が「1」の場合(先の「J」は「10010101」になります)はアドレス部の最後を示すとしています。
なお、アドレスは宛先局、送信局、中継局の順に送信されます。これに対してデコード結果は、送信局、宛先局、中継局の順に表示するのがパケットのデータ形式となっていますので、一工夫が必要です。
(7) 誤り検出【データリンク層】
データの送受信には、有線無線を問わず、エラーがつきものです。
このエラーを検出するために、Ax.25のデータの最後にチェック用のデータが追加されています。このチェック用のデータをFCS(フレームチェックシークエンス)といいます。
これは、アドレス部を含む全データに対してある演算(CRC-16-CCITT)をした結果の2バイト(FCS)を送信時に末尾に加え、受信側でFCSを除く全データに対して同じ演算をした結果とFCSの値とを比較し、一致すれば誤りがないデータであると判断するものです。
以上説明した(1)から(7)の7つのポイントに対処すれば、目的が達成できることになります。
次回からは、各項目をどのように解決したのかを説明します。
なお実際の開発では、周波数計測以下の各項目を行きつ戻りつして改良を重ねたのですが、各項目では開発結果を機能ごとに説明します。
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント