この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x41. AM_SEEK_START 概要
1.1 概要
Si4735の**0x41コマンド(AM_SEEK_START)**は、AM、短波(SW)、長波(LW)の帯域内から、自動で放送局(電波の強いチャンネル)を探し出すためのシーク(自動選局)開始コマンドです。
AM受信に必要なRSSIとSNRの基準を満たすチャネルの探索を開始します。
保留中のSTCINTまたはRSQINT割り込みステータスをクリアします。
RSQINTは、INTACKビットがセットされている場合にRSQステータスコマンドによってのみクリアされます。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
ERRビット(およびオプションの割り込み)は、無効な引数が送信された場合にセットされます。
CTSビットとERRビットの両方がセットされている場合は、割り込みは1回のみ発生することに注意してください。
オプションのSTC割り込みは、コマンドが完了したときにセットされます。
STCINTビットは、GET_INT_STATUSコマンドが呼び出された後にのみセットされます。
このコマンドは、電源投入モードのときのみ送信できます。STCINTビットが既にセットされている場合は、このコマンドによってクリアされます。
142ページの図24「CTSおよびSTCタイミングモデル」と145ページの表32「AM受信機のコマンドタイミングパラメータ」を参照してください。
注:ANTCAPビットはAMRXコンポーネント2.1以降でサポートされています。
対応機種:全機種
コマンド引数:5個
応答バイト:なし
AM受信に必要なRSSIとSNRの基準を満たすチャネルの探索を開始します。
保留中のSTCINTまたはRSQINT割り込みステータスをクリアします。
RSQINTは、INTACKビットがセットされている場合にRSQステータスコマンドによってのみクリアされます。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
ERRビット(およびオプションの割り込み)は、無効な引数が送信された場合にセットされます。
CTSビットとERRビットの両方がセットされている場合は、割り込みは1回のみ発生することに注意してください。
オプションのSTC割り込みは、コマンドが完了したときにセットされます。
STCINTビットは、GET_INT_STATUSコマンドが呼び出された後にのみセットされます。
このコマンドは、電源投入モードのときのみ送信できます。STCINTビットが既にセットされている場合は、このコマンドによってクリアされます。
142ページの図24「CTSおよびSTCタイミングモデル」と145ページの表32「AM受信機のコマンドタイミングパラメータ」を参照してください。
注:ANTCAPビットはAMRXコンポーネント2.1以降でサポートされています。
対応機種:全機種
コマンド引数:5個
応答バイト:なし
1.2 コマンド関連の注意事項・実装のポイント
1.2.1 シーク完了(STC)と「局が見つかったか」の判定
選局コマンド(0x40)と同様に、コマンド送信後は STC ビットが 1 になるまで待機(ポーリング) します。ただし、シークの場合は「局が見つかって止まった」のか「局が見つからないまま端まで行って止まった(あるいは1周した)」のかを識別する必要があります。
これは、シーク完了後に 0x42(AM_SEEK_STATUS)コマンド を発行し、ステータス内の BLTF(Band Limit Flag:局不検出フラグ)を読み取ることで判定します。
これは、シーク完了後に 0x42(AM_SEEK_STATUS)コマンド を発行し、ステータス内の BLTF(Band Limit Flag:局不検出フラグ)を読み取ることで判定します。
1.2.2 事前に有効な「シーク閾値」の設定が必要
何をもって「放送局(電波が強い)」とみなすかの基準(閾値)を事前に設定しておかないと、ノイズばかりを拾って細かく止まってしまったり、逆に電波が十分出ているのに素通りしてしまったりします。
シークを実行する前に、0x12(SET_PROPERTY)コマンド を使って以下のプロパティを適切にチューニングしておく必要があります。
AM_SEEK_RSSI_THRESHOLD(受信信号強度レベルの閾値)AM_SEEK_SNR_THRESHOLD(信号対雑音比・品質の閾値)
シークを実行する前に、0x12(SET_PROPERTY)コマンド を使って以下のプロパティを適切にチューニングしておく必要があります。
AM_SEEK_RSSI_THRESHOLD(受信信号強度レベルの閾値)AM_SEEK_SNR_THRESHOLD(信号対雑音比・品質の閾値)
2 コマンドパラメータ
2.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
| ARG1 | 0 | 0 | 0 | 0 | SEEKUP | WRAP | 0 | 0 |
| ARG2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| ARG3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| ARG4 | ANTCAPH | |||||||
| ARG5 | ANTCAPL | |||||||
| ARG | Bit | Name | Function |
|---|---|---|---|
| 1 | 3 | SEEKUP | シークアップ/ダウン 検索方向を指定します。 UP = 1、DOWN = 0 のいずれかです。 |
| 1 | 2 | WRAP | ラップ/停止 バンド制限に達した際に、シークをラップするか停止するかを指定します。 Wrap = 1 または Halt = 0 のいずれかです。 |
| 4,5 | 7:0 | ANTCAPH,L | アンテナ同調コンデンサ上位[15:8]、下位[7:0]バイト。 このバイトはANTCAPLと組み合わせて同調コンデンサの値を選択します。 両方のバイトがゼロに設定されている場合、同調コンデンサの値は自動的に選択されます。 値が0以外の場合、同調容量は95 fF × ANTCAP + 7 pFとして手動で設定されます。 ANTCAPの手動設定範囲は1~6143です。自動コンデンサ同調を推奨します。 注:SWモードでは、ANTCAPH[15:8]を0に、ANTCAPL[7:0]を1に設定する必要があります。 |
2.2 パラメータ
2.2.1 SEEKUP(Seek Direction Bit)
目的
自動選局(シーク)を開始する際、周波数を「高い方向」へ探すか、「低い方向」へ探すかの向きを指定します。
解説
1 に設定するとシークアップ(現在の周波数から上に向かってスキャン)になります。
0 に設定するとシークダウン(現在の周波数から下に向かってスキャン)になります。
ユーザーインターフェースで
「進む(▶▶)」ボタンが押されたら 1、
「戻る(◀◀)」ボタンなら 0 を割り当てるのが一般的です。
0 に設定するとシークダウン(現在の周波数から下に向かってスキャン)になります。
ユーザーインターフェースで
「進む(▶▶)」ボタンが押されたら 1、
「戻る(◀◀)」ボタンなら 0 を割り当てるのが一般的です。
2.2.2 WRAP(Wrap-Around Enable Bit)
目的
スキャンがバンド(受信帯域)の端(上限または下限)に達したときに、反対側の端に戻ってスキャンを続ける(ループする)かどうかを指定します。
解説
1(有効): 上限(下限)に達すると、自動的に下限(上限)へジャンプして局探しを継続します。
途中で局が見つからなければ、開始した元の周波数に戻るまで探し続けます。
0(無効): バンドの端に到達した時点で、局が見つかっていなくてもシーク処理を強制終了し、停止します。
途中で局が見つからなければ、開始した元の周波数に戻るまで探し続けます。
0(無効): バンドの端に到達した時点で、局が見つかっていなくてもシーク処理を強制終了し、停止します。
2.2.3 ANTCAPH,L(Antenna Tuning Capacitor High Byte / Low Byte)
目的
シーク開始時、およびシーク中の各周波数ステップにおいて、外部アンテナ回路とマッチングさせるための内部可変容量コンデンサ(バリキャップ)の制御方法を指定します。
解説
シークコマンド(0x41)におけるこのパラメータは、通常 0x0000(自動設定) に設定します。
0x0000 にしておくと、ICが周波数を1ステップずつ動かすたびに、その周波数に最適なアンテナ容量を内部で超高速に自動追従(オートチューニング)させながら電波強度を測定してくれます。
手動で固定値(1〜4095)を入れることも物理的には可能ですが、周波数が次々と変わるシーク動作においては感度が合わなくなるため、特別な評価目的以外では自動設定(0x0000)にするのが鉄則です。
0x0000 にしておくと、ICが周波数を1ステップずつ動かすたびに、その周波数に最適なアンテナ容量を内部で超高速に自動追従(オートチューニング)させながら電波強度を測定してくれます。
手動で固定値(1〜4095)を入れることも物理的には可能ですが、周波数が次々と変わるシーク動作においては感度が合わなくなるため、特別な評価目的以外では自動設定(0x0000)にするのが鉄則です。
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) の見解
Si4735のシーク機能をより実用的、かつ高級感のある動作に仕上げるためのアドバイスです。
4.1.1 無音シークによるユーザー体験の向上
デフォルトのままシークを走らせると、局を探している最中に「ザー、ザー」というスキャンノイズがスピーカーから漏れてしまい、ユーザーに不快感を与えます。
これを防ぐため、0x41 コマンドを送る直前に 0x12(SET_PROPERTY)で AM_MUTE プロパティを有効にして完全に消音 し、シークが完了(STC=1 検出&局確定)した後にミュートを解除する、というソフトウェア制御を入れるのがスマートな実装です。
これを防ぐため、0x41 コマンドを送る直前に 0x12(SET_PROPERTY)で AM_MUTE プロパティを有効にして完全に消音 し、シークが完了(STC=1 検出&局確定)した後にミュートを解除する、というソフトウェア制御を入れるのがスマートな実装です。
4.1.2 AM(中波)とSW(短波)での閾値の動的切り替え
ここが一番の踏み込みどころです。AM放送(中波)は比較的電波が安定していますが、SW(短波)は時間帯やフェージング(電波の揺らぎ)によって信号強度が激しく変動します。
そのため、一律の閾値(RSSI/SNR)でシークを行うと、短波帯ではまったく局を見つけられない(スルーしてしまう)現象が起きます。
Geminiの見解としては:「現在選択しているバンドがAMかSWかをマイコン側で判断し、SW帯のシーク時のみ AM_SEEK_SNR_THRESHOLD を通常(例:3〜5dB)よりも低め(0〜1dBなど)に攻めた値に一時変更する」という動的アルゴリズムの実装を提案します。
これにより、海外の微弱な短波放送も自動でパッと引っかかる、高性能なBCL(短波リスニング)ラジオが実現できます。
そのため、一律の閾値(RSSI/SNR)でシークを行うと、短波帯ではまったく局を見つけられない(スルーしてしまう)現象が起きます。
Geminiの見解としては:「現在選択しているバンドがAMかSWかをマイコン側で判断し、SW帯のシーク時のみ AM_SEEK_SNR_THRESHOLD を通常(例:3〜5dB)よりも低め(0〜1dBなど)に攻めた値に一時変更する」という動的アルゴリズムの実装を提案します。
これにより、海外の微弱な短波放送も自動でパッと引っかかる、高性能なBCL(短波リスニング)ラジオが実現できます。
4.1.3 まとめ
0x41 コマンドは、進む方向(SEEKUP)と端に達したときの挙動(WRAP)を決め、アンテナは自動(ANTCAP=0)に任せるのが基本構成です。
前段の閾値プロパティ設定と、後段の 0x42 による状態確認を組み合わせることで、初めて滑らかな自動選局が完成します。
前段の閾値プロパティ設定と、後段の 0x42 による状態確認を組み合わせることで、初めて滑らかな自動選局が完成します。
