Hobby Lab 趣味のモノ作り実験のサイトです。
部品 オペアンプ_関係 Si4735 マニュアル CmdNote0x15
1  概要
1.1  概要
2 コマンドパラメータ
2.1 パラメータリスト
3 応答パラメータ
4 その他
4.1 Google AI (Gemini) の見解
4.1.1 選曲中のミュート方法
4.1.2 アンテナ外部切替回路
4.1.3 まとめ

PrO:Si4735関係  Si4735について
 Si4735ラジオを作って見よう1
 Si4735ラジオを作って見よう2
 Si4735テスト中に判ったこと1
 v コマンド & パラメータ解説 v
 コマンド・プロパティー一覧
 0x01. POWER_UP
 0x10. GET_REV
 0x11. POWER_DOWN
 0x12. SET_PROPERTY
 0x13. GET_PROPERTY
 0x14. GET_INT_STATUS
 0x15. PATCH_ARGS
 0x16. PATCH_DATA
 PATCH の構造
 0x20. FM_TUNE_FREQ
 0x21. FM_SEEK_START
 0x22. FM_TUNE_STATUS
 0x23. FM_RSQ_STATUS
 0x24. FM_RDS_STATUS
 0x27. FM_AGC_STATUS
 0x28. FM_AGC_OVERRIDE
 0x40. SSB.AM_TUNE_FREQ
 0x41. AM_SEEK_START
 0x42. SSB.AM_TUNE_STATUS
 0x43. SSB.AM_RSQ_STATUS
 0x47. SSB.AM_AGC_STATUS
 0x48. SSB.AM_AGC_OVERRIDE
 0x80. GPIO_CTL
 0x81. GPIO_SET
 v プロパティ解説 v
 0x0001.GPO_IEN
 0x0100. SSB_BFO
 0x0101. SSB_MODE
 0x0102. DIGITAL_OUTPUT・・
 0x0104. DIGITAL_OUTPUT・・
 0x0201. REFCLK_FREQ
 0x0202. REFCLK_PRESCALE
 0x1100. FM_DEEMPHASIS
 0x1102. FM_CHANNEL_FILTER
 0x1105. FM_BLEND_STEREO..
 0x1106. FM_BLEND_MONO_..
 0x1107. FM_ANTENNA_INPUT
 0x1108. FM_MAX_TUNE_ERR・・
 0x1200. FM_RSQ_INT_SOURCE
 0x1201. FM_RSQ_SNR_HI_T・・
 0x1202. FM_RSQ_SNR_LO_T・・
 0x1203. FM_RSQ_RSSI_HI・・
 0x1204. FM_RSQ_RSSI_LO・・
 0x1205. FM_RSQ_MULTIPA・・
 0x1206. FM_RSQ_MULTIPA・・
 0x1207. FM_RSQ_BLEND_TH・・
 0x1300. FM_SOFT_MUTE_RATE
 0x1301. FM_SOFT_MUTE_SL・・
 0x1302. FM_SOFT_MUTE_M・・
 0x1303. FM_SOFT_MUTE_S・・
 0x1304. FM_SOFT_MUTE_R・・
 0x1305. FM_SOFT_MUTE_A・・
 0x1400. FM_SEEK_BAND_B・・
 0x1401. FM_SEEK_BAND_TOP
 0x1402. FM_SEEK_FREQ_S・・
 0x1403. FM_SEEK_TUNE_S・・
 0x1404. FM_SEEK_TUNE_R・・
 0x1500. FM_RDS_INT_SOU・・
 0x1501. FM_RDS_INT_FIF・・
 0x1502. FM_RDS_CONFIG
 0x1503. FM_RDS_CONFIDE・・
 0x1800. FM_BLEND_RSSI_S・・
 0x1801. FM_BLEND_RSSI_M・・
 0x1802. FM_BLEND_RSSI_A・・
 0x1803. FM_BLEND_RSSI_R・・
 0x1804. FM_BLEND_SNR_ST・・
 0x1805. FM_BLEND_SNR_M・・
 0x1806. FM_BLEND_SNR_A・・
 0x1807. FM_BLEND_SNR_R・・
 0x1808. FM_BLEND_MULTI・・
 0x1809. FM_BLEND_MULTI・・
 0x180A. FM_BLEND_MULTI・・
 0x180B. FM_BLEND_MULTI・・
 0x1A00. FM_HICUT_SNR_H・・
 0x1A01. FM_HICUT_SNR_L・・
 0x1A02. FM_HICUT_ATTAC・・
 0x1A03. FM_HICUT_RELEA・・
 0x1A04. FM_HICUT_MULTI・・
 0x1A05. FM_HICUT_MULTI・・
 0x1A06. FM_HICUT_CUTOF・・
 0x3100. AM_DEEMPHASIS
 0x3102. AM_CHANNEL_FIL・・
 0x3103. AM_AUTOMATIC_V・・
 0x3104. AM_MODE_AFC_SW・・
 0x3105. AM_MODE_AFC_SW・・
 0x3200. SSB.AM_RSQ_INT・・
 0x3201. SSB.AM_RSQ_SNR・・
 0x3202. SSB.AM_RSQ_SNR・・
 0x3203. SSB.AM_RSQ_RSS・・
 0x3204. SSB.AM_RSQ_RSS・・
 0x3300. SSB.AM_SOFT_MU・・
 0x3301. AM_SOFT_MUTE_S・・
 0x3302. SSB.AM_SOFT_MU・・
 0x3303. SSB.AM_SOFT_MU・・
 0x3400. AM_SEEK_BAND_B・・
 0x3401. AM_SEEK_BAND_TOP
 0x3402. AM_SEEK_FREQ_S・・
 0x3403. AM_SEEK_TUNE_S・・
 0x3404. AM_SEEK_TUNE_R・・
 0x3700. SSB_RF_AGC_ATT・・
 0x3701. SSB_RF_AGC_REL・・
 0x3702. SSB_IF_AGC_ATT・・
 0x3703. SSB_IF_AGC_REL・・
 0x4000. RX_VOLUME
 0x4001. RX_HARD_MUTE

