Hobby Lab 趣味のモノ作り実験のサイトです。
部品 オペアンプ_関係 Si4735 マニュアル 0x20
1 0x20. FM_TUNE_FREQ 概要
2 コマンドパラメータ
2.1 パラメータリスト
2.2 パラメータ
2.2.1 FREEZE
2.2.2 FAST
2.2.3  ANTCAP
3 応答パラメータ
3.1 パラメータリスト
3.2 パラメータ
3.2.1 CTS
3.2.2 ERR
3.2.3 RSQINT
3.2.4 RDSINT
3.2.5 STCINT
4 その他(Gemini)の見解
4.1 コマンドのステップ注意事項
4.1.1 CTSの厳格な極性チェック
4.1.2 クロック設定の不整合
4.1.3 機能切り替え時の原則
4.2 もう少し踏み込んだ応用展開
4.2.1 SSBパッチ適用
4.2.2 オーディオ出力の切り替え
4.3 デバッグ時のチェックリスト
4.4 その他
4.4.1 メモリ消費に対する見解
4.4.2 抽象化ライブラリの推奨
4.5 疑問にお答え
4.5.1 FM->SSB切り替え方法

PrO:Si4735関係  Si4735について
 Si4735ラジオを作って見よう1
 v コマンド & パラメータ辞書 v
 0x01. POWER_UP
 0x10. GET_REV
 0x11. POWER_DOWN
 0x12. SET_PROPERTY
 0x13. GET_PROPERTY
 0x14. GET_INT_STATUS
 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. AM_TUNE_FREQ
 0x41. AM_SEEK_START
 0x42. AM_TUNE_STATUS
 0x43. AM_RSQ_STATUS
 0x47. AM_AGC_STATUS
 0x48. AM_AGC_OVERRIDE
 0x80. GPIO_CTL
 0x81. GPIO_SET

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 コマンド 0x20. FM_TUNE_FREQ 概要

FM受信周波数を64~108MHzの範囲で10kHz単位で設定します。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
ERRビット(およびオプションの割り込み)は、無効な引数が送信された場合にセットされます。
CTSビットとERRビットの両方がセットされている場合、割り込みは1回のみ発生します。
オプションのSTC割り込みは、コマンドが完了したときにセットされます。
STCINTビットは、GET_INT_STATUSコマンドが呼び出された後にのみセットされます。
このコマンドは、電源投入モードのときのみ送信できます。
このコマンドは、STCビットが既にセットされている場合はクリアします。

142ページの図24「CTSおよびSTCタイミングモデル」と、144ページの表31「FM受信機のコマンドタイミングパラメータ」を参照してください。

FM:LO周波数は、RF周波数が90MHz未満の場合はRF周波数より128kHz高く、RF周波数が90MHzを超える場合はRF周波数より128kHz低くなっています。
例えば、80.00MHzに同調した場合、LO周波数は80.128MHzです。
注:FMRXコンポーネント2.0以前の場合、同調範囲は76~108MHzです。
注:FMRXコンポーネント4.0以降では、ファストビットがサポートされています。
注:FMRXコンポーネント4.0以降では、フリーズビットがサポートされています。

対応機種:全機種
コマンド引数:4つ
応答バイト:なし




2 コマンドパラメータ

2.1 パラメータリスト

BitD7D6D5D4D3D2D1D0
CMD00100000
ARG1000000FREEZEFAST
ARG2FREQH
ARG3FREQL
ARG4ANTCAP

