|
| 1 | +# Communication with Components |
| 2 | + |
| 3 | +## 概要 |
| 4 | +コンポーネント間通信などをまとめる. |
| 5 | +なお,地上局との通信関連や, CCSDS などについて,衛星内コンポーネントのネットワーク関連などについては [Core Layer/Communication](../Core/communication.md) を参照のこと. |
| 6 | + |
| 7 | + |
| 8 | +## 通信レイヤ |
| 9 | +コンポーネント間通信などのための通信レイヤについてまとめる. |
| 10 | + |
| 11 | +### ネットワーク層 |
| 12 | +コンポーネントや地上局,その他のノードでのデータ配送において,エンド・ツー・エンドの配送に責任を持つ. |
| 13 | +CCSDS における APID によって制御されるデータ配送はネットワーク層である. |
| 14 | + |
| 15 | +この層を流れるデータ単位を `Packet` と呼ぶ. |
| 16 | + |
| 17 | +C2A では,地上局との通信や C2A 間通信において, [Core Layer/Communication](../Core/communication.md) の Common Packet が標準的に使用される. |
| 18 | +C2A を搭載した OBC と Common Packet に対応していないその他のコンポーネントでは,後述する EB90 Packet を可能な限り用いる. |
| 19 | + |
| 20 | +### データリンク層 |
| 21 | +隣接するコンポーネントや地上局,その他のノード間でのデータ転送を行う. |
| 22 | +例えば,衛星内のコンポーネント A と B 間での UART での通信に対して責任を持つ. |
| 23 | +したがって,この場合は, UART 通信で発生しうるノイズへの耐性を提供することが期待される. |
| 24 | + |
| 25 | +この層を流れるデータ単位を `Frame` と呼ぶ. |
| 26 | + |
| 27 | +C2A では,CCSDS に準拠した地上局との通信では,それに準拠し Transfer Frame が使用される. |
| 28 | +それ以外では,後述する EB90 Frame を可能な限り用いる. |
| 29 | + |
| 30 | + |
| 31 | +## ネットワーク層 (Packet) |
| 32 | +### Common Packet |
| 33 | +[Core Layer/Communication](../Core/communication.md) を参照のこと. |
| 34 | + |
| 35 | +### EB90 Packet |
| 36 | +Common Packet ほどリッチな情報をやり取りしない通信に用いる. |
| 37 | +したがって, User Data Field 以外の Header には, |
| 38 | + |
| 39 | +- Version ID |
| 40 | +- Tlm / Cmd Count |
| 41 | +- Tlm / Cmd ID |
| 42 | + |
| 43 | +のみ,定義されている. |
| 44 | + |
| 45 | +直接通信する2者を超え,ネットワークを構築するだけの能力はない. |
| 46 | +また,通常データリンク層としては EB90 Frame が用いられる. |
| 47 | + |
| 48 | +現在は Ver.1 のみ策定されており,その定義は以下を参照すること. |
| 49 | + |
| 50 | +https://github.com/ut-issl/c2a-core/blob/9f5154ddc5684f8e626b77c8f8bc7c8215c0e096/Drivers/Protocol/eb90_packet_for_driver_super.h#L1-L25 |
| 51 | + |
| 52 | +#### 各フィールドの説明 |
| 53 | +- Version ID |
| 54 | + - `0x00`: バージョン不定 |
| 55 | + - `0x01`: Version 1 |
| 56 | +- Tlm / Cmd Count |
| 57 | + - 送信 Packet 毎にインクリメントされていくカウンタ |
| 58 | +- Tlm / Cmd ID |
| 59 | + - Packet 種別を表す ID |
| 60 | +- User Data Field |
| 61 | + - バイト単位で格納されたユーザーデータ |
| 62 | + |
| 63 | +なお,すべてのフィールドのバイトオーダはビッグエンディアンとする. |
| 64 | + |
| 65 | + |
| 66 | +## データリンク層 (Frame) |
| 67 | +### EB90 Frame |
| 68 | +UART などで接続されたコンポーネント間の通信といった,軽微な通信ノイズの誤り検出のみ必要な場合に用いる. |
| 69 | +ネットワーク層として EB90 Packet や Common Packet などが標準的に使用される. |
| 70 | + |
| 71 | +https://github.com/ut-issl/c2a-core/blob/9f5154ddc5684f8e626b77c8f8bc7c8215c0e096/Drivers/Protocol/eb90_frame_for_driver_super.h#L1-L33 |
| 72 | + |
| 73 | +#### 各フィールドの説明 |
| 74 | +- STX |
| 75 | + - Frame 先頭識別子 |
| 76 | + - `0xEB 0x90` 固定 |
| 77 | +- Packet Length |
| 78 | + - Packet Field の長さ |
| 79 | +- CRC |
| 80 | + - Packet Field 部分の CRC (Header は含めない) |
| 81 | + - 使用する CRC の種類は CRC-16/CCITT-FALSE (CRC-16/AUTOSAR, CRC-16/IBM-3740 とも) |
| 82 | + - `width=16, poly=0x1021, init=0xffff, refin=false, refout=false, xorout=0x0000, check=0x29b1, residue=0x0000` |
| 83 | +- ETX |
| 84 | + - Frame 終端識別子 |
| 85 | + - `0xC5 0x79` 固定 |
| 86 | +- Packet Field |
| 87 | + - バイト単位で格納された送信 Packet |
| 88 | + - EB90 Packet や Common Packet などが格納される |
| 89 | + |
| 90 | +なお,すべてのフィールドのバイトオーダはビッグエンディアンとする. |
| 91 | + |
| 92 | + |
| 93 | +## C2A 間通信 |
| 94 | +衛星内上の C2A (ないしは互換の Common Packet を用いる FSW)を搭載したコンポーネント(主に OBC)間での通信について記す. |
| 95 | +C2A 間通信によって,以下のような機能が提供される. |
| 96 | + |
| 97 | +- OBC 間の簡易な Driver 実装と自動コード生成 |
| 98 | + - [c2a-tlm-cmd-code-generator](https://github.com/ut-issl/c2a-tlm-cmd-code-generator) 参照. |
| 99 | + - [`Examples/minimum_user/src/src_user/Drivers/Aocs`](/Examples/minimum_user/src/src_user/Drivers/Aocs/) などの多くのコードが自動生成される. |
| 100 | +- OBC と地上局でネットワークを形成. |
| 101 | + - 地上局から MOBC をルーターとして, 2nd OBC へコマンド配送. |
| 102 | + - 2nd OBC のテレメトリを MOBC を経由して地上局まで配送. |
| 103 | + - OBC A から OBC B に対してコマンド発行 / テレメ送信. |
| 104 | + - 他 |
| 105 | + |
| 106 | +C2A 間通信の具体的な実装については,本リポジトリに同封されている User Sample である [`Examples/minimum_user`](/Examples/minimum_user) と [`Examples/2nd_obc_user`](/Examples/2nd_obc_user) での通信(前者が MOBC,後者が AOBC を想定)を参考にされたい. |
| 107 | +具体的なドライバのコードは以下となる. |
| 108 | + |
| 109 | +- https://github.com/ut-issl/c2a-core/blob/9f5154ddc5684f8e626b77c8f8bc7c8215c0e096/Examples/minimum_user/src/src_user/Drivers/Aocs/aobc.c#L1-L164 |
| 110 | +- https://github.com/ut-issl/c2a-core/blob/9f5154ddc5684f8e626b77c8f8bc7c8215c0e096/Examples/2nd_obc_user/src/src_user/Drivers/Etc/mobc.c#L1-L150 |
| 111 | + |
| 112 | +地上局からのコマンドルーティングについては [Core Layer/Communication#コマンド配送におけるルーティングについて](../Core/communication.md#コマンド配送におけるルーティングについて) などを参照すること. |
| 113 | + |
0 commit comments