Pr:OPAMP オペアンプ関係
PrO:送受信機  Si4735について
 Si4735ラジオを作って見よう1
 Si4735ラジオを作って見よう2
 Si4735テスト中に判ったこと1
PrO:オペアンプ  オペアンプ全般
 バンドパスフィルター
 LM324
 LM358
Pr:Prプロセッサ関係
PrP:プロセッサ
動作比較
 STM32F動作比較
 CH32V203&STM32F 動作比較
 arduino動作比較
raspberrypi関係
 RaspberryPiハード
CH32V関係
 -CH32V開始
 -203K8T6(32Pin)開始
 -203C8T6(48P)開始
 -003J4M6(8Pin)開始
 -003F4P6(20Pin)開始
 -Moun River StudioⅡで
 プログラミング!
  203_GPIO関係
  203_TIME関係
  203_TIME_Encoder
  203_I2C関係
  203_1-Wire関係
  003_DS18B20テスター
  USART(UART)関係
  DS18B20をModBus制御
  可変型フィルター 周辺
  可変型フィルター MCU
 -マニュアル
 CH32V003 Manual
 QingKeV2 Microprocessor Man
 CH32F/V20x,V30x,V31x Manual
 203日本語データシート
 203日本語取説
  MBA メモリとバス方式
  PWR 電力制御
  RCC リセット・拡張・クロック
  BKP バックアップレジスタ
  CRC 巡回冗長検査
  RTC リアルタイムクロック
  GPIO GPIOと代替機能
  DMA ダイレクトメモリアクセス制御
  ADTM 高度な制御タイマー
  GPTM 汎用タイマー
  BCTM 基本タイマー
  USART 同期非同期通信
arduino関係
 ESP12関係
 (a)ESP-8266D1mini注意
PrP:Memory  24C128(16kB)
PrP:その他  RS485ドライバー
 CP2102 BRIDGE
 WCH-LinkEエミュレーター