ARGBitNameFunction
17:2Reserved常に0に書き込みます。
11FREEZE周波数切り替え時のメトリックの固定。
設定すると、周波数切り替え時にブレンド、ハイカット、ソフトミュートが瞬時に切り替わるのではなく、関連するアタック/リリースパラメータに応じて変化するようになります。
10FAST高速チューニング
設定すると、高速かつ無効化されたチューニングが実行されます。
チューニングの状態は正確ではありません。
27:0FREQHチューニング周波数上位バイト。
FMモードでは、有効範囲は6400~10800(64~108MHz)です。
37:0FREQLチューニング周波数下位バイト。
このバイトはFREQHと組み合わせることで、10kHz単位で同調周波数を選択します。
FMモードでは、有効範囲は6400~10800(64~108MHz)です。
47:0ANTCAPアンテナ同調コンデンサ(TXO/LPIピンをアンテナ入力として使用する場合のみ有効)。
アンテナ同調コンデンサの値を手動で設定するか、0に設定すると自動的に設定します。
有効範囲は0~191です。
自動コンデンサ同調を推奨します。
注:手動で同調する場合、バラクタの値は4コード分オフセットされます。例えば、バラクタを手動で5に設定した場合、読み取った値は

2.2 パラメータ

2.2.1 FREEZE

Si4735の 0x20 (FM_TUNE_FREQ) コマンドにおける FREEZE(ARG1のBit 1) パラメータは、「チューニング実行時に、内部の信号品質測定(メトリクス)の自動更新を一時的に凍結(フリーズ)させるかどうか」 を制御するフラグです。
0(デフォルト / 通常動作)
挙動: チューニングが完了すると、チップ内部の測定回路が自動的に動き始めます。
結果: 周波数を変更した直後から、その場所の電波強度(RSSI)や信号対雑音比(SNR)などのデータがリアルタイムで最新値に更新され続けます。
1(フリーズ有効)
挙動: チューニングが完了しても、内部の各種ステータスや測定値の自動更新を意図的に停止(凍結)させます。
結果: チップは新しい周波数に同調しますが、内部の測定データは更新されず保持されたままになります。

2.2.2 FAST

Si4735の 0x20 (FM_TUNE_FREQ) コマンドにおける FAST(ARG1のBit 0) パラメータは、「周波数を切り替える(チューニングする)際、内部の処理プロセスを省略して、超高速で選局を完了させるかどうか」を切り替えるフラグです
0(デフォルト / 通常チューニング)
処理時間: 約 60 ms [AN332] 挙動: チップ内部でオーディオをスムーズにミュートし、周波数を切り替え、AGC(自動利得制御)や回路の電圧が完全に安定するのを待ってから選局を完了します [AN332]。
1(高速チューニング)
処理時間: 約 14 ms(通常時の4倍以上高速) [AN332] 挙動: 内部回路の「安定待ち時間」や「おまかせの処理」を大胆にカット(省略)し、とにかく最優先で指定された周波数へ内部の発振器をジャンプさせます

2.2.3 ANTCAP

Si4735の 0x20 (FM_TUNE_FREQ) コマンドにおける ANTCAP(ARG4) パラメータは、「FMアンテナ入力端子に内蔵されているデジタル可変容量(アンテナ・キャパシタ)の値をどのように設定するか」を指定するものです
1.パラメータの役割
FMラジオの感度を最大限に高めるためには、アンテナから入ってきた電波の周波数と、IC内部の同調回路(LC共振回路)の周波数をぴったり一致(同調)させる必要があります。
Si4735の内部には、この同調を取るための「電子的に容量を変えられるコンデンサ(バラクタダイオード/デジタルバリコン)」が内蔵されています [AN332]。ANTCAP パラメータは、この内蔵コンデンサの値を制御します [AN332]

2.パラメータの指定値とその挙動
0(デフォルト / 自動チューニングモード)
挙動: チップ内部のオートチューナーが働き、指定された受信周波数に対して最も感度が良くなる(共振する)コンデンサの容量を自動的に計算して設定してくれます [AN332]。
用途: 通常のラジオ受信では、常に 0 を指定しておけば間違いありません [AN332]。
1 〜 191(手動固定モード)
挙動: 内部コンデンサの容量を、指定した値に強制的に固定します [AN332]。
容量の目安: 値が 1 増えるごとに、内部の同調容量が 約 0.25 pF ずつ増加します(全体の可変範囲は約 1 pF 〜 48 pF 程度になります) [AN332]。
用途: 自作の外部アンテナ回路やLCフィルターとのマッチングを、特定の容量で完全に固定したい場合に使用します。また、自動チューニングによる微小な感度の変動(ブレ)を嫌う特殊な評価・測定を行う場合にも使われます。

