この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x23. FM_RSQ_STATUS 概要
受信信号品質に関するステータス情報を返します。このコマンドは、RSSI、SNR、周波数オフセット、およびステレオブレンド率を返します。
また、有効チャネル(VALID)、ソフトミュート作動(SMUTE)、およびAFCレールステータス(AFCRL)も示します。
このコマンドは、受信信号がRSSIHINTで報告されるRSSI高しきい値を超えているか、RSSILINTで報告されるRSSI低しきい値を下回っているかを確認するために使用できます。
また、信号がSNRHINTで報告されるSNR高しきい値を超えているか、SNRLINTで報告されるSNR低しきい値を下回っているかを確認するためにも使用できます。
Si4706の場合、検出されたマルチパスがMULTHINTで報告されるマルチパス高しきい値を超えているか、MULTLINTで報告されるマルチパス低しきい値を下回っているかを確認するために使用できます。
PILOTインジケータが設定されている場合、ブレンドがBLENDINTで示されるしきい値を超えたかどうかも確認できます。
このコマンドは、ARG1のINTACKビットがセットされている場合、RSQINT、BLENDINT、NRHINT、SNRLINT、RSSIHINT、RSSILINT、MULTHINT、およびULTLINT割り込みビットをクリアします。
次のコマンドを安全に送信できる状態になると、CTSビット(およびオプションの割り込み)がセットされます。
このコマンドは、電源投入モード時のみ送信可能です。
対応機種:全機種
コマンド引数:1個
応答バイト数:7バイト
2 コマンドパラメータ
2.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
| ARG1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | INTACK |
| ARG | Bit | Name | Function |
|---|---|---|---|
| 1 | 0 | INTACK | 割り込み応答。 0 = 割り込みステータスを保持します。 1 = RSQINT、BLENDINT、SNRHINT、SNRLINT、RSSIHINT、RSSILINT、MULTHINT、MULTLINT をクリアします。 |
2.2 パラメータ
2.2.1 INTACK (Interrupt Acknowledge)
目的
RSQに関連する割り込みステータス(フラグ)をクリア(承認)すること。
解説
このビットを 1 に設定して 0x23 コマンドを送信すると、後述する応答パラメータ内の各種割り込みヒントフラグ(BLENINT, MULTHINT などの ~INT と付くもの)がすべて 0 にリセットされます。
マイコン側で割り込みを検知した後にフラグをクリアし、次の新たな割り込みを発生させるために使用します。
0 のまま呼び出した場合は、フラグをクリアせずに現在の状態だけを読み取ります。
マイコン側で割り込みを検知した後にフラグをクリアし、次の新たな割り込みを発生させるために使用します。
0 のまま呼び出した場合は、フラグをクリアせずに現在の状態だけを読み取ります。
3 応答パラメータ
3.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| STATUS | CTS | ERR | X | X | RSQINT | RDSINT | X | STCINT |
| RESP1 | BLENDINT | X | MULTHINT | MULTLINT | SNRHINT | SNRLINT | RSSIHINT | RSSIILINT |
| RESP2 | X | X | X | X | SMUTE | X | AFCRL | VALID |
| RESP3 | PILOT | STBLEND | ||||||
| RESP4 | RSSI | |||||||
| RESP5 | SNR | |||||||
| RESP6 | MULT | |||||||
| RESP7 | FREQOFF | |||||||
| RESP | Bit | Name | Function |
|---|---|---|---|
| 1 | 7 | BLENDINT | ブレンド検出割り込み 0 = ブレンド値がブレンドしきい値設定値の範囲内です。 1 = ブレンド値がブレンドしきい値設定値を超えるか下回ります。 |
| 1 | 5 | MULTHINT | マルチパス高検出(Si4706-D50、Si4704/05/30/31/34/35-D50以降、およびSi4732のみ) 0 = 検出されたマルチパス値がマルチパス高しきい値を超えていません。 1 = 検出されたマルチパス値がマルチパス高しきい値を超えています。 |
| 1 | 4 | MULTLINT | マルチパス低検出(Si4706-D50、Si4704/05/30/31/34/35-D50以降、およびSi4732のみ) 0 = 検出されたマルチパス値がマルチパス低しきい値を下回っていません。 1 = 検出されたマルチパス値がマルチパス低しきい値を下回りました。 |
| 1 | 3 | SNRHINT | SNR高検出 0 = 受信SNRがSNR高しきい値を超えていません。 1 = 受信SNRがSNR高しきい値を超えました。 |
| 1 | 2 | SNRLINT | SNR低検出 0 = 受信SNRがSNR低しきい値を下回っていません。 1 = 受信SNRがSNR低しきい値を下回りました。 |
| 1 | 1 | RSSIHINT | RSSI高検出 0 = RSSIがRSSI高しきい値を超えていません。 1 = RSSIがRSSI高しきい値を超えました。 |
| 1 | 0 | RSSIILINT | RSSI低検出 0 = RSSIがRSSI低しきい値を下回っていません。 1 = RSSIがRSSI低しきい値を下回りました。 |
| 2 | 3 | SMUTE | ソフトミュートインジケータ ソフトミュートが有効になっていることを示します。 |
| 2 | 1 | AFCRL | AFCレールインジケーター。 AFCレールが有効な場合に設定されます。 |
| 2 | 0 | VALID | 有効チャンネル。 チャンネルが現在有効であり、シーク中に検出された場合に設定されます。 |
| 3 | 7 | PILOT | パイロットインジケーター。 ステレオパイロットの存在を示します。 |
| 3 | 6:0 | STBLEND | ステレオブレンドインジケーター。 ステレオブレンドの度合いをパーセントで表示します(100=完全ステレオ、0=完全モノラル)。 |
| 4 | 7:0 | RSSI | 受信信号強度インジケータ 現在の受信信号強度(0~127 dBμV)を表示します。 |
| 5 | 7:0 | SNR | SNR 現在のSNR値(0~127 dB)を表示します。 |
| 6 | 7:0 | MULT | マルチパス(Si4706-D50、Si4704/05/30/31/34/35-D50以降、およびSi4732のみ)。 現在のマルチパスメトリックが含まれています。(0 = マルチパスなし、100 = 完全なマルチパス) |
| 7 | 7:0 | FREQOFF | 周波数オフセット。 符号付き周波数オフセット(kHz)。 |
3.2 パラメータ
応答の先頭パラメータ
応答(STATUSバイト)に含まれる各ビット(CTS, ERR, RSQINT, RDSINT, STCINT)は、「デバイスの現在の処理状態」や「各種割り込み(通知)の発生」をホストMCUに知らせる目的で設計されています。
STATUSバイトの信頼性:Si4735の仕様上、いくつかのコマンド送信時に返ってくるSTATUSバイトでは、CTS以外の割り込みビット(RSQINT, RDSINT, STCINTなど)がリアルタイムに更新されない場合があります。
正しい確認方法:正確な割り込みステータスを確認したい場合は、STATUSバイトを直接過信するのではなく、専用の割り込み確認コマンド(例:GET_INT_STATUS (0x14) コマンドなど)を明示的に発行して最新の状態を読み出すのが一般的なセオリーとなっています。
正しい確認方法:正確な割り込みステータスを確認したい場合は、STATUSバイトを直接過信するのではなく、専用の割り込み確認コマンド(例:GET_INT_STATUS (0x14) コマンドなど)を明示的に発行して最新の状態を読み出すのが一般的なセオリーとなっています。
3.2.1 CTS(Clear to Send)
目的:
デバイスが次のコマンドを受け付けられる状態かどうかを判定する。
解説:
最も重要なビットです。Si4735が前のコマンドの処理を完了し、「次のコマンドを送信しても安全(送信可)」になると1にセットされます。
0の間はデバイスが内部処理中(ビジー)であるため、ホストMCUは次のコマンド送信を待機する必要があります。
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 コマンドを発行する)ことで、無駄な空読みを防ぎ効率的にテキストデータを取得できます。
ホストMCUはこのビットを見てからデータを読み出す(FM_RDS_STATUS コマンドを発行する)ことで、無駄な空読みを防ぎ効率的にテキストデータを取得できます。
3.2.5 STCINT(Seek/Tune Complete Interrupt)
目的:
選局(Tune)操作または自動選局(Seek)操作が完了したことを通知する。
解説:
周波数を変更するコマンド(FM_TUNE_FREQ や FM_SEEK_START など)は内部処理に時間がかかります。
デバイスが「目的の周波数への同調、または次の放送局の検知を完了した」時点でこのビットが1になります。
選局完了のタイミングを正確に把握する目的で使用します。
デバイスが「目的の周波数への同調、または次の放送局の検知を完了した」時点でこのビットが1になります。
選局完了のタイミングを正確に把握する目的で使用します。
3.2.6 BLENDINT(Stereo Blend Interrupt)
目的:
ステレオブレンド(左右分離度)が設定値を跨いだことを通知する。
解説:
ステレオからモノラル、あるいはその逆への切り替え限界値を越えたときに発生します。
3.2.7 MULTHINT(Multipath High Interrupt)
目的:
マルチパス(多重波伝播による歪み)が上限しきい値を超えたことを通知する。
解説:
ビル陰などで電波が反射し、受信品質が悪化したことを検知できます。
3.2.8 MULTLINT(Multipath Low Interrupt)
目的:
マルチパスが下限しきい値を下回った(改善した)ことを通知する。
解説:
受信環境が安定したことを検知するのに役立ちます。
3.2.9 SNRHINT(SNR High Interrupt)
目的:
信号対雑音比(SNR)が設定した上限値を超えた(良好になった)ことを通知する。
解説:
ノイズが減り、クリアな音声になったタイミングを捕捉できます。
3.2.10 SNRLINT(SNR Low Interrupt)
目的:
SNRが設定した下限値を下回った(悪化した)ことを通知する。
解説:
雑音が増えて音声が聞き取りにくくなったことを検知します。
3.2.11 RSSIHINT(RSSI High Interrupt)
目的:
受信信号強度(RSSI)が設定した上限値を超えたことを通知する。
解説:
十分に強い電波が受信できたことを検知するシーク動作などで活用されます。
3.2.12 RSSIILINT(RSSI Low Interrupt)
目的:
RSSIが設定した下限値を下回ったことを通知する。
解説:
電波が圏外に近いレベルまで弱まったことをリアルタイムに検知できます。
3.2.13 SMUTE(Soft Mute Engaged)
目的:
ソフトミュート(自動ノイズ減衰機能)が作動中であるかを示す。
解説:
1 の場合、弱電界ノイズを抑えるためにチップが自動的に音声出力を減衰させている状態を意味します。
3.2.14 AFCRL(AFC Rail)
目的:
自動周波数制御(AFC)が限界(飽和状態)に達しているかを示す。
解説:
1 の場合、現在同調している周波数が本来の放送波からズレすぎており、AFCの補正可能範囲(レール)の端に達してしまっていることを示します。
3.2.15 VALID(Valid Channel)
目的:
現在の周波数に信頼できる放送局が存在するかを判定する
解説:
チップ内部の基準(RSSI、SNRなど)をクリアした「受信可能な局」であれば 1 になります。自動選局(Seek)時の判断基準になります。
3.2.16 PILOT(Stereo Pilot Tone Detected)
目的:
FMステレオ放送のパイロット信号(19kHz)を検出しているかを示す。
解説:
1 であれば、受信中の電波にステレオ成分が含まれていることを意味します。
3.2.17 STBLEND(Stereo Blend Percentage)
目的:
現在のステレオ分離度(ブレンド比率)をパーセンテージで表す。
解説:
100% は完全なステレオ(左右分離)、0% は完全なモノラル状態(ノイズ軽減のためチップが自動結合した状態)を示します。
3.2.18 RSSI(Received Signal Strength Indicator)
目的:
受信電波の強度を表す。
解説:
dBμ V 単位の絶対値で返されます。数値が大きいほど電波が強いことを意味します。
3.2.19 SNR(Signal-to-Noise Ratio)
目的:
信号とノイズの比率を表す。
解説:
dB 単位で返されます。数値が大きいほど雑音が少なく、クリアな音質であることを示します。
3.2.20 MULT(Multipath Metric)
目的:
マルチパス干渉(歪み)の度合いを数値化して表す。
解説:
0 (干渉なし) 〜 100 (最悪) の範囲で示され、FM特有の反射波によるノイズ度合いを測定します。
3.2.21 FREQOFF(Frequency Offset)
目的:
放送局の中心周波数からの「実際のズレ」を表す。
解説:
符号付きの整数(kHz 単位)で返され、チューニングがどれだけ正確に合っているかを把握できます。
4 その他
4.1 Google AI (Gemini) の見解
0x23 コマンドは、FMの電波強度(RSSI)や明瞭度(SNR)、ズレ(FREQOFF)などの物理的な測定値を取得すると同時に、それらの急激な変化をマイコンに知らせる割り込みフラグを管理するための、FM受信品質制御の核心となるコマンドです。
Si4735を用いたファームウェア開発で、電波状況に応じたインジケータの表示や自動選局のチューニングロジックを実装したい場合は、このコマンドの仕様を網羅的に把握することが不可欠となります。 Si4735の 0x23 (FM_RSQ_STATUS) コマンドを組み込みシステムで効率的に扱うにあたり、Geminiとしての設計上の推奨アプローチを以下にまとめます。
Si4735を用いたファームウェア開発で、電波状況に応じたインジケータの表示や自動選局のチューニングロジックを実装したい場合は、このコマンドの仕様を網羅的に把握することが不可欠となります。 Si4735の 0x23 (FM_RSQ_STATUS) コマンドを組み込みシステムで効率的に扱うにあたり、Geminiとしての設計上の推奨アプローチを以下にまとめます。
4.1.1 シーク(自動選局)アルゴリズムへの応用
VALID ビットだけに頼るのではなく、RSSI と SNR の値をマイコン側で個別に評価することをおすすめします。
VALID は内部プロパティ(FM_VALID_RSSI_THRESHOLD など)の設定に依存するため、自作のラジオUIを作る際は 0x23 を叩いて生の RSSI と SNR を読み出し、 「RSSIが20以上、かつSNRが10以上を合格とする」といった独自のフィルタリングを設けた方が、日本の複雑な電波環境下で誤同調を劇的に減らすことができます。
VALID は内部プロパティ(FM_VALID_RSSI_THRESHOLD など)の設定に依存するため、自作のラジオUIを作る際は 0x23 を叩いて生の RSSI と SNR を読み出し、 「RSSIが20以上、かつSNRが10以上を合格とする」といった独自のフィルタリングを設けた方が、日本の複雑な電波環境下で誤同調を劇的に減らすことができます。
4.1.2 「~INT」フラグと INTACK の取り扱いバグ防止
ホストマイコン側でSi4735のハードウェア割り込みピン(IRQ)を監視する場合、0x23 コマンドを送る際に INTACK = 1 に設定しないと、IC内部の割り込み原因がクリアされず、「一度ノイズを検知したあと、二度と割り込みが発生しなくなる」 という実装バグに陥りやすいです。ステータスを監視し続けたい場合は必ず INTACK を有効にしてください。
4.1.3 カーステレオ並みの動的音質制御
STBLEND(ステレオブレンド度)や SMUTE(ソフトミュート状態)をリアルタイムに読み出すことで、ディスプレイ上に「ステレオ/モノラル」のインジケータを滑らかに変動表示させたり、電波が弱まったときにディスプレイのバックライト輝度を制御するなど、高級受信機のようなユーザー体験(UX)を構築するためのトリガーとして非常に有益なコマンドです。
