JH1LHVの雑記帳

和文電信好きなアマチュア無線家の雑記帳

スポンサーリンク

UV-K5、K6 のシリアル通信を解析 ①

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 

  1. パケット開始
    パケットは 0xAB 0xCD で始まります。
  2. データ長
    次の2バイトは、実際のペイロードデータの長さを表しています。
  3. ペイロード
    次の7バイトは、XOR 処理されたペイロードデータで、送受されるコマンドを含む主要な情報部分です。(赤色のデータ)
  4. CRC チェックサム
    次の1バイトペイロードデータの整合性を保証するための CRC チェックサムです。
  5. パケット終了
    最後の 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 で公開されているソースコードを見ながら、または実際のシリアル通信をモニタリングしながら、じっくりと進めていきたいと思います。