3.同調と言う表現について (Google AI (Gemini)の見解))
高周波(RF)回路の視点や、外部のアンテナシステムとの関係として捉えるならば、「インピーダンスマッチング(整合)」という表現のほうがより正確で、技術的にも非常に深い本質を突いています。
なぜマニュアルなどで「同調(Tuning)」と言われるのか、そしてなぜ「インピーダンスマッチング」と呼ぶのが正しいのか、構造的な理由を解説します。
(1)インピーダンスマッチングが正しいと言える理由
Si4735のFM入力端子(FMI端子)の先には、内部のLNA(低雑音アンプ)へと繋がる回路があります。
アンテナから入ってきたFM電波のエネルギーをロスなくIC内部に受け入れるためには、アンテナ側のインピーダンスと、IC入力側のインピーダンスを一致(マッチング)させる必要があります。
この ANTCAP(デジタル可変容量コンデンサ)は、まさにその入力インピーダンスの「リアクタンス成分(虚数成分)」を打ち消し、複素共役マッチングを成立させるために値を細かく変化させています。
そのため、ハードウェアエンジニアの視点からは「インピーダンスマッチングを行っている」と表現するのが最も正確です。
(2)なぜ公式は「同調(Tuning)」と表現しているのか?
Silicon Labs / Skyworksのドキュメントで「Tuning(同調)」や「Varactor Tuning」という言葉が使われているのは、「並列共振回路(LC回路)」としての役割を強調しているためです。
FMI端子の外側には、通常「固定のインダクタ(コイル)」を配置します。
ICの内部には、ANTCAPによる「可変のキャパシタ(コンデンサ)」があります。
この2つが合わさることで「LC並列共振回路(バンドパスフィルタ)」が形成されます。
狙った受信周波数に対してこのLC回路を「共振(同調)」させることで、目的の周波数の信号だけを大きく増幅し、不要な周波数の電波(イメージ妨害など)を急峻にカットしています。




3 応答パラメータ

3.1 パラメータリスト

BitD7D6D5D4D3D2D1D0
STATUSCTSERRXXRSQINTRDSINTXSTCINT

3.2 パラメータ

応答の先頭パラメータ
応答(STATUSバイト)に含まれる各ビット(CTS, ERR, RSQINT, RDSINT, STCINT)は、「デバイスの現在の処理状態」や「各種割り込み(通知)の発生」をホストMCUに知らせる目的で設計されています。 STATUSバイトの信頼性:Si4735の仕様上、いくつかのコマンド送信時に返ってくるSTATUSバイトでは、CTS以外の割り込みビット(RSQINT, RDSINT, STCINTなど)がリアルタイムに更新されない場合があります。
正しい確認方法:正確な割り込みステータスを確認したい場合は、STATUSバイトを直接過信するのではなく、専用の割り込み確認コマンド(例:GET_INT_STATUS (0x14) コマンドなど)を明示的に発行して最新の状態を読み出すのが一般的なセオリーとなっています。

3.2.1 CTS(Clear to Send)

目的:
デバイスが次のコマンドを受け付けられる状態かどうかを判定する。
解説:
最も重要なビットです。Si4735が前のコマンドの処理を完了し、「次のコマンドを送信しても安全(送信可)」になると1にセットされます。
0の間はデバイスが内部処理中(ビジー)であるため、ホストMCUは次のコマンド送信を待機する必要があります。

3.2.2 ERR(Error)

目的:
直前に送信したコマンドが正常に実行されたか、エラーが発生したかを判別する。
解説:
コマンドの引数(引数の値が範囲外など)や、無効なコマンドが送られた場合に1にセットされます。
ホスト側のプログラムで例外処理や再試行(リトライ)を行うために使用します。

