アマチュア無線を使用する衛星TC/TM通信 AX.25プロトコル

# はじめに
　超小型衛星のテレコマンド/テレメトリ通信（以下TC/TM通信）によく使われるAX.25プロトコルについて、ちょこっと書く機会があったので、Qiitaにも書き残しておく。
　AX.25プロトコルとの出会いは、リーマンサット・プロジェクトの衛星 RSP-00 通信系ソフト開発担当となり、AX.25エンコーダー/デコーダーを作ることになったときのこと。その後、RSP-01に搭載する新規開発の通信機に改良版を組み込んだ。このことはいずれ書きたいと思う。

# パケット通信

　TC/TM通信はデジタルデータのやりとりを行うためデジタル無線通信である。アマチュア無線界では、1980年代後半にアマチュア無線の特性に合わせたパケット通信方式が生まれ、地上局－衛星間の衛星通信もそれを応用した形で利用されている。

* パケットと呼ばれるブロックにデータを分割して送信する無線通信方式
* パケット通信にはTNC(Terminal Node Controller)と呼ばれるモデムとAX.25プロトコル制御を行う装置が用いられる
* 地上局はTNCを無線機に付加し、衛星はモデムICとマイコンソフトでTNCに相当する機能を実現している
* 通信には、主にVUHF帯で1200bpsのAFSKや4800bps, 9600bpsのGMSKが使われる 
    * AFSK：Bell 202規格の音声周波数偏移変調
    * GMSK：ガウス最小偏移変調
* パケット通信の応用としてAPRS(Automatic Packet Reporting System)が挙げられる。APRSはリアルタイムで生データを配信する通信プロトコルで、GPSを利用した位置のトラッキングやAPRSパケットの中継、インターネットとの接続が行える。ARPS機能を内蔵した無線機が多数登場している。

# OSI参照モデル
　AX.25プロトコルの説明に「OSI参照モデル」が出てくるので、まずこの説明を書いておく
　OSI参照モデル：異機種間のデータ通信を実現するため国際標準化機構(ISO)によって策定された通信機能を７つの階層構造（レイヤ）に分割したモデル

* 第7層 アプリケーション層
    * 具体的な通信サービス
    * アプリケーションの種類の規定
* 第6層 プレゼンテーション層
    * データの表現方法
    * データフォーマットの交換
* 第5層 セッション層
    * 通信プログラム間の通信の開始から終了までの手順
    * コネクションの確立や切断。トランスポート層以下の管理
* 第4層 トランスポート層
    * ネットワークの端から端までの通信管理（エラー訂正、再送制御等）
    * ノード間のデータ転送の管理
* 第3層 ネットワーク層
    * ネットワークにおける通信経路の選択（ルーティング）
    * データ転送を行う機器間のアドレスの管理や経路の選択
* 第2層 データリンク層
    * 直接的（隣接的）に接続されている通信機器間の信号の受け渡し
    * 直接接続された機器間のデータフレームの識別と転送
* 第1層 物理層
    * 物理的な接続方法の規定

　アマチュア無線のパケット通信を利用したTC/TM通信では、OSI参照モデルを３階層に簡略化したモデルで通信機能を説明できる

* アプリケーション層
    * 特定のアプリケーションがどのように通信するかといった情報を渡す役割を持ち、衛星・地上局固有のプロトコルでコマンドやテレメトリの通信を行う
* データリンク層
    * 直接接続された機器同士でデータのやり取りを実現する役割を持ち、AX.25プロトコルのデータフレームを用いてデータの転送とエラー検出を行う
* 物理層
    * 無線通信による物理的な接続

# AX.25プロトコル
### 特徴

* X.25プロトコルのデータリンク層をアマチュア無線の2局間通信に向けて規定したもの
* 1982年米国で初の交信が行われ、日本では1984年頃から通信が行われるようになった
* ターミナルノードコントローラー(TNC)と呼ばれるモデムと通信プロトコルを一体化した無線機に付加し通信を行う
* エラーチェックは行うが、エラー訂正は行えない
* 誤ったデータのリカバリ手順を持つコネクション型モードとそれを持たないコネクションレス型モードがある
    * コネクション型モード
        * 接続、切断、および、再送要求と再送を行うためのプロトコルを持つため情報データのスループットが悪くなる
    * コネクションレス型モード
        * コネクションレス型の情報データ伝送にはプロトコルが簡略化されたUI(Unnumbered Information)フレームというフレームタイプを使用する
        * ある意味一方通行の通信で、通信相手が正しく受信できたかどうかわからないため、結果を伝えるためには別途応答する手順が必要になる
        * 多くの衛星がこの方式によるコマンド・テレメトリの通信を行っている

### 変調方式

* Bell 202規格の音声周波数偏移変調(AFSK) 1200bps
* ガウス最小偏移変調(GMSK) 9600bps

### AX.25 UIフレームフォーマット
AX.25フレームはいくつかのフィールドで構成される
![T-RX-Software_AX25-Frame.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112480/c43b03bc-4dc3-1d16-1920-23ef9a4bf5fa.png)

* フラグフィールド
    * フレームの始まりと終わりを示す8ビットのフィールドで二進数で'01111110'である。他のフィールドのビット列はビットスタッフィングにより'1'が6個続くことがないため、ビットのパターンが'0'1111110'ならフラグであることがわかる
* アドレスフィールド
    * フレームの宛先、送信元を表すフィールドで、宛先、送信元とオプションで２個のレイヤー２リピータアドレスを示すサブフィールドからなる
    * サブフィールドは、コールサイン（6×8ビット）とSSID（8ビット）で構成される。コールサインは大文字＋数字（６文字に満たないときはスペース）のASCIIコードを1ビット左シフトする。SSID(Secondary Station Identifier)は4ビットのバイナリ値でおなじく1ビット左シフトする。SSIDを含むバイトのビット7-5は、UIフレームでは’011’固定、ビット0は’1'のときアドレスフィールドの末尾を表す。
![AX.25 アドレスフィールド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112480/069ae9ff-29e6-60cd-48f8-96d658b4f4e6.png)


* コントロールフィールド
    * フレームの種類を表す8ビットまたは16ビットのフィールドで、UIフレームは0x03である。
* PIDフィールド
    * Iフレーム、UIフレームに存在するフィールドで、 使用されているレイヤ3プロトコルの種類を表す。レイヤ3プロトコルを使用しないUIフレームは0xF0となる。
* 情報フィールド
    * Iフレーム、UIフレームなどに存在するフィールドで、最大256バイトの整数バイトを取ることができ、ユーザーデータを伝送する。データの内容はプロトコルによって制限されない。
* FCS(Frame-Check Sequence)
    * 16ビットのCRCで、送信フレームと受信フレームの一致評価するために使用する。送信側は、アドレスフィールド〜情報フィールドのデータをCRC-16-CCITT標準に従って計算しFCSとして送信する。受信側は、受信データを同様に計算し、両者が一致するかどうかをチェックする。

### NRZI符号化とBit Stuffing

* NRZI(Non-return-to-zero inverted)はデジタル信号伝送の符号化の一種で、ビットの’0’と’1’を二つの状態で表す方式のうち、元データのビットが同じか変化したかを状態として表す方式である。符号化後の信号状態を’H’と’L’とすると、ビットが’0'のとき’H’と’L’を反転し、ビットが’1’のときは同じ状態を保つ。ビットが’0'のとき信号が反転するので、受信側は信号からクロックを抽出しやすくなる
* ビットが’1'のとき符号化信号は同じ状態が保たれるため、’1'が続くとクロックの抽出が難しくなるのと、’1’が6個続くとフラグと区別がつかなってしまう。そのため、’1’が5個続いたら、次のビットの出力前に符号化信号の反転を挿入し、続けて符号化信号を出力する。これがBit Stuffingである。
![AX.25 NRZI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112480/0b933bde-fccd-663d-0660-dbd34961bbbf.png)

# 参考文献
* AX.25 Link Access Protocol for Amateur Packet Radio Version 2.2
* Markus Alexander Grønstad:Implementation of a communication protocol for CubeSTAR
* Franc ̧ois Piron:Optimization of the AX.25 and D-STAR telecommunications systems of the OUFTI-2 nanosatellite
* QB50 Projcet:AX.25 Telemetry and Telecommand Transfer Frames Format