この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x40. AM_TUNE_FREQ 概要
1.1 概要
Si4735の0x40コマンド(AM_TUNE_FREQ)は、AM、短波(SW)、長波(LW)の受信周波数を設定するための重要なコマンドです。
AM/SW/LW受信周波数を1kHzステップで149~23MHzの範囲に調整します。AM専用モードでは、有効周波数は1kHzステップで520~1710kHzの範囲です。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
ERRビット(およびオプションの割り込み)は、無効な引数が送信された場合にセットされます。
CTSビットとERRビットの両方がセットされている場合、割り込みは1回のみ発生することに注意してください。
オプションのSTC割り込みは、コマンドが完了したときにセットされます。
STCINTビットは、GET_INT_STATUSコマンドが呼び出された後にのみセットされます。
このコマンドは、電源投入モードのときのみ送信できます。STCビットが既にセットされている場合は、このコマンドによってSTCビットがクリアされます。
142ページの図24「CTSおよびSTCタイミングモデル」と145ページの表32「AM受信機のコマンドタイミングパラメータ」を参照してください。
AM:LO周波数は、RF周波数が1000kHz未満の場合はRF周波数より45kHz高く、1000kHzを超える場合はRF周波数より45kHz低くなっています。例えば、900kHzに同調した場合、LO周波数は945kHzになります。
注:FASTビットは、Si473x-D60以降のデバイスおよびSi4732デバイス(AMRXコンポーネント3.0以降)でサポートされています。
ANTCAPビットは、AMRXコンポーネント2.0以降(すべてのデバイス)でサポートされています。
対応機種:すべて
コマンド引数:5つ
応答バイト:なし
AM/SW/LW受信周波数を1kHzステップで149~23MHzの範囲に調整します。AM専用モードでは、有効周波数は1kHzステップで520~1710kHzの範囲です。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときにセットされます。
ERRビット(およびオプションの割り込み)は、無効な引数が送信された場合にセットされます。
CTSビットとERRビットの両方がセットされている場合、割り込みは1回のみ発生することに注意してください。
オプションのSTC割り込みは、コマンドが完了したときにセットされます。
STCINTビットは、GET_INT_STATUSコマンドが呼び出された後にのみセットされます。
このコマンドは、電源投入モードのときのみ送信できます。STCビットが既にセットされている場合は、このコマンドによってSTCビットがクリアされます。
142ページの図24「CTSおよびSTCタイミングモデル」と145ページの表32「AM受信機のコマンドタイミングパラメータ」を参照してください。
AM:LO周波数は、RF周波数が1000kHz未満の場合はRF周波数より45kHz高く、1000kHzを超える場合はRF周波数より45kHz低くなっています。例えば、900kHzに同調した場合、LO周波数は945kHzになります。
注:FASTビットは、Si473x-D60以降のデバイスおよびSi4732デバイス(AMRXコンポーネント3.0以降)でサポートされています。
ANTCAPビットは、AMRXコンポーネント2.0以降(すべてのデバイス)でサポートされています。
対応機種:すべて
コマンド引数:5つ
応答バイト:なし
1.2 コマンド関連の注意事項・実装のポイント
1.2.1 STC(Seek/Tune Complete)待ちの必須化
コマンドを送信した直後は、ICの内部処理が完了するまで次の処理に移っては Venice(ハングアップ)の原因になります。
コマンド送信後は、必ずステータスバイトを読み込んで STC ビット(ビット0)が 1 になるまでループで待機(ポーリング) するか、インタラプト(IRQ)ピンの変化を検知してください。
コマンド送信後は、必ずステータスバイトを読み込んで STC ビット(ビット0)が 1 になるまでループで待機(ポーリング) するか、インタラプト(IRQ)ピンの変化を検知してください。
1.2.2 最後に必ず行う処理
STC が 1 になったことを確認したら、完了をICに通知(クリア)するために 0x14(GET_INT_STATUS)コマンド を発行してステータスをリフレッシュさせてください。
これを怠ると、次回以降の選局コマンドやシークコマンドが正常に動作しなくなるケースがあります。
これを怠ると、次回以降の選局コマンドやシークコマンドが正常に動作しなくなるケースがあります。
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 | FAST |
| ARG2 | FREQH | |||||||
| ARG3 | FREQL | |||||||
| ARG4 | ANTCAPH | |||||||
| ARG5 | ANTCAPL | |||||||
| ARG | Bit | Name | Function |
|---|---|---|---|
| 1 | FAST | 高速チューニング。 設定すると、高速かつ無効化されたチューニングが実行されます。 チューニングの状態は正確ではありません。 | |
| 2,3 | FREQH,L | 同調周波数上位[15:8],下位[7:0]バイト。 このバイトはFREQLと組み合わせて、同調周波数をkHz単位で選択します。AM/SW/LWモードでは、有効範囲は149~23000kHz(149kHz~23MHz)です。 AMのみのモードでは、有効範囲は520~1710kHz(520kHz~1710kHz)です。 | |
| 4,5 | 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 FAST(FAST Tuning Bit)
目的
選局(チューニング)にかかる時間を短縮し、高速な周波数切り替えを可能にします。
解説
このビットを 1 に設定すると、音声をミュートにする時間が短くなり、内部のフェーズロックループ(PLL)が通常よりも高速にロックします。
主に、ユーザーがダイヤル(エンコーダー)を素早く回して周波数を連続変更している最中や、簡易的な周波数スキャンを行う際に使用されます。
ただし、高速化する代わりに受信性能の最適化ステップを一部スキップするため、最終的な待ち受け周波数に決定した後は FAST = 0 で再度コマンドを送り、正確にチューニングし直すのが定石です。
主に、ユーザーがダイヤル(エンコーダー)を素早く回して周波数を連続変更している最中や、簡易的な周波数スキャンを行う際に使用されます。
ただし、高速化する代わりに受信性能の最適化ステップを一部スキップするため、最終的な待ち受け周波数に決定した後は FAST = 0 で再度コマンドを送り、正確にチューニングし直すのが定石です。
2.2.2 FREQH,L(Tuning Frequency High Byte / Low Byte)
目的
受信したい具体的なターゲット周波数を 1 kHz 単位の16ビット(2バイト)データとして指定します。
解説
FREQH が上位8ビット、FREQL が下位8ビットを担います。設定値の計算方法: 受信したい周波数(kHz 単位)の数値をそのまま16進数に変換して分割します。
例: AM放送の 738 kHz(北日本放送など)に合わせたい場合
738 = 0x02E2
となるため、FREQH = 0x02、FREQL=E2 と設定します。
例: AM放送の 738 kHz(北日本放送など)に合わせたい場合
738 = 0x02E2
となるため、FREQH = 0x02、FREQL=E2 と設定します。
2.2.3 ANTCAPH,L(Antenna Tuning Capacitor High Byte / Low Byte)
目的
AM/SW/LW受信用の外部アンテナ回路(バーアンテナなど)と同期させるための、IC内部の可変容量コンデンサ(バリキャップ)の値を手動または自動で設定します。
解説
Si4735は、選択した周波数で最も感度が良くなるようにアンテナの同調容量を自動調整する機能を備えています。
このパラメータを 0x0000(自動設定) にすると、ICが自動で最適な容量にマッチングしてくれます。
手動で固定したい場合は、1 から 4095(0x0FFF)までの値を指定することで、内部キャパシタを直接制御できます。
手動設定は、特定の固定アンテナに最適化したい場合や、自動選局の微小なタイムラグを排除したい上級者向けの機能です。
このパラメータを 0x0000(自動設定) にすると、ICが自動で最適な容量にマッチングしてくれます。
手動で固定したい場合は、1 から 4095(0x0FFF)までの値を指定することで、内部キャパシタを直接制御できます。
手動設定は、特定の固定アンテナに最適化したい場合や、自動選局の微小なタイムラグを排除したい上級者向けの機能です。
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のAM系チューニング(0x40)を制御する上で、より高音質・高性能なラジオを設計するための「Geminiの知見を交えたアドバイス」です。
4.1.1 SSB(単一側波帯)モードへの拡張性
Si4735(特にD60グラフィックリビジョン以降)は、アマチュア無線や短波の管制通信などで使われる SSB(USB/LSB)およびCWの受信に対応可能 です。
ただし、これにはSilicon Labsが提供するパッチコード(ファームウェア)を起動時にI2C経由でRAMに流し込む(パッチ当て)必要があります。
パッチ適用後のSSBモードでは、この 0x40 コマンドがそのまま SSB_TUNE_FREQ コマンドへと役割を変え、さらに細かな周波数ステップでの同調が可能になります。
自作ラジオのクオリティを大衆向けAMラジオから「本格的な短波通信レシーバー」へと化けさせることができる、非常に面白い展開要素です。
ただし、これにはSilicon Labsが提供するパッチコード(ファームウェア)を起動時にI2C経由でRAMに流し込む(パッチ当て)必要があります。
パッチ適用後のSSBモードでは、この 0x40 コマンドがそのまま SSB_TUNE_FREQ コマンドへと役割を変え、さらに細かな周波数ステップでの同調が可能になります。
自作ラジオのクオリティを大衆向けAMラジオから「本格的な短波通信レシーバー」へと化けさせることができる、非常に面白い展開要素です。
4.1.2 AMチャンネルフィルター(帯域幅設定)との連動
0x40 で周波数を決定した後は、0x12(SET_PROPERTY)コマンド を使って、AMのデジタルフィルター帯域幅(AM_CHANNEL_FILTER)を動的に切り替える実装を強く推奨します。
夜間の短波や混信の激しいAM:帯域幅を 1.0 kHz や 2.0 kHz に狭めてノイズをカットする。ローカルの強力なAM放送局:帯域幅を 4.0 kHz や 6.0 kHz に広げて高音質な(AMとしてはクリアな)サウンドを楽しむ。
このように、チューニングと同時にフィルター幅をユーザーが操作できるようにすると、市販の高級通信型受信機に匹敵する操作感が得られます。
夜間の短波や混信の激しいAM:帯域幅を 1.0 kHz や 2.0 kHz に狭めてノイズをカットする。ローカルの強力なAM放送局:帯域幅を 4.0 kHz や 6.0 kHz に広げて高音質な(AMとしてはクリアな)サウンドを楽しむ。
このように、チューニングと同時にフィルター幅をユーザーが操作できるようにすると、市販の高級通信型受信機に匹敵する操作感が得られます。
4.1.3 まとめ
Si4735の 0x40 コマンドは、周波数指定(FREQH,L)、選局速度(FAST)、アンテナ整合(ANTCAPH,L) の3つを1度に制御し、DSPラジオとしてのAM受信基盤を決定づける極めて重要なAPIです。
4.2 Google AI (Gemini) の回答
4.2.1 FAST処理概要
質問
見解
FASTではどの様にして早い処理をしているか概要を教えて下さい
見解
Si4735の FAST ビット(ファスト・チューニング・ビット)が有効なとき、IC内部で処理が高速化される主な仕組みは「PLL(位相同期回路)のロックプロセスの簡略化」と「アンテナ自動同調(オートチューニング)のスキップ・簡略化」の2つです。
DSPラジオチップの内部で行われている高速化の概要を解説します。
1. PLL(周波数シンセサイザ)の高速ロック
2. アンテナ同調(ANTCAP)処理のスキップ
3. ミュート(消音)時間の短縮
例えるなら
DSPラジオチップの内部で行われている高速化の概要を解説します。
1. PLL(周波数シンセサイザ)の高速ロック
ラジオが新しい周波数に合わせる際、内部のPLLという回路が「狙った周波数」にピタッと安定するまで正確に追いかける制御(ロック処理)を行います。
通常時(FAST = 0):非常に細かいステップで、時間をかけて電気信号を安定させます。
これにより、周波数のズレや不要なノイズ(スプリアス)を極限まで抑えた「きれいな局部発振信号」を作ります。
高速時(FAST = 1):PLLの応答特性(ループ・フィルタの帯域など)を一時的に「大雑把だが素早いモード」に切り替えます。
これにより、多少の信号の揺らぎやノイズは許容しつつ、目的の周波数付近へ一瞬でジャンプさせます。
通常時(FAST = 0):非常に細かいステップで、時間をかけて電気信号を安定させます。
これにより、周波数のズレや不要なノイズ(スプリアス)を極限まで抑えた「きれいな局部発振信号」を作ります。
高速時(FAST = 1):PLLの応答特性(ループ・フィルタの帯域など)を一時的に「大雑把だが素早いモード」に切り替えます。
これにより、多少の信号の揺らぎやノイズは許容しつつ、目的の周波数付近へ一瞬でジャンプさせます。
2. アンテナ同調(ANTCAP)処理のスキップ
AMや短波(SW)の受信では、周波数に合わせて外部アンテナの同調容量(ANTCAP)を最適化する必要があります。
通常時(FAST = 0):周波数を変えた後、ICが内部コンデンサの値を少しずつ変えながら「どこが一番感度が良くなるか」を測定・計算するサーチ処理が走ります。
これには数十ミリ秒の時間がかかります。
高速時(FAST = 1):この「最適な容量をじっくり探す処理」を完全にスキップするか、あるいはあらかじめチップ内に保存されている「大体の予測値」をパッと割り当てるだけに留めます。
通常時(FAST = 0):周波数を変えた後、ICが内部コンデンサの値を少しずつ変えながら「どこが一番感度が良くなるか」を測定・計算するサーチ処理が走ります。
これには数十ミリ秒の時間がかかります。
高速時(FAST = 1):この「最適な容量をじっくり探す処理」を完全にスキップするか、あるいはあらかじめチップ内に保存されている「大体の予測値」をパッと割り当てるだけに留めます。
3. ミュート(消音)時間の短縮
周波数を切り替える瞬間、バリバリという不快な切り替えノイズ(ポップノイズ)が出ます。
通常時は、PLLやアンテナの調整が完全に終わるまで長めに音を消します(オーディオ・ミュート)。
FASTモードでは、上記の処理自体がすぐ終わるため、消音時間を極限まで短縮して次の音をすぐに鳴らします。
通常時は、PLLやアンテナの調整が完全に終わるまで長めに音を消します(オーディオ・ミュート)。
FASTモードでは、上記の処理自体がすぐ終わるため、消音時間を極限まで短縮して次の音をすぐに鳴らします。
例えるなら
通常モード(FAST=0):目的地(周波数)へ向かう際、コンパスで何度も方角を確かめ、服装(アンテナ)もしっかり整えてから慎重に進む。
FASTモード(FAST=1):とりあえず目的地の大体の方向へダッシュで向かい、細かいズレや服の乱れは後で直す。
このため、ダイヤルを勢いよく回して「キュルキュル」と素早く選局したい時(バンド内をスキャンしている最中)は FAST = 1 が威力を発揮します。
FASTモード(FAST=1):とりあえず目的地の大体の方向へダッシュで向かい、細かいズレや服の乱れは後で直す。
このため、ダイヤルを勢いよく回して「キュルキュル」と素早く選局したい時(バンド内をスキャンしている最中)は FAST = 1 が威力を発揮します。
