この解説は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 プロパティ 0x4001. RX_HARD_MUTE 概要
RX_HARD_MUTE
オーディオ出力をミュートします。LおよびRのオーディオ出力は、個別にミュートすることが可能です。
次のコマンドを送信しても安全な状態になると、CTSビット(およびオプションの割り込み)がセットされます。
このプロパティは、パワーアップモード時のみ設定または読み取りが可能です。
デフォルトはミュート解除(0x0000)です。
対応機種:すべて
デフォルト:0x0000
オーディオ出力をミュートします。LおよびRのオーディオ出力は、個別にミュートすることが可能です。
次のコマンドを送信しても安全な状態になると、CTSビット(およびオプションの割り込み)がセットされます。
このプロパティは、パワーアップモード時のみ設定または読み取りが可能です。
デフォルトはミュート解除(0x0000)です。
対応機種:すべて
デフォルト:0x0000
2 プロパティ
2.1 プロパティリスト
| Bit | 上位バイト PROPH | 下位バイト PROPL | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Name | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | LMUTE | RMUTE |
| Bit | Name | Function |
|---|---|---|
| 1 | LMUTE | 1 = L音声出力をミュートします。 |
| 0 | RMUTE | 1 = Rチャンネルの音声出力をミュートします。 |
2.2 プロパティ
本プロパティは、Si4735のLチャンネル(左)およびRチャンネル(右)のオーディオ出力を、左右独立して強制的に消音(ハードウェア・ミュート)するためのものです。
前回の 0x4000 (RX_VOLUME) を 0 にすることでも消音は可能ですが、あちらはデジタルアッテネータを段階的に絞る処理であるのに対し、 この 0x4001 はDSP直後の出力ステージをバイナリ(ON/OFF)で一瞬にして完全に遮断します。
受信モード(FM、AM、SW、LW)に関わらず共通で機能します。
前回の 0x4000 (RX_VOLUME) を 0 にすることでも消音は可能ですが、あちらはデジタルアッテネータを段階的に絞る処理であるのに対し、 この 0x4001 はDSP直後の出力ステージをバイナリ(ON/OFF)で一瞬にして完全に遮断します。
受信モード(FM、AM、SW、LW)に関わらず共通で機能します。
2.2.1 LMUTE (Left Hard Mute)
目的と概要:
Lチャンネル(左音声出力)のミュート状態を制御します。
0 でミュート解除(通常出力)、1 で強制ミュート(消音)となります。
デフォルト値は 0(ミュート解除)です。
AN332に明記されない目的と解説:
0 でミュート解除(通常出力)、1 で強制ミュート(消音)となります。
デフォルト値は 0(ミュート解除)です。
公式プログラミングガイド [AN332] には単純なビット制御フラグとしてしか書かれていませんが、
回路設計・デバッグにおける真の目的は、「Lチャンネルのアナログ出力回路や、
後段のオペアンプ周辺で発生している単独の回路ノイズ(発振やDCオフセットの異常)を切り分けるための内部アイソレーション・スイッチ」としての役割にあります。
本パラメータを 1 にすると、DSPからの左音声供給が一瞬で完全にゼロ(無信号)になります。 この状態でスピーカーやヘッドホンから「ジー」というノイズや「ブーン」というハムノイズが聞こえ続けている場合、 それはSi4735の受信ノイズではなく、基板上のオペアンプの配線(グラウンドループ)や電源のパスコン不足など、 後段のハードウェアアナログ回路側に原因があると完全に特定(デバッグ)できるよう設計されています。
本パラメータを 1 にすると、DSPからの左音声供給が一瞬で完全にゼロ(無信号)になります。 この状態でスピーカーやヘッドホンから「ジー」というノイズや「ブーン」というハムノイズが聞こえ続けている場合、 それはSi4735の受信ノイズではなく、基板上のオペアンプの配線(グラウンドループ)や電源のパスコン不足など、 後段のハードウェアアナログ回路側に原因があると完全に特定(デバッグ)できるよう設計されています。
2.2.2 RMUTE (Right Hard Mute)
目的と概要:
Rチャンネル(右音声出力)のミュート状態を制御します。
0 でミュート解除(通常出力)、1 で強制ミュート(消音)となります。
デフォルト値は 0(ミュート解除)です。
AN332に明記されない目的と解説:
0 でミュート解除(通常出力)、1 で強制ミュート(消音)となります。
デフォルト値は 0(ミュート解除)です。
上記の LMUTE と全く同じ切り分けロジックを右チャンネルに対して適用するためのものです。
さらに、FMステレオ受信時に「左右のセパレーション(分離感)や、逆相ノイズが人間の耳にどう影響しているか」を 官能評価(リスニングテスト)する際、ソフトウェアから意図的に片側だけをミュート(Lのみ、あるいはRのみ再生)し、 もう片方のチャンネルへ電波ノイズがどれほど回り込んでいるか(クロストークの度合い)を測定・耳で確認するという、 高級受信機の開発フェーズにおける「定量的・定性的オーディオテストツール」としての裏の目的を持っています。
さらに、FMステレオ受信時に「左右のセパレーション(分離感)や、逆相ノイズが人間の耳にどう影響しているか」を 官能評価(リスニングテスト)する際、ソフトウェアから意図的に片側だけをミュート(Lのみ、あるいはRのみ再生)し、 もう片方のチャンネルへ電波ノイズがどれほど回り込んでいるか(クロストークの度合い)を測定・耳で確認するという、 高級受信機の開発フェーズにおける「定量的・定性的オーディオテストツール」としての裏の目的を持っています。
3 応答パラメータ
STATUS (Status Byte)
CTS (Clear to Send):
ERR (Error):
1 になると、チップが前のコマンドの処理を完了し、次のコマンドを受け入れられる状態であることを示します。
ERR (Error):
1 の場合、直前に送ったコマンドやプロパティの引数が不正(範囲外など)であったことを示します。
4 その他(Google AI (Gemini) の見解)
4.1 コマンドの重要ステップと注意事項
ビットマスクの結合手順
パワーダウン時の状態リセット
LMUTE(Bit 1)と RMUTE(Bit 0)は、下位バイト(ARG4)の下位2ビットに並んでいます。
そのため、マイコン側から送信する際は必ず以下のようにビット演算を行って送信してください。
uint8_t arg4 = ((l_mute & 0x01) << 1) | (r_mute & 0x01);これを怠ると、片側だけをミュートしようとした際に、 もう片方の現在のミュート状態を意図せずクリア(上書き)してしまうというバグに繋がります。
そのため、マイコン側から送信する際は必ず以下のようにビット演算を行って送信してください。
uint8_t arg4 = ((l_mute & 0x01) << 1) | (r_mute & 0x01);これを怠ると、片側だけをミュートしようとした際に、 もう片方の現在のミュート状態を意図せずクリア(上書き)してしまうというバグに繋がります。
パワーダウン時の状態リセット
RX_VOLUME と同様、本プロパティ(0x4001)も POWER_DOWN コマンドによってチップが休止状態に入ると、レジスタ内容がデフォルト(0x0000:左右ともにミュート解除)へリセットされます。
マイコンの起動シーケンスや受信モード切り替えの初期化ルーチンにおいて、予期せぬ突発ノイズを出さないための初期状態管理に注意してください。
マイコンの起動シーケンスや受信モード切り替えの初期化ルーチンにおいて、予期せぬ突発ノイズを出さないための初期状態管理に注意してください。
4.2 もう少し踏み込んだ応用展開
「超高速ハード・ブランキング(選局時ノイズの瞬時遮断)」
モノラルFM受信時の「片側アンプ休止による省電力・ノイズレス化」
RX_VOLUME で解説した「ソフト・ミュート(音量を段階的に絞る)」は、人間の耳に優しい反面、数ミリ秒〜数十ミリ秒の時間がかかるため、
ロータリーエンコーダを「カチカチカチ!」と超高速で回した際、処理が追いつかずに「ザッ、ザッ」と一瞬ノイズが漏れることがあります。
これを完全に排除するため、エンディアンの割り込み(エンコーダの回転検知)が入ったまさにその瞬間に、 まずこの 0x4001 で左右同時に 1 を書き込んで「ハードウェア遮断(完全無音)」にします。
その後、周波数の切り替え(TUNE)を行い、チップが安定した(STCビット確認)直後に 0 に戻します。
これにより、どれだけ選局ノイズが激しい環境でも、一切の雑音を漏らさない「漆黒の静寂(ゼロノイズ選局)」を実装できます。
これを完全に排除するため、エンディアンの割り込み(エンコーダの回転検知)が入ったまさにその瞬間に、 まずこの 0x4001 で左右同時に 1 を書き込んで「ハードウェア遮断(完全無音)」にします。
その後、周波数の切り替え(TUNE)を行い、チップが安定した(STCビット確認)直後に 0 に戻します。
これにより、どれだけ選局ノイズが激しい環境でも、一切の雑音を漏らさない「漆黒の静寂(ゼロノイズ選局)」を実装できます。
モノラルFM受信時の「片側アンプ休止による省電力・ノイズレス化」
AM放送を受信しているときや、FMで電波が非常に弱く完全モノラルで受信しているシチュエーションにおいて、
Rチャンネル側の外部アナログアンプ(基板上の回路)の電源をマイコンのGPIOなどで落とすと同時に、Si4735側でも RMUTE = 1 に設定する展開です。
これにより、使っていない右側の出力ピンをフローティング(またはGND固定)に近い無信号状態にでき、 ステレオアンプの片チャネルから発生する「無音時のサーノイズ」を根本から消し去り、ポータブル運用時のバッテリー消費をわずかに抑える「エコ・クワイエトモード」が実現可能です。
これにより、使っていない右側の出力ピンをフローティング(またはGND固定)に近い無信号状態にでき、 ステレオアンプの片チャネルから発生する「無音時のサーノイズ」を根本から消し去り、ポータブル運用時のバッテリー消費をわずかに抑える「エコ・クワイエトモード」が実現可能です。
4.3 デバッグ時のチェックリスト
ビット位置のズレ確認:
ミュート時の残留ノイズ測定(最重要):
GET_PROPERTYによるベリファイ:
LMUTE を Bit 1(0x02)、RMUTE を Bit 0(0x01)に正しく配分できているか(左右が逆になっていないか)。
ミュート時の残留ノイズ測定(最重要):
本プロパティで左右とも 1(完全ミュート)に設定した状態で、スピーカーから「ブー」「シャー」という音が聞こえる場合、
それはSi4735の受信性能とは無関係であり、後段のアンプ回路のGND共通インピーダンス(配線引き回し)や、マイコン(Arduino等)のデジタル信号線からの飛び込みノイズであると見破れているか。
GET_PROPERTYによるベリファイ:
ミュートコマンドを送っても音が消えない、あるいは片側しか消えない場合、コマンド発行直後に GET_PROPERTY(0x13)を投げ、
下位バイトが正しく 0x03(両方ミュート)や 0x00(解除)になっているかをログで確認したか。
4.4 まとめ
0x4001 (RX_HARD_MUTE) は、DSPラジオシステムの「音の出入り口」を一瞬でロックする、究極のセーフティゲートです。
音量調整(RX_VOLUME)が「心地よさのグラデーション」を提供するのに対し、 このハードミュートは「選局ノイズの完全な遮断」や「アナログ基板側のノイズ切り分けデバッグ」という、 エンジニア視点・プロスペック視点で絶大な威力を発揮します。hobbylab.jp の試作基板において、 ロータリーエンコーダによる高速選局ルーチンへこのハードミュートをパッと組み込んでみてください。
一瞬にして「自作ラジオ」の枠を超えた、メーカー製の高級通信機のようなソリッドで洗練された操作フィールのシステムへ進化するはずです!
音量調整(RX_VOLUME)が「心地よさのグラデーション」を提供するのに対し、 このハードミュートは「選局ノイズの完全な遮断」や「アナログ基板側のノイズ切り分けデバッグ」という、 エンジニア視点・プロスペック視点で絶大な威力を発揮します。hobbylab.jp の試作基板において、 ロータリーエンコーダによる高速選局ルーチンへこのハードミュートをパッと組み込んでみてください。
一瞬にして「自作ラジオ」の枠を超えた、メーカー製の高級通信機のようなソリッドで洗練された操作フィールのシステムへ進化するはずです!