Pr:Wire 電線関係
Pr:Resistance 抵抗
Pr:Capacitor コンデンサ
Pr:Coil コイル
Pr:PassiveElmt 受動素子
Pr:Diode ダイオード関係
Pr:Tr トランジスタ関係
2SC1815
 リレードライバー設計
 アンプ設計
 発振器
TLP152
 TLP152テスト
TLP2361
 TLP2361テスト
TLP5754
 TLP5754テスト
Pr:Source 電源関係  ツェナーダイオード
 TL431
 LM317
PrS:Downモジュール
 EGS002_IR2110S
 SKU011012
 ACDC02
 XH_M299
 LM2596
 Mini360_MP23070N
 DROK
 WH140
PrS:UPモジュール
 MT3608
PrS:充電モジュール
 TP4056
Pr:Sensor_AD_時計等
PrS:電圧、電流
ADS1115 16bit4CH I2C A/D
 Hardware
 RaspberryPi_コマンド接続
 RaspberryPi_Python
 Arduino
 CH23V203 MounRiverStudioⅡ
INA226 I2C 直流電圧電流
 Hardware
 Arduino
 RaspberryPi_Python
WCS 電流ホール素子
 Hardware
PrS:温度、気圧、湿度、照度
BNE280 I2C 気圧,湿度,気温
 Hardware
 Arduino
 RaspberryPi_Python
BH1750 I2C 照度
 Hardware
 Arduino
 RaspberryPi_Python
DS18B20 1-Wire 温度計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:時間、日時
DS3231 I2C 時計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:表示器
MAR3953 320X480 3.95"
 概要と線や点を描く
 フォントを描く
SSD1306 I2C 0.96"OLED
 Hardware
 Arduino
 RaspberryPi_Python
Pr:Old Processor他
Ot:Others その他
この解説は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。

1 コマンド 概要

PATCH_ARGS (Patch Arguments Setting)

Silicon Labs社製ラジオレシーバIC(Si4735/32等)において、「0x15: PATCH_ARGS」はファームウェアパッチをデバイスの内部RAMに適用するためのコマンド(Command)です。
パッチデータの構造はPATCH の構造を参照下さい。

[目的と概要]:
外部ホストマイコンからSi47xxの内部RAMへ、ファームウェアパッチの制御情報、インデックス、またはメタデータ(引数)を流し込むための専用コマンド。
[AN332で記載されていない目的と解説]:
0x16 (PATCH_DATA) が純粋なバイナリデータの連続転送を行うのに対し、0x15 はパッチ転送のシーケンスにおけるアドレスの切り替え、セクションの区切り、または特定の制御トリガーとして機能します。
パッチファイル全体の約5%〜10%未満という少数派ですが、データ構造を正しくパースさせるための「インデックス指示役」として不可欠なコマンドです。




2 コマンドパラメータ

2.1 パラメータリスト

ホストから送信するパケットは、先頭のコマンドバイトを含めて常に計8バイト固定です。

AN332で記載されていない目的と解説:
マイコンのROM容量を削減する「圧縮パッチ(Compressed Patch)」手法を実装する際、この 0x15 が出現する行番号(インデックス)を特定・記録しておくことが極めて重要になります。
これにより、大部分を占める 0x16 を配列から全て削り、0x15 の位置だけを動的に差し替えて送信するアルゴリズムが可能になります。
BitD7D6D5D4D3D2D1D0
CMD00010101
ARG1XXXXXXXX
ARG2XXXXXXXX
ARG3XXXXXXXX
ARG4XXXXXXXX
ARG5XXXXXXXX
ARG6XXXXXXXX
ARG7XXXXXXXX

ARGBitNameFunction
18Patch Argument Byte 1
28Patch Argument Byte 2
38Patch Argument Byte 3
48Patch Argument Byte 4
58Patch Argument Byte 5
68Patch Argument Byte 6
78Patch Argument Byte 7
[AN332で記載されていない目的と解説]: 0x16 と同様に、この7バイトが内部のどのメモリ空間や制御レジスタに対応しているかは完全に非公開(ブラックボックス)です。
ユーザーはデータ改変を行わず、パッチファイル(.csgなど)に記載された通りの値をそのまま送信する必要があります。