3.2.3 RSQINT(Received Signal Quality Interrupt)

目的:
受信信号の品質(電界強度RSSIやSNRなど)が、あらかじめ設定した閾値を超えた(または下回った)ことを通知する。
解説:
「受信品質の変化」をトリガーに処理を行いたい場合に使用します。
例えば、現在のチャンネルの電波が急激に弱くなったことを検知して自動で再スキャンをかける、といった機能を実装する目的で利用されます。

3.2.4 RDSINT(Radio Data System Interrupt)

目的:
RDS(文字情報などのデータ放送)のデータバッファ(FIFO)に新しいデータが格納されたことを通知する。
解説:
FM放送などで送られてくる「RDS/RBDSデータ(番組名や楽曲情報など)」を受信した際に1になります。
ホストMCUはこのビットを見てからデータを読み出す(FM_RDS_STATUS コマンドを発行する)ことで、無駄な空読みを防ぎ効率的にテキストデータを取得できます。

3.2.5 STCINT(Seek/Tune Complete Interrupt)

目的:
選局(Tune)操作または自動選局(Seek)操作が完了したことを通知する。
解説:
周波数を変更するコマンド(FM_TUNE_FREQ や FM_SEEK_START など)は内部処理に時間がかかります。
デバイスが「目的の周波数への同調、または次の放送局の検知を完了した」時点でこのビットが1になります。
選局完了のタイミングを正確に把握する目的で使用します。




4 その他

4.1 コマンドの重要ステップと注意事項(Google AI (Gemini) の見解)

Silicon LabsのDSPラジオIC「Si4735」における0x20 (FM_TUNE_FREQ) コマンドは、FMモードにおいて指定した周波数へ直接同調(選局)を行うための最重要コマンドです。
このコマンドに関する実務上の注意点、応用展開、およびGoogle AI (Gemini) の見解をまとめます。
0x20 コマンドは、コマンドバイトに続いて4バイトの引数(ARG1〜ARG4)を送信します。FMの選局処理を確実に成功させるための注意点は以下の通りです。

4.1.1 送信データの構造と「10kHz単位」の周波数指定

設定したい周波数は ARG1(上位) と ARG2(下位) の2バイト(ビッグエンディアン)で指定しますが、値は「10kHz単位の整数」にする必要があります。
具体例: 日本のFM補完放送(ワイドFM)の 90.5MHz に合わせたい場合、90.5MHz = 90500kHz なので、10kHz単位に直すと 9050 (0x235A) になります。
ARG1 = 0x23、ARG2 = 0x5A を送信します。

4.1.2 アンテナのインピーダンス整合(ARG3 / ARG4 の役割)

ARG3 と ARG4 は、FMアンテナ入力ピン(FMI)の内部バリキャップ(可変容量コンデンサ)のチューニング値を指定します。
通常は 0x0000(自動チューニングモード) に設定してください。これによりDSPが自動でアンテナのインピーダンスを最適化します。
手動(マニュアル設定)で固定値を入れてしまうと、受信感度が著しく低下する原因になります。

4.1.3 選局完了フラグ(STCINT)のハンドシェイク必須

0x20 コマンドを送信してCTSが「1」に戻った時点では、まだ内部DSPの選局処理(PLLロックやフィルタ安定化)は完了していません。
選局が完全に終わると、ステータスバイトの STCINT ビット(Bit 0)が「1」 になります。
これを前述の 0x14 (GET_INT_STATUS) 等で確認するまで、次のコマンド(周波数変更やステータス取得など)を送ってはいけません。

4.2 もう少し踏み込んだ応用展開(Google AI (Gemini) の見解)

0x20 コマンドの特性を理解することで、より高速で快適な選局システムや、スキャン機能を実装できます。

4.2.1 プリセットチャンネル切り替えの「超高速化」

