UV-K5 や K6 の無線機のシリアル通信について少し調べてみました。
その備忘録です。
パソコンと無線機間で使用されるコマンド
※調査不完全であり、信頼できるとは言えない点をご理解いただければ幸いです。
コマンドID | 機能説明 |
---|---|
0x0514 | セッション初期化、バージョン情報と状態を返信 |
0x051B | EEPROM の読み出し |
0x051D | EEPROM への書き込み |
0x0527 | RSSI 値の読み出し |
0x0529 | ADC からの読み出し、バッテリー情報を返信 |
0x052D | セキュリティチャレンジ、ロック状態の確認 |
0x052F | セッション初期化、詳細なバージョン情報と状態を返信 |
0x0601 | BK4819 レジスタの読み出し |
0x0602 | BK4819 レジスタへの書き込み |
0x0801 | キープレスのシミュレーション |
0x0803 | PC への LCD スクリーンメモリのダンプ |
0x0808 | スキャン機能 |
0x0850 | 複数レジスタへの書き込み |
0x0851 | 複数レジスタの読み出し |
0x0860 | GPIO ピンの設定 |
0x0861 | GPIO ピンの状態読み出し |
0x0870 | フルコントロールモードの有効化 |
0x0888 | ジェットスキャン |
パソコンと無線機間の通信をモニタした実際のデータ
以下は、Quansheng Dock で [F-0] から FM ラジオを選択したときの、シリアルデータです。
ab cd 06 00 17 64 16 e6 2e 91 e8 ea dc ba
ab cd 06 00 17 64 16 e6 3d 91 c8 bc dc ba
- パケット開始
パケットは 0xAB 0xCD で始まります。 - データ長
次の2バイトは、実際のペイロードデータの長さを表しています。 - ペイロード
次の7バイトは、XOR 処理されたペイロードデータで、送受されるコマンドを含む主要な情報部分です。(赤色のデータ) - CRC チェックサム
次の1バイトペイロードデータの整合性を保証するための CRC チェックサムです。 - パケット終了
最後の 0xDC 0xBA は、パケットの終了を示しています。
送受信されるデータは次のバイト列で XOR で暗号化されています。{ 0x16, 0x6c, 0x14, 0xe6, 0x2e, 0x91, 0x0d, 0x40, 0x21, 0x35, 0xd5, 0x40, 0x13, 0x03, 0xe9, 0x80 }
XOR 処理されたデータは、各バイトに対応するバイトで XOR することにより解除することができます。
ab cd 06 00 17 64 16 e6 2e 91 e8 ea dc ba
0x17 xor 0x16 → 0x01
0x64 xor 0x6C → 0x08
0x16 xor 0x14 → 0x02
0xE6 xor 0xE6 → 0x00
0x2E xor 0x2E → 0x00
0x91 xor 0x91 → 0x00
0xE8 xor 0x0D → 0xE5
→ ab cd 06 00 01 08 02 00 00 00 E5 EA DC BA
ab cd 06 00 17 64 16 e6 3d 91 c8 bc dc ba
0x17 xor 0x16 → 0x01
0x64 xor 0x6C → 0x08
0x16 xor 0x14 → 0x02
0xE6 xor 0xE6 → 0x00
0x3D xor 0x2E → 0x13
0x91 xor 0x91 → 0x00
0xC8 xor 0x0D → 0xC5
→ ab cd 06 00 01 08 02 00 13 00 C5 BC DC BA
今日はここまでですが、ペイロードの周波数を設定したり、受信したシグナルを表示するコマンドについて、GitHub で公開されているソースコードを見ながら、または実際のシリアル通信をモニタリングしながら、じっくりと進めていきたいと思います。