この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x43. AM_RSQ_STATUS 概要
1.1 概要
Si4735の0x43コマンドは、プログラミングガイドにおいて「AM_RSQ_STATUS(AM受信信号品質ステータス)」と定義されているコマンドです。
選局(チューニング)そのものの状態を表す 0x42(AM_TUNE_STATUS) に対し、0x43 は「現在合わせている周波数の電波品質(Received Signal Quality = RSQ)やノイズの状態」を詳細にリアルタイム監視するためのコマンドです。
受信信号品質に関するステータス情報を返します。このコマンドはRSSIとSNRを返します。
また、有効なチャネル(VALID)、ソフトミュート作動(SMUTE)、およびAFCレールステータス(AFCRL)も示します。
このコマンドは、受信信号がRSSIHINTで報告されるRSSI高しきい値を超えているか、RSSILINTで報告されるRSSI低しきい値を下回っているかを確認するために使用できます。
また、信号がSNRHINTで報告されるSNR高しきい値を超えているか、SNRLINTで報告されるSNR低しきい値を下回っているかを確認するためにも使用できます。
このコマンドは、ARG1のINTACKビットがセットされている場合、RSQINT、SNRHINT、SNRLINT、RSSIHINT、およびRSSILINTの割り込みビットをクリアします。
次のコマンドを安全に送信できる場合、CTSビット(およびオプションの割り込み)がセットされます。
このコマンドは、電源投入モードのときのみ送信できます。
注:AMRXコンポーネント2.1以前のバージョンでは、AFCRLビットは正しく動作しません。
対応言語:全言語
コマンド引数:1つ
レスポンスバイト数:5バイト
選局(チューニング)そのものの状態を表す 0x42(AM_TUNE_STATUS) に対し、0x43 は「現在合わせている周波数の電波品質(Received Signal Quality = RSQ)やノイズの状態」を詳細にリアルタイム監視するためのコマンドです。
受信信号品質に関するステータス情報を返します。このコマンドはRSSIとSNRを返します。
また、有効なチャネル(VALID)、ソフトミュート作動(SMUTE)、およびAFCレールステータス(AFCRL)も示します。
このコマンドは、受信信号がRSSIHINTで報告されるRSSI高しきい値を超えているか、RSSILINTで報告されるRSSI低しきい値を下回っているかを確認するために使用できます。
また、信号がSNRHINTで報告されるSNR高しきい値を超えているか、SNRLINTで報告されるSNR低しきい値を下回っているかを確認するためにも使用できます。
このコマンドは、ARG1のINTACKビットがセットされている場合、RSQINT、SNRHINT、SNRLINT、RSSIHINT、およびRSSILINTの割り込みビットをクリアします。
次のコマンドを安全に送信できる場合、CTSビット(およびオプションの割り込み)がセットされます。
このコマンドは、電源投入モードのときのみ送信できます。
注:AMRXコンポーネント2.1以前のバージョンでは、AFCRLビットは正しく動作しません。
対応言語:全言語
コマンド引数:1つ
レスポンスバイト数:5バイト
1.2 コマンド関連の注意事項・実装のポイント
1.2.1 プロパティ(THRESHOLD)の事前設定が前提
SNRHINT や RSSILINT などの「〇〇HINT / 〇〇LINT」系フラグは、あらかじめ 0x12(SET_PROPERTY) コマンド を使って、「何 dB 以上を高値とするか」「何 dBμV 以下を低値とするか」の境界線(プロパティ)をマイコン側から指定しておかなければ、一切正しく機能(反転)しません。
ただコマンドを叩くだけでは常に 0 のままになるため注意が必要です。
ただコマンドを叩くだけでは常に 0 のままになるため注意が必要です。
1.2.2 タイマーによる定期実行(バックグラウンド監視)
このコマンドはシーク時だけでなく、「ユーザーが特定のラジオ局を聴いている最中」にバックグラウンドで定期的に(例: 500msに1回など)発行する のが基本です。これによって、リアルタイムな電波の健康状態を監視し続けます。
2 コマンドパラメータ
2.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
| ARG1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | INTACK |
| ARG | Bit | Name | Function |
|---|---|---|---|
| 1 | 0 | INTACK | 割り込み応答。 0 = 割り込みステータスを保持します。 1 = RSQINT、SNRHINT、SNRLINT、RSSIHINT、RSSILINT をクリアします。 |
2.2 パラメータ
2.2.1 INTACK(Interrupt Acknowledge Bit)
目的
RSQ(信号品質)関連の割込みフラグを一括でクリア(リセット)します。
解説
1 に設定してこのコマンドを送ると、後述する電波変動(SNRやRSSIの上昇・下降)によって発生した各種割込みフラグ(RSQINT、SNRHINT、SNRLINT など)をIC内部ですべて初期状態(クリア)に戻します。
マイコン側が割込みピン(IRQ)をトリガーにして電波品質の急変を検知している場合、このビットを 1 にしてステータスを読み出すことで、通知の受信とリセットを同時に完了できます。
マイコン側が割込みピン(IRQ)をトリガーにして電波品質の急変を検知している場合、このビットを 1 にしてステータスを読み出すことで、通知の受信とリセットを同時に完了できます。
3 応答パラメータ
3.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| STATUS | CTS | ERR | X | X | RSQINT | X | X | STCINT |
| RESP1 | X | X | X | X | SNRHINT | SNRLINT | RSSI-HINT | RSSIILINT |
| RESP2 | X | X | X | X | SMUTE | X | AFCRL | VALID |
| RESP3 | X | X | X | X | X | X | X | X |
| RESP4 | RSSI | |||||||
| RESP5 | SNR | |||||||
| RESP | Bit | Name | Function |
|---|---|---|---|
| 1 | 3 | SNRHINT | SNRHINTSNR 高値検出 0 = 受信SNRが高値しきい値を超えていません。 1 = 受信SNRが高値しきい値を超えています。 |
| 1 | 2 | SNRLINT | SNR 低値検出 0 = 受信SNRが低値しきい値を下回っていません。 1 = 受信SNRが低値しきい値を下回っています。 |
| 1 | 1 | RSSI-HINT | RSSI 高値検出 0 = RSSIが高値しきい値を超えていません。 1 = RSSIが高値しきい値を超えています。 |
| 1 | 0 | RSSIILINT | RSSI 低値検出 0 = RSSIが低値しきい値を下回っていません。 1 = RSSIが低値しきい値を下回っています。 |
| 2 | 3 | SMUTE | ソフトミュートインジケータ ソフトミュートが有効になっていることを示します。 |
| 2 | 1 | AFCRL | AFCレールインジケータ。 >AFCレールが有効な場合に設定されます。 |
| 2 | 0 | VALID | 有効チャネル。 チャネルが現在有効であり、シーク中に検出された場合に設定されます。 |
| 4 | 7:0 | RSSI | 受信信号強度インジケータ。 このバイトには、チューニング完了時の受信信号強度(dBμV)が格納されます。 |
| 5 | 7:0 | SNR | SNR(信号対雑音比)。 このバイトには、チューニング完了時のSNR値(dB)が格納されています。 |
3.2 パラメータ
応答の先頭パラメータ
応答(STATUSバイト)に含まれる各ビット(CTS, ERR, RSQINT, STCINT)は、「デバイスの現在の処理状態」や「各種割り込み(通知)の発生」をホストMCUに知らせる目的で設計されています。
STATUSバイトの信頼性:Si4735の仕様上、いくつかのコマンド送信時に返ってくるSTATUSバイトでは、CTS以外の割り込みビット(RSQINT, 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 STCINT(Seek/Tune Complete Interrupt)
目的:
選局(Tune)操作または自動選局(Seek)操作が完了したことを通知する。
解説:
周波数を変更するコマンド(FM_TUNE_FREQ や FM_SEEK_START など)は内部処理に時間がかかります。
デバイスが「目的の周波数への同調、または次の放送局の検知を完了した」時点でこのビットが1になります。
選局完了のタイミングを正確に把握する目的で使用します。
デバイスが「目的の周波数への同調、または次の放送局の検知を完了した」時点でこのビットが1になります。
選局完了のタイミングを正確に把握する目的で使用します。
3.2.5 SNRHINT(SNR High Interrupt)
目的:
受信信号の品質(SNR)が、事前に設定した「高境界値」を超えたことを知らせます。
解説:
1 の場合、電波状態が良くなりノイズが減った(設定ラインより綺麗に聴こえるようになった)ことを意味します。
3.2.6 SNRLINT(SNR Low Interrupt)
目的:
受信信号の品質(SNR)が、事前に設定した「低境界値」を下回ったことを知らせます。
解説:
1 の場合、電波状態が急激に悪化してノイズまみれになったことを意味します。
3.2.7 RSSI-HINT(RSSI High Interrupt)
目的:
受信電波の強度(RSSI)が、事前に設定した「高境界値」を超えたことを知らせます。
解説:
1 の場合、電波自体が非常に強く入ってくるようになった(放送局に近づいた、あるいは出力が上がった)ことを意味します。
3.2.8 RSSIILINT(RSSI Low Interrupt)
目的:
受信電波の強度(RSSI)が、事前に設定した「低境界値」を下回ったことを知らせます
解説:
1 の場合、電波が非常に弱くなり、放送が途切れそうな状態になったことを意味します。
3.2.9 SMUTE(Soft Mute Engagement Indicator)
目的:
IC内部の自動ノイズ抑制機能である「ソフトミュート」が現在どれくらい作動しているかを示します。
解説:
電波が弱くなると、ICは不快な「ザー」という雑音を減らすために自動で音量を絞ります(これがソフトミュートです)。
返却される値(通常0〜100%や衰減量dBで表現)を見ることで、今どれだけ「ノイズ対策のために音が小さく補正されているか」が分かります。
返却される値(通常0〜100%や衰減量dBで表現)を見ることで、今どれだけ「ノイズ対策のために音が小さく補正されているか」が分かります。
3.2.10 AFCRL(AFC Rail Indicator)
目的:
内部の自動周波数制御(AFC)が補正の限界(レール)に達しているかを示します。
解説:
0x42 コマンドのものと同様ですが、リアルタイムな電波監視中にここが 1 になった場合、「放送局の周波数が本来の場所から極端にズレている」か「フェージング等で同調が外れかけている」ことを意味します。
3.2.11 VALID(Station Valid Indicator)
目的:
現在受信中のチャンネルが、放送局として「有効」な品質を維持しているかをリアルタイム判定します。
解説:
1 であれば良好に受信できており、電波の急激なフェージング(弱まり)やトンネル突入などで完全に電波を見失うと 0 に変化します。
3.2.12 RSSI(Received Signal Strength Indicator)
目的:
現在受信している電波の強さを \(\text{dB}\mu\text{V}\) 単位の絶対値で返します。
解説:
値が大きいほど電波が強いことを示します。
画面に「電波メーター(バリコンのSメーター風グラフィック)」を表示させたい場合、この RSSI の値をリアルタイムに読み込んでバーを伸縮させます。
画面に「電波メーター(バリコンのSメーター風グラフィック)」を表示させたい場合、この RSSI の値をリアルタイムに読み込んでバーを伸縮させます。
3.2.13 SNR(Signal-to-Noise Ratio)
目的:
受信信号の「品質(ノイズに対してどれだけクリアか)」を \(\text{dB}\) 単位で返します。
解説:
RSSI(電波の強さ)が高くても、周囲の家電ノイズなどを拾っていると SNR は低い値になります。
真に「クリアな音で聴こえているか」を判断するための重要な指標です。
真に「クリアな音で聴こえているか」を判断するための重要な指標です。
4 その他
4.1 Google AI (Gemini) の見解
この 0x43 コマンドが持つポテンシャルを最大限に活かした、高級オーディオ・自作受信機ならではの一歩踏み込んだ展開案です。
4.1.1 インテリジェント・オートシャットダウン / スリープ」の実装
深夜ラジオを聴きながら寝落ちしてしまった際、放送局が深夜の停波(放送終了)に入ると、VALIDが 0 になり、RSSILINT や SNRLINT が一斉に 1 になります。
Geminiの提案: マイコン側のロジックで「VALIDが 0 の状態、かつ RSSILINT=1 が5分間続いたら、放送終了とみなしてシステムを自動で完全スリープ(パワーダウン)させる」という機能を組み込めます。
バッテリー駆動のポータブルラジオ等で絶大な省電力効果を発揮します。
Geminiの提案: マイコン側のロジックで「VALIDが 0 の状態、かつ RSSILINT=1 が5分間続いたら、放送終了とみなしてシステムを自動で完全スリープ(パワーダウン)させる」という機能を組み込めます。
バッテリー駆動のポータブルラジオ等で絶大な省電力効果を発揮します。
4.1.2 電波の「フェージング(揺らぎ)」を視覚化するリアルタイムグラフ
短波放送(SW)は電離層の反射を利用するため、数秒〜数十秒周期で電波が強くなったり弱くなったりする「フェージング現象」が必ず起きます。
0x43 で返ってくる RSSI と SNR、そして SMUTE(ソフトミュートの効き具合)の値を数秒ごとにプロットして有機ELディスプレイ等に『電波変動グラフ』としてリアルタイム描画させると、アマチュア無線家やBCLマニアが喜ぶ「通信型受信機」さながらのサイバー感あふれるメーター表示が構築できます。
0x43 で返ってくる RSSI と SNR、そして SMUTE(ソフトミュートの効き具合)の値を数秒ごとにプロットして有機ELディスプレイ等に『電波変動グラフ』としてリアルタイム描画させると、アマチュア無線家やBCLマニアが喜ぶ「通信型受信機」さながらのサイバー感あふれるメーター表示が構築できます。
4.1.3 まとめ
0x43(AM_RSQ_STATUS) は、ただ選局するだけのラジオから、「電波の品質を能動的に監視・制御するインテリジェントな受信機」へとステップアップするために用意された、非常に高度なステータスAPI です。