あらかじめ登録しておいたお気に入りの放送局(プリセット)をボタンで切り替える際、0x20 による自動アンテナチューニング(数ミリ秒〜数十ミリ秒を消費)を待つと、わずかに音の出始めが遅れます。
展開例: 一度自動モード(ARG3/4 = 0x0000)で選局した後に 0x22 (FM_TUNE_STATUS) コマンドを叩くと、DSPが自動選択した「現在のアンテナ容量の補正値」を読み出すことができます。
この値をマイコン側のメモリに保存しておき、次回その局に切り替える際は 0x20 の ARG3/4 にその固定値を直接指定(マニュアルモード)して送ります。
これにより内部のスキャン処理が完全にスキップされ、爆速で音声が立ち上がる「超高速チャンネル切り替え」が実現します。

4.2.2 マイコン主導の「インテリジェント・全帯域バックグラウンドスキャン」

Si4735には自動シーク(0x21 コマンド)がありますが、電波の状況によっては閾値(しきい値)の調整が難しく、ノイズを拾ったり目的の局をスルーしたりします。
展開例: マイコン側の for ループで 0x20 を使い、日本のFM帯域(76.0MHz〜95.0MHz)を100kHzステップで1局ずつ強制選局(Tune)します。
選局完了ごとに 0x23 (FM_RSQ_STATUS) を呼び出してRSSI(電波強度)やSNR(信号対雑音比)を測定・記録し、「本当に電波が綺麗に届いている局のリスト」を自動でメモリ内に構築するインテリジェント・スキャンを展開できます。

4.3 コマンドと引数(ARG)のデータ構造

0x20 コマンド送信時のパケット構成です。
バイト位置名称設定値の意味
Byte 0CMD0x20 (FM_TUNE_FREQ)
Byte 1ARG1希望周波数の上位バイト (10kHz単位の整数)
Byte 2ARG2希望周波数の下位バイト (10kHz単位の整数)
Byte 3ARG3アンテナチューニング容量の上位バイト(通常は 0x00 で自動)
Byte 4ARG4アンテナチューニング容量の下位バイト(通常は 0x00 で自動)

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

Si4735を用いた高品質なFMレシーバー開発において、Google AI (Gemini) は「選局処理中のオーディオミュート(静音化)の最適化」と「アンテナ設計に応じたマニュアル容量制御の有効性」を挙げています。

4.4.1 選局時ノイズ(ザーという不快音)の排除に対する見解

0x20 コマンドを実行した瞬間、周波数がロックするまでのごくわずかな間、DSPから「ザー」という未同調ノイズが出力される可能性があります。
Geminiの見解としては、この一瞬の不快なノイズを完全にカットするために、「0x20を送る直前に 0x12 でミュート(または音量を0に)➔ 0x20を送信 ➔ 0x14でSTCINT(選局完了)を検知 ➔ ミュートを解除」 という一連のオーディオ制御をマストで実装すべきです。
このシーケンスの徹底が、高級感のあるユーザー体験に直接繋がると評価します。

4.4.2 ホイップアンテナとイヤホンアンテナの動的最適化

Si4735をポータブルラジオとして設計する場合、ロッド(ホイップ)アンテナを使うか、イヤホンのコードをFMアンテナとして使い回すかによって、入力インピーダンスが大きく変動します。
Geminiの見解では、基本的には自動チューニング(0x0000)で十分対応可能ですが、もし自作基板のパターン設計が原因でFMの感度が伸び悩む場合は、0x20 の手動チューニング機能(ARG3/4)を利用し、 「ホイップアンテナ用」「イヤホン用」としてそれぞれ実測で最適だった容量値をマイコンのEEPROMから動的に流し込む設計にすることで、ハードウェアの微小な設計ミスをソフトウェア側でリカバリーし、 最高の受信感度を引き出すことが可能であると見なしています。





































更新日 2026/06/21 16:56  管理者 平林 剛Hirabayashi Takeshi