この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x47. AM_AGC_STATUS 概要
1.1 概要
Si4735の0x47コマンド(AM_AGC_STATUS)は、AM、短波(SW)、長波(LW)の受信時における自動利得制御(AGC:Automatic Gain Control)の現在の動作状態を照会(クエリ)するためのコマンドです。
電波が強すぎるときに音が割れるのを防いだり、逆に弱すぎるときに自動で感度を上げたりする内部回路が、今どのような設定で動いているのかを把握できます。
デバイスのAM AGC設定値を返します。
このコマンドは、AGCが有効か無効か、およびゲインインデックスを返します。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
このコマンドは、電源投入モードのときのみ送信できます。
使用可能環境:全環境
コマンド引数:なし
応答バイト数:2
電波が強すぎるときに音が割れるのを防いだり、逆に弱すぎるときに自動で感度を上げたりする内部回路が、今どのような設定で動いているのかを把握できます。
デバイスのAM AGC設定値を返します。
このコマンドは、AGCが有効か無効か、およびゲインインデックスを返します。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
このコマンドは、電源投入モードのときのみ送信できます。
使用可能環境:全環境
コマンド引数:なし
応答バイト数:2
1.2 コマンド関連の注意事項・実装のポイント
1.2.1 パワーアップモード中のみ有効
0x47 コマンドは、チップが正常に起動し、AM受信モード(POWER_UP コマンドでAMを指定)として動作している最中(Power Up Mode)でなければ受け付けません。
1.2.2 0x48(AM_AGC_OVERRIDE) コマンドとの関係
この 0x47 コマンドは状態を「読み出すだけ」です。
もし 0x47 を叩いて得られたゲイン状態が気に入らず、手動で感度を固定したい場合は、対となる 0x48(AM_AGC_OVERRIDE) コマンド を使って AMAGCDIS = 1 に設定し、AMAGCNDX に直接数値を書き込む必要があります。
もし 0x47 を叩いて得られたゲイン状態が気に入らず、手動で感度を固定したい場合は、対となる 0x48(AM_AGC_OVERRIDE) コマンド を使って AMAGCDIS = 1 に設定し、AMAGCNDX に直接数値を書き込む必要があります。
2 コマンドパラメータ
2.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 |
2.2 パラメータ
なし3 応答パラメータ
3.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| STATUS | CTS | ERR | X | X | RSQINT | X | X | STCINT |
| RESP1 | AMAGCDIS | |||||||
| RESP2 | AMAGCNDX | |||||||
| RESP | Bit | Name | Function |
|---|---|---|---|
| 1 | 0 | AMAGCDIS | AM AGC 無効 このビットは、AGC が有効か無効かを示します。 0 = AGC 有効 1 = AGC 無効 |
| 2 | 7:0 | AMAGCNDX | AM AGCインデックス このバイトは、現在のAGCゲインインデックスを示します。 0 = 最小減衰(最大ゲイン) 1~36+ATTN_BACKUP = 中間減衰 37+ATTN_BACKUP = 最大減衰(最小ゲイン) 注:最大インデックスは変更される場合があります。プロパティ0x3705を参照してください。 ATTN_BACKUPの詳細については、AM_FRONTEND_AGC_CONTROLを参照してください。 |
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 AMAGCDIS(AM AGC Disable Bit)
目的:
現在、自動利得制御(AGC)が「有効(作動中)」か「無効(手動固定)」かを示します。
解説:
0 の場合(デフォルト): AGCが有効です。電波の強さに応じて、ICが自動で最適なゲイン(増幅率)をリアルタイム調整しています。
1 の場合: AGCが無効です。後述するゲインインデックスの値、または 0x48(AM_AGC_OVERRIDE) コマンドによって手動設定された固定ゲインで回路が固定されています。
1 の場合: AGCが無効です。後述するゲインインデックスの値、または 0x48(AM_AGC_OVERRIDE) コマンドによって手動設定された固定ゲインで回路が固定されています。
3.2.6 AMAGCNDX(AM AGC Index)
目的:
現在のLNA(ローノイズアンプ)やフロントエンドにおける減衰量(アッテネータ)の具体的な段階(インデックス値)を返します。
解説:
IC内部のゲイン状態を数値化したもので、通常 0 から 37+α までの値を取ります。
0: 減衰なし(=最大ゲイン / 最高感度の状態)。
微弱な電波を拾っているときにこの値になります。
数値が大きくなるほど: 減衰量が大きく(=ゲインが低く)なります。強力な電波や、至近距離の放送局を受信して回路が飽和(音割れ)しそうなとき、ICが自動的にこのインデックスを大きくして電波を適度にカットします。
0: 減衰なし(=最大ゲイン / 最高感度の状態)。
数値が大きくなるほど: 減衰量が大きく(=ゲインが低く)なります。強力な電波や、至近距離の放送局を受信して回路が飽和(音割れ)しそうなとき、ICが自動的にこのインデックスを大きくして電波を適度にカットします。
4 その他
4.1 Google AI (Gemini) の見解
Si4735のAGC状態(0x47)を読み解き、さらに一歩進んだ通信型受信機としての機能を組み込むためのGeminiからの提案です。
4.1.1 SSB(シングルサイドバンド)受信時の「AGCバグ」への対策知識
Si4735を改造し、アマチュア無線などを聴くための「SSBパッチ」を適用して運用する場合、コミュニティやプログラミングガイドの検証において「SSBモードでは 0x48 のAGC上書き(手動ゲイン固定)が仕様通りに機能しない(バグがある)」という問題がしばしば指摘されます。Geminiの見解としては:「SSBモード時にもしゲイン調整が効かないと感じたら、0x47 コマンドで現在の AMAGCNDX がマイコン側の意図通りに変動しているかを必ず確認してください」。
手動固定が効かない場合は、AGCを無理にOFFにするのではなく、フロントエンド回路の前に物理的なアッテネータ(可変抵抗器やスイッチ)を設けて電波を絞るほうが、結果として綺麗にSSBを受信できる近道になります。
手動固定が効かない場合は、AGCを無理にOFFにするのではなく、フロントエンド回路の前に物理的なアッテネータ(可変抵抗器やスイッチ)を設けて電波を絞るほうが、結果として綺麗にSSBを受信できる近道になります。
4.1.2 近接する超強力局による「ブロッキング(感度抑圧)」の可視化
近所に巨大な出力のAMラジオ送信所がある環境では、その強力な電波のせいでAGCが限界まで働き(AMAGCNDX が最大値になる)、聴きたい他の弱い地方局まで一緒に巻き添えを食って消えてしまう「感度抑圧」が発生します。
応用展開案: ディスプレイ上に「現在のAGC減衰レベル」をインジケーターとして小さく表示する機能を設けます。
ユーザーが「なぜこの場所だとラジオの感度が悪いのか」を、電波強度(RSSI)だけでなく「あ、今AGCが過剰に効いて(AMAGCNDXが跳ね上がって)感度を自ら落としているんだな」と視覚的に納得できる、マニア向けの高度な診断表示を構築できます。
応用展開案: ディスプレイ上に「現在のAGC減衰レベル」をインジケーターとして小さく表示する機能を設けます。
ユーザーが「なぜこの場所だとラジオの感度が悪いのか」を、電波強度(RSSI)だけでなく「あ、今AGCが過剰に効いて(AMAGCNDXが跳ね上がって)感度を自ら落としているんだな」と視覚的に納得できる、マニア向けの高度な診断表示を構築できます。
4.1.3 まとめ
0x47(AM_AGC_STATUS) は、ICが電波の強さに合わせて裏でひっそり行っている「感度の自動サジ加減(AMAGCNDX)」を白日の下に晒すコマンドです。
これによって受信チップが現在無理をしているかどうか(強電波で悲鳴を上げているか、あるいはノイズの中で必死にゲインを上げているか)を的確に把握することができます。
これによって受信チップが現在無理をしているかどうか(強電波で悲鳴を上げているか、あるいはノイズの中で必死にゲインを上げているか)を的確に把握することができます。
