Hobby Lab 趣味のモノ作り実験のサイトです。
部品 オペアンプ_関係 Si4735 マニュアル CmdNote0x16
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テスト中に判ったこと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
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制御
 -マニュアル
 203データシート
 203取説
  MBA メモリとバス方式
  PWR 電力制御
  RCC リセット・拡張・クロック
  BKP バックアップレジスタ
  CRC 巡回冗長検査
  RTC リアルタイムクロック
  GPIO GPIOと代替機能
  DMA ダイレクトメモリアクセス制御
  ADTM 高度な制御タイマー
  GPTM 汎用タイマー
  BCTM 基本タイマー
  USART 同期非同期通信
arduino関係
 ESP12関係
 (a)ESP-8266D1mini注意
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_DATA (Patch Data Transfer)
Silicon Labs社製ラジオレシーバIC(Si4735/32等)において、「0x16: PATCH_DATA」はファームウェアパッチをデバイスの内部RAMにロードするためのコマンド(Command)です。
パッチデータの構造はPATCH の構造を参照下さい。

[目的と概要]:
外部ホストマイコンからSi47xxの内部RAMへ、ファームウェアパッチの本体データ(7バイト分)を1行ずつ流し込むための専用コマンド。
[AN332で記載されていない目的と解説]:
パッチファイルの大部分(約9割以上)を占めるコマンドです。
内部的にはパッチ受信用アドレスポインタを自動インクリメントしながらデータをRAMに書き込んでおり、 0x15 (PATCH_ARGS) がアドレスや制御の切り替えを行うのに対し、0x16 は連続する純粋なバイナリデータの高速な流し込みに特化しています。




2 コマンドパラメータ

2.1 パラメータリスト

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

AN332で記載されていない目的と解説:
海外の著名なライブラリ(pu2clr氏のSi4735ライブラリなど)では、マイコンのROM容量(Flash)を節約するため、 配列データからこの 0x16 を全て削除して保存し、送信関数内で動的に 0x16 を付与して送信する「圧縮パッチ(Compressed Patch)」手法が標準化されています。
BitD7D6D5D4D3D2D1D0
CMD00010110
ARG1XXXXXXXX
ARG2XXXXXXXX
ARG3XXXXXXXX
ARG4XXXXXXXX
ARG5XXXXXXXX
ARG6XXXXXXXX
ARG7XXXXXXXX

ARGBitNameFunction
18Patch Data Byte 1
28Patch Data Byte 2
38Patch Data Byte 3
48Patch Data Byte 4
58Patch Data Byte 5
68Patch Data Byte 6
78Patch Data Byte 7




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 にしてパッチ処理を強制停止(ハルト)します。





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

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

POWER_UPでの有効化:
0x01: POWER_UP コマンドを発行する際、引数の FUNC でパッチ起動フラグ(Patching enabled)をあらかじめ有効にしておかなければ、0x16 コマンドは一切受け付けられません。

厳密な8バイト送信:
I2CまたはSPI通信において、必ず1回あたり「0x16 + 7バイト」の計8バイトを途切れなく送信する必要があります。
1バイトでも過不足があると内部ポインタがズレてERRハルトの原因になります。

ディレイではなくCTS同期:
パッチのRAM書き込み処理時間はデータによって僅かに変動します。
固定のウェイト(ディレイ時間)を設けるのではなく、必ずSTATUSバイトを読み出してCTSビットが 1 になったことを確認してから次の行を送信してください。

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

SSB機能(LSB/USB)の動的ロード:
Si4735/32における 0x16 コマンドの最大の恩恵は、通常のAM/FMラジオにSSB受信機能を実装することです。
パッチデータは1000行(約8KB以上)を超えるため、高速なパッチ転送ドライバの設計が起動速度を左右します。

メモリの効率的な圧縮(Compressed Patch):
前述の通り、パッチ内は 0x16 が圧倒的多数を占めます。
そのため、0x15 が出現する行番号(インデックス)だけを別個の軽量なインデックス配列で管理し、 メインのパッチ配列からは先頭の 0x16 を全て取り除いて7バイトずつ保存することで、Arduino Uno(ATmega328P)のようなROM容量の厳しい環境でもSSBパッチを内蔵可能になります。

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

I2C送信バッファ制限の確認:
マイコン側のI2Cライブラリ(Wireなど)の送信バッファが8バイト以上に対応しているか?(一部の環境ではバッファ制限でデータが途切れる罠があります)

エラー(ERR)ビットのリアルタイム監視:
転送中の任意のタイミングでSTATUSのBit 6(ERR)が 1 になっていないか?(もし 1 になった場合、それ以降の 0x16 は全て無視されるため、ハードウェアリセットからやり直す必要があります)

最終適用リビジョンの確認:
すべてのパッチデータを送り終えた後、0x10: GET_REV コマンドを発行し、CHIPREV や FWREV がSSB対応パッチのバージョン(例: 固有名詞のパッチリビジョン)に正しく切り替わっているか確認する。

4.4 まとめ

0x16: PATCH_DATA コマンドは、Si47xxシリーズに「SSB受信」という強力な新機能を吹き込むためのデータ転送の主役です。
全体のデータ量が非常に多いため、このコマンドをいかに「高速」かつ「確実(CTS同期)」にマイコンから流し込めるかが、自作短波ラジオ等の起動安定性と快適性を決定づけます。





































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