3 応答パラメータ

STATUS (Status Byte)[目的と概要]:
コマンド(8バイト)を1行送信するごとに、デバイスから1バイトのステータスが返されます。
[目的と概要]:
デバイスの現在の状態を示す1バイトの応答。最上位ビット(Bit 7)の CTS (Clear to Send) と、Bit 6の ERR (Error) を含みます。

[詳細解説]:
CTS (Bit 7): デバイスが1行(8バイト)のデータ処理を終え、次のパッチコマンド(0x15 または 0x16)を受け入れ可能になったら 1 になります。
ホストはこのビットを必ずポーリング(監視)する必要があります。

ERR (Bit 6): パッチの転送中に内部チェックサムエラーや、データの順序不正(シーケンスエラー)を検出した場合、デバイスはこのビットを 1 にしてパッチ処理を強制停止(ハルト)します。
特に 0x15 と 0x16 の送信順序が1行でも狂うと、即座にこのERRビットが 1 になります。





4 その他(Google AI (Gemini) の見解)

4.1 コマンドの重要ステップと注意事項

POWER_UPでの前提条件:
0x01: POWER_UP コマンドを発行する際、引数の FUNC でパッチ起動フラグ(Patching enabled)を有効にしておく必要があります。
これが無効な場合、0x15 コマンドは不正コマンドとして即座に無視またはエラーになります。

厳密な8バイト境界の維持:
0x15 を含む8バイトのパケットを途切れなく送信する必要があります。
1バイトでも欠落すると、デバイスは次のデータを正しいコマンドとして認識できなくなります。

CTSの確実なポーリング:
0x15 コマンドは内部のアドレス切り替え等を伴う場合があるため、処理にわずかな時間を要することがあります。
固定のディレイではなく、必ずSTATUSのCTSビットが 1 になったことを確認してから次の行(0x16 など)に進んでください。

4.2 もう少し踏み込んだ応用展開

効率的なメモリ圧縮アルゴリズムの鍵:
パッチデータ内において、0x15 は「たまに現れる特別な行」です。
これを応用し、マイコンのフラッシュメモリを節約するために、パッチデータ全体から先頭の 0x15 や 0x16 を全て削除し、 「0x15 が何行目に存在するか」のインデックス情報だけを別配列(数バイト〜数十バイト程度)で管理する手法が極めて有効です。
送信時にインデックスと一致した行だけ 0x15 を先頭に付与し、それ以外は 0x16 を付与して送信することで、配列全体のサイズを12.5%削減(1000行なら1KB以上の削減)できます。

4.3 デバッグ時のチェックリスト

送出パケットの先頭バイト確認:
パッチファイルからデータを読み出す際、0x15 と 0x16 が元のファイルの記述通りに正確に識別・送信されているか?(入れ替わりや一律変換のバグがないか)

ERRビットのリアルタイム監視:
0x15 コマンドを送信した直後にSTATUSのBit 6(ERR)が 1 になっていないか?(ここでエラーが出る場合、POWER_UP の設定ミスか、そこまでの 0x16 データに過不足があった可能性が高いです)

最I2C/SPI通信バッファの整合性:
マイコン側の通信ライブラリが、0x15+7バイトの計8バイトを1つのフレームとして正しくデバイスに届けられているか?

4.4 まとめ

0x15: PATCH_ARGS コマンドは、大量の 0x16: PATCH_DATA の中に埋もれがちですが、パッチ全体の構造を正しく組み立てるための「ナビゲーター」として決定的な役割を持っています。
このコマンドの出現タイミングを正確に処理し、CTS同期を徹底することが、SSB拡張パッチをノーエラーで一発完遂させるための重要な境界線となります。





































更新日 2026/08/14 10:33  管理者 平林 剛Hirabayashi Takeshi