この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x48. AM_AGC_OVERRIDE 概要
1.1 概要
Si4735の0x48コマンド(AM_AGC_OVERRIDE)は、AM、短波(SW)、長波(LW)の受信時に、ICが自動で行っている利得調整(AGC)を強制的に解除し、ユーザー(マイコン)側から手動でゲイン(増幅率)を固定・制御するためのコマンドです。
前述の 0x47(AM_AGC_STATUS) が「状態の読み出し」だったのに対し、この 0x48 は「状態の書き込み(上書き)」を担います。
AM AGC設定を上書きし、AGCを無効にして、ゲインインデックスを0(最小減衰)から37+ATTN_BACKUP(最大減衰)の範囲で強制的に設定します。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できるときにセットされます。
このコマンドは、電源投入モードのときのみ送信できます。
対応機種:全機種
コマンド引数:2個
応答バイト:なし
前述の 0x47(AM_AGC_STATUS) が「状態の読み出し」だったのに対し、この 0x48 は「状態の書き込み(上書き)」を担います。
AM AGC設定を上書きし、AGCを無効にして、ゲインインデックスを0(最小減衰)から37+ATTN_BACKUP(最大減衰)の範囲で強制的に設定します。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できるときにセットされます。
このコマンドは、電源投入モードのときのみ送信できます。
対応機種:全機種
コマンド引数:2個
応答バイト:なし
1.2 コマンド関連の注意事項・実装のポイント
1.2.1 選局(チューニング)を行うと自動リセットされる
0x48 コマンドでせっかくゲインを手動固定(AMAGCDIS = 1)にしても、その後に周波数を変えるコマンド(0x40: AM_TUNE_FREQ や 0x41: AM_SEEK_START)を1回でも発行すると、ICの仕様として手動設定が解除され、自動AGC(AMAGCDIS = 0)へと勝手にリセットされます。
そのため、手動ゲインお気に入りの状態を維持したい場合は、「選局処理が終わった(STCが1になった)直後に、再度 0x48 コマンドを送り直す」というコード設計が必須です。
そのため、手動ゲインお気に入りの状態を維持したい場合は、「選局処理が終わった(STCが1になった)直後に、再度 0x48 コマンドを送り直す」というコード設計が必須です。
1.2.2 インデックス値の「上限」はリビジョンで異なる
AMAGCNDX に設定できる最大値は、Si4735のファームウェア・リビジョン(ROMリビジョン)によって異なります。
古いリビジョンでは 37 が最大ですが、新しいリビジョンではさらに細かいステップ(例: 59や60以上)までサポートされている場合があります。
限界を超えた値を書き込むと挙動が不安定になるため、データシートの対応表を確認するか、実際に 0x47 コマンドで自動時にどこまで値が上がっているかを事前リサーチしておく必要があります。
古いリビジョンでは 37 が最大ですが、新しいリビジョンではさらに細かいステップ(例: 59や60以上)までサポートされている場合があります。
限界を超えた値を書き込むと挙動が不安定になるため、データシートの対応表を確認するか、実際に 0x47 コマンドで自動時にどこまで値が上がっているかを事前リサーチしておく必要があります。
2 コマンドパラメータ
2.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| ARG1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | AMAGCDIS |
| ARG2 | AMAGCNDX(AM AGC Disable Bit) | |||||||
| ARG | Bit | Name | Function |
|---|---|---|---|
| AMAGCDIS | AM AGC 無効化 このビットは、AGC を有効にするか無効にするかを選択します。 0 = AGC 有効 1 = AGC 無効 | ||
| AMAGCNDX | AM AGCインデックス このバイトは、現在のAGCゲインインデックスを示します。 0 = 最小減衰(最大ゲイン) 1~36+ATTN_BACKUP = 中間減衰 37+ATTN_BACKUP = 最大減衰(最小ゲイン) 注:最大インデックスは変更される場合があります。プロパティ0x3705を参照してください。 ATTN_BACKUPの詳細については、AM_FRONTEND_AGC_CONTROLを参照してください。 |
2.2 パラメータ
2.2.1 AMAGCDIS(AM AGC Disable Bit)
目的
自動利得制御(AGC)の「有効」と「無効(手動固定)」を切り替えます。
解説
0(デフォルト): AGCを有効にします。ICが電波の強さに合わせて自動調整する通常モードです(このとき、次の AMAGCNDX の設定値は無視されます)。
1: AGCを無効(上書き)にします。ICの自動調整が完全にストップし、受信感度が次項の AMAGCNDX で指定した値にガチッと固定されます。
1: AGCを無効(上書き)にします。ICの自動調整が完全にストップし、受信感度が次項の AMAGCNDX で指定した値にガチッと固定されます。
2.2.2 AMAGCNDX(AM AGC Index)
目的
AGCを無効(AMAGCDIS = 1)にした際、内部のLNA(ローノイズアンプ)などの減衰量(アッテネータ)の段階を手動で直接指定します。
解説
指定できる値は通常 0 から 37(またはそれ以上、リビジョンによる)の整数です。
0: 減衰なし(=手動による最大ゲイン / 最高感度設定)。
遠くの非常に微弱な電波を限界まで増幅して拾い上げたいときに指定します。
数値を大きくする(例: 20や37): 減衰量を大きく(=ゲインを低く)します。近くに強力な送信所があり、電波が強すぎて音がバリバリに割れてしまう(飽和している)場合に、数値を大きくして意図的に感度を落とします。
0: 減衰なし(=手動による最大ゲイン / 最高感度設定)。
遠くの非常に微弱な電波を限界まで増幅して拾い上げたいときに指定します。
数値を大きくする(例: 20や37): 減衰量を大きく(=ゲインを低く)します。近くに強力な送信所があり、電波が強すぎて音がバリバリに割れてしまう(飽和している)場合に、数値を大きくして意図的に感度を落とします。
3 応答パラメータ
3.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| STATUS | CTS | ERR | X | X | RSQINT | X | X | STCINT |
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になります。
選局完了のタイミングを正確に把握する目的で使用します。
4 その他
4.1 Google AI (Gemini) の見解
この 0x48 コマンドを応用して、市販の高級レシーバーに搭載されている「プロ向け機能」を自作ラジオに実装するためのアドバイスです。
4.1.1 「手動RFゲイン・ボリューム」の搭載
高級な通信型受信機には、音量ボリュームとは別に「RF GAIN(高周波増幅率)」という独立したつまみがついています。
Geminiからの提案: ラジオの操作パネルに「感度調整用」の可変抵抗(ポテンショメータ)やロータリーエンコーダーを1つ追加し、その操作値をマイコンで 0〜37 の数値に変換して 0x48 の AMAGCNDX へリアルタイムに流し込む機能を実装してみてください。
これにより、混信の激しい短波帯(SW)で、目的の信号が隣の強力な局のノイズに埋もれそうなとき、ユーザーの手動調整で絶妙にゲインを絞り込み、目的の局だけを綺麗に浮かび上がらせるという「これぞBCLラジオ」という深い操作感が得られます。
Geminiからの提案: ラジオの操作パネルに「感度調整用」の可変抵抗(ポテンショメータ)やロータリーエンコーダーを1つ追加し、その操作値をマイコンで 0〜37 の数値に変換して 0x48 の AMAGCNDX へリアルタイムに流し込む機能を実装してみてください。
これにより、混信の激しい短波帯(SW)で、目的の信号が隣の強力な局のノイズに埋もれそうなとき、ユーザーの手動調整で絶妙にゲインを絞り込み、目的の局だけを綺麗に浮かび上がらせるという「これぞBCLラジオ」という深い操作感が得られます。
4.1.2 短波(SW)遠距離受信時の「AGC特性の擬似最適化」
Si4735の内部自動AGCは、一般的なAM放送(中波)をターゲットに最適化されているため、短波特有の激しい電波の揺らぎ(フェージング)に対しては、自動ゲインの追従がギクシャクして逆に聴きづらくなる(音が不自然に大きくなったり小さくなったりする)ことがあります。
ワンランク上のアプローチ: ユーザーが「短波の遠距離局をじっくり聴きたい」となったとき、ボタン一つで『手動AGC固定モード』に切り替えられるようにします。0x43(AM_RSQ_STATUS) で電波の平均強度を数秒間サンプリングし、その平均値に合わせた AMAGCNDX を 0x48 で固定投入します。
ICのバタバタした自動調整をあえて殺すことで、フェージングの波はそのまま残りつつも、耳に優しい自然な短波の音を維持することができます。
ワンランク上のアプローチ: ユーザーが「短波の遠距離局をじっくり聴きたい」となったとき、ボタン一つで『手動AGC固定モード』に切り替えられるようにします。0x43(AM_RSQ_STATUS) で電波の平均強度を数秒間サンプリングし、その平均値に合わせた AMAGCNDX を 0x48 で固定投入します。
ICのバタバタした自動調整をあえて殺すことで、フェージングの波はそのまま残りつつも、耳に優しい自然な短波の音を維持することができます。
4.1.3 まとめ
0x48(AM_AGC_OVERRIDE) は、DSPラジオチップの「全自動おまかせモード」をあえて解除し、ユーザーが受信機の主導権を握るためのコアなコマンド です。
選局ごとの自動リセットという癖はありますが、これをマイコンのソフト側で上手にハンドリングすれば、自作ラジオのクオリティをホビーの領域から「本格的な無線通信機」の領域へと引き上げることができます。
選局ごとの自動リセットという癖はありますが、これをマイコンのソフト側で上手にハンドリングすれば、自作ラジオのクオリティをホビーの領域から「本格的な無線通信機」の領域へと引き上げることができます。
