この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x11. POWER_DOWN 概要
デバイスを電源投入モードから電源遮断モードに移行します。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
このコマンドは、電源投入モードのときのみ送信できます。電源遮断モードでは、POWER_UPコマンドのみが受け入れられることに注意してください。
システムコントローラが電源遮断モード中にPOWER_UP以外のコマンドを書き込んだ場合、デバイスは応答しません。
デバイスは、POWER_UPコマンドが書き込まれた場合にのみ応答します。
この状態では、GPOピンは電源がオフになり、非アクティブになります。
最適な電源遮断電流を得るには、GPO2をGPIO_CTLコマンドによって内部的にローレベルに駆動するか、外部からローレベルに駆動する必要があります。
注記:
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
このコマンドは、電源投入モードのときのみ送信できます。電源遮断モードでは、POWER_UPコマンドのみが受け入れられることに注意してください。
システムコントローラが電源遮断モード中にPOWER_UP以外のコマンドを書き込んだ場合、デバイスは応答しません。
デバイスは、POWER_UPコマンドが書き込まれた場合にのみ応答します。
この状態では、GPOピンは電源がオフになり、非アクティブになります。
最適な電源遮断電流を得るには、GPO2をGPIO_CTLコマンドによって内部的にローレベルに駆動するか、外部からローレベルに駆動する必要があります。
注記:
AMRXコンポーネント1.0では、システムコントローラがパワーダウンモード時にPOWER_UP以外のコマンドを書き込む場合、リセットが必要です。
注記:
パワーダウンモード時のすべてのピンの状態は以下のとおりです。
GPIO1、GPIO2、GPIO3 = 0
ROUT、LOUT、DOUT、DFS = HiZ
使用可能環境:全環境
コマンド引数:なし
応答バイト:なし
2 コマンドパラメータ
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
3 応答パラメータ
(FUNC = 1 [AM]の場合 ※は有りません)3.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| STATUS | CTS | ERR | X | X | RSQINT | ※ RDSINT | X | STCINT |
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になります。
選局完了のタイミングを正確に把握する目的で使用します。
4 その他
4.1 コマンドの重要ステップと注意事項(Google AI (Gemini) の見解)
Silicon LabsのDSPラジオIC「Si4735」における0x11 (POWER_DOWN) コマンドは、デバイスの動作(AM/FM/SSB)を安全に停止し、超低消費電力のスタンバイ状態へ移行させるためのコマンドです。
単に電源を切るだけでなく、機能切り替えの「要(かなめ)」となる本コマンドの注意点、応用展開、およびGoogle AI (Gemini) の見解をまとめます。
0x11 コマンドは引数(ARG)を持たず、コマンドバイト「0x11」を送信した後に1バイトのステータスを受け取ります。一見シンプルですが、実装上の重要な注意点があります。
単に電源を切るだけでなく、機能切り替えの「要(かなめ)」となる本コマンドの注意点、応用展開、およびGoogle AI (Gemini) の見解をまとめます。
0x11 コマンドは引数(ARG)を持たず、コマンドバイト「0x11」を送信した後に1バイトのステータスを受け取ります。一見シンプルですが、実装上の重要な注意点があります。
4.1.1 パワーダウン後の「CTS(Clear to Send)はチェック不可」
通常のコマンドは、実行後にステータスバイトのCTSビットが「1」になるのを待ちますが、0x11 を実行した直後はCTSのポーリング(確認ループ)をしてはいけません。
デバイスはパワーダウンすると内部のCPUが停止するため、I2Cバスへの応答をしなくなるか、不確定な値を返します。0x11 を送った後は、CTSを待たずに数ミリ秒(データシート推奨は最小10μs以上、実務上は1〜2ms)の固定ディレイをマイコン側で挿入するのが正しい作法です。
デバイスはパワーダウンすると内部のCPUが停止するため、I2Cバスへの応答をしなくなるか、不確定な値を返します。0x11 を送った後は、CTSを待たずに数ミリ秒(データシート推奨は最小10μs以上、実務上は1〜2ms)の固定ディレイをマイコン側で挿入するのが正しい作法です。
4.1.2 オーディオの「ポップノイズ」対策
アナログ音声出力(LINEOUT)がアクティブな状態で唐突に 0x11 を送ると、スピーカーやイヤホンから「プチッ」という不快なポップノイズが発生します。
これを防ぐため、0x11 を発行する直前に、必ず 0x12 (SET_PROPERTY) コマンド等を使用してオーディオをミュート(消音)状態にしてください。
これを防ぐため、0x11 を発行する直前に、必ず 0x12 (SET_PROPERTY) コマンド等を使用してオーディオをミュート(消音)状態にしてください。
4.1.3 消費電力を極限まで下げるためのピン処理
0x11 を送るだけでIC内部の多くはシャットダウンされますが、マイコン側からSi4735の入力ピン(SDIO、SCLK、SENなど)が「High」のまま維持されていると、ピン経由でIC内部にわずかなリーク電流が流れ続けます。
バッテリー駆動の機器では、0x11 を送った後にマイコン側のGPIOをLowにするか、浮かせ(Input設定)にする処理が必要です。
バッテリー駆動の機器では、0x11 を送った後にマイコン側のGPIOをLowにするか、浮かせ(Input設定)にする処理が必要です。
4.2 もう少し踏み込んだ応用展開(Google AI (Gemini) の見解)
0x11 コマンドを深く理解することで、モード切り替えの安定化や、高度な省電力システムの構築が可能になります。
4.2.1 モード移行時の「完全初期化(クリーンブート)」シーケンス
前述の通り、FMからAM/SSBへ切り替える際は 0x11 が必須ですが、ソフトウェア的な 0x11 だけでは内部RAMのレジスタの一部が不安定な状態のまま残るケースが稀にあります。
展開例: より堅牢なシステムにするため、「0x11送信 ➔ マイコン側でRSTピンをLowに制御(ハードウェアリセット) ➔ RSTピンをHighに戻す ➔ 0x01 (POWER_UP)」 という一連の「ハイブリッド・リセットシーケンス」を組むことで、モード切り替え時のハングアップを完全にゼロに抑えることができます。
展開例: より堅牢なシステムにするため、「0x11送信 ➔ マイコン側でRSTピンをLowに制御(ハードウェアリセット) ➔ RSTピンをHighに戻す ➔ 0x01 (POWER_UP)」 という一連の「ハイブリッド・リセットシーケンス」を組むことで、モード切り替え時のハングアップを完全にゼロに抑えることができます。
4.2.2 バッテリー駆動機器における「超省電力・間欠受信」
常に電波を受信し続ける必要がないアプリケーション(例:1時間に1回だけ時報や気象データを短波/AMで自動受信するシステム)では、0x11 を活用した間欠動作を行います。
マイコンのタイマー(ディープスリープ)と同期させ、「起動 ➔ 0x01でPOWER_UP ➔ 受信・データ処理 ➔ 0x11でPOWER_DOWN ➔ マイコンと共に休止」 を繰り返すことで、単三電池数本で数ヶ月〜数年動作するリモート環境用の受信機を展開できます。
マイコンのタイマー(ディープスリープ)と同期させ、「起動 ➔ 0x01でPOWER_UP ➔ 受信・データ処理 ➔ 0x11でPOWER_DOWN ➔ マイコンと共に休止」 を繰り返すことで、単三電池数本で数ヶ月〜数年動作するリモート環境用の受信機を展開できます。
4.3 パワーダウン前後の推奨フロー
安全にデバイスを停止・リセットするための理想的なプログラムフローです。
【動作中(FM/AM/SSB)】
1. [0x12] (SET_PROPERTY) でオーディオをミュート(ポップノイズ防止)
2. [0x11] (POWER_DOWN) コマンドを送信
3. ソフトウェア・ディレイ(1〜2ms待機。CTSチェックはスキップ)
4. ホストマイコンのRSTピン制御で、Si4735のRSTを数ミリ秒Lowに(ハードリセット)
│ 【完全停止状態(スタンバイ)】 ➔ 次のPOWER_UP(0x01)へ
【動作中(FM/AM/SSB)】
1. [0x12] (SET_PROPERTY) でオーディオをミュート(ポップノイズ防止)
2. [0x11] (POWER_DOWN) コマンドを送信
3. ソフトウェア・ディレイ(1〜2ms待機。CTSチェックはスキップ)
4. ホストマイコンのRSTピン制御で、Si4735のRSTを数ミリ秒Lowに(ハードリセット)
│ 【完全停止状態(スタンバイ)】 ➔ 次のPOWER_UP(0x01)へ
4.4 その他Google AI (Gemini) の見解
Si4735を用いたレシーバー開発において、Google AI (Gemini) は「0x11コマンドを単なる“電源オフ”ではなく、“状態遷移のトランジション(過渡期)”として厳密に管理すべきである」と見なしています。
4.4.1 非同期処理におけるバグ防止の見解
多くの初心者エンジニアやホビーユーザーは、0x11 を送った直後に、ICがまだシャットダウン処理中(数〜数十マイクロ秒の内部遅延)であるにもかかわらず、
次のモードの 0x01 (POWER_UP) を送ってしまい、I2Cバスをクラッシュさせます。
Geminiとしては、ファームウェア内に powerDownDevice() といった独立した関数を定義し、その中で「ミュート ➔ コマンド送信 ➔ 確実なミリ秒単位のブロッキングディレイ ➔ リセットピンのトグル」 までを1つのパッケージ(アトミックな処理)としてカプセル化することを強く推奨します。
Geminiとしては、ファームウェア内に powerDownDevice() といった独立した関数を定義し、その中で「ミュート ➔ コマンド送信 ➔ 確実なミリ秒単位のブロッキングディレイ ➔ リセットピンのトグル」 までを1つのパッケージ(アトミックな処理)としてカプセル化することを強く推奨します。
4.4.2 SSBパッチ運用における「ゴミ残り」の排除
SSBパッチ(約8〜16KB)を適用した後に別のモードへ移行する場合、内部RAMの内容がクリアされきらないと、次にAMやFMに切り替えた際に不意のノイズや感度低下を引き起こす原因になります。
Geminiの見解では、パッチ運用時における 0x11 は「ハードウェアリセット(RSTピンのLow/High制御)のトリガー」として扱うのが最も合理的であり、 ソフトウェアコマンド単体に依存せず、物理ピンの制御と組み合わせることで初めて「Silicon LabsのDSPが持つ本来の安定性と高感度」を100%引き出すことができると評価します。
Geminiの見解では、パッチ運用時における 0x11 は「ハードウェアリセット(RSTピンのLow/High制御)のトリガー」として扱うのが最も合理的であり、 ソフトウェアコマンド単体に依存せず、物理ピンの制御と組み合わせることで初めて「Silicon LabsのDSPが持つ本来の安定性と高感度」を100%引き出すことができると評価します。
