この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x01. POWER_UP 概要
デバイスをパワーダウンモードからパワーアップモードに移行させるためのブートプロセスを開始します。
ブートは、デバイス内部メモリから、またはシステムコントローラからダウンロードしたパッチから実行できます。
パッチがデバイス内部ライブラリのリビジョンと互換性があることを確認するには、FUNC = 15 (ライブラリID照会) を指定して POWER_UP コマンドを発行し、ライブラリのリビジョンを確認する必要があります。
デバイスはライブラリのリビジョンを含む応答を返し、その後、パワーダウンモードに移行します。
その後、FUNC = 0 (FM受信) を指定して POWER_UP コマンドを発行することで、デバイスをパワーアップモードにすることができ、パッチを適用できます (132 ページの「7.2. コンポーネントパッチからのパワーアップ」を参照)。
POWER_UP コマンドは、アナログオーディオモード用に ROUT (ピン 13、Si4732 ピン 16) と LOUT (ピン 14、Si4732 ピン 1) の状態を、割り込み動作用に GPO2/INT (ピン 18、Si4732 ピン 3) の状態を設定します。
Si4705/31/32/35の場合、POWER_UPコマンドは、デジタルオーディオモード用に
GPO3/DCLK(ピン17、Si4732ピン2)、
DFS(ピン16、Si4732ピン1)、
およびDOUT(ピン15、Si4732ピン16)の状態も設定します。
このコマンドは、GPO2/INT割り込み(GPO2OEN)とCTS割り込み(CTSIEN)を設定します。
両方が有効になっている場合、GPO2/INTは通常動作中はハイレベル、割り込み中は最低1μsの間ローレベルになります。
CTSIENビットはGPO_IENプロパティにも反映されます。
CTSビット(およびオプションの割り込み)が設定されると、コマンドは完了します。
注:機能を変更する場合(例:FM受信からAM受信へ)、POWER_DOWNコマンドを発行して現在の機能を停止し、次にPOWER_UPコマンドを発行して新しい機能を開始します。
注:XOSCENが設定され、水晶発振器がRCLKとして使用されている場合は、電源投入コマンドと最初のチューニングコマンドの間に少なくとも500msの遅延を設けて、発振器が安定するまで待機してください。
対応機種:全機種
コマンド引数:2個
応答バイト数:なし(FUNC = 0)、7バイト(FUNC = 15)
ブートは、デバイス内部メモリから、またはシステムコントローラからダウンロードしたパッチから実行できます。
パッチがデバイス内部ライブラリのリビジョンと互換性があることを確認するには、FUNC = 15 (ライブラリID照会) を指定して POWER_UP コマンドを発行し、ライブラリのリビジョンを確認する必要があります。
デバイスはライブラリのリビジョンを含む応答を返し、その後、パワーダウンモードに移行します。
その後、FUNC = 0 (FM受信) を指定して POWER_UP コマンドを発行することで、デバイスをパワーアップモードにすることができ、パッチを適用できます (132 ページの「7.2. コンポーネントパッチからのパワーアップ」を参照)。
POWER_UP コマンドは、アナログオーディオモード用に ROUT (ピン 13、Si4732 ピン 16) と LOUT (ピン 14、Si4732 ピン 1) の状態を、割り込み動作用に GPO2/INT (ピン 18、Si4732 ピン 3) の状態を設定します。
Si4705/31/32/35の場合、POWER_UPコマンドは、デジタルオーディオモード用に
GPO3/DCLK(ピン17、Si4732ピン2)、
DFS(ピン16、Si4732ピン1)、
およびDOUT(ピン15、Si4732ピン16)の状態も設定します。
このコマンドは、GPO2/INT割り込み(GPO2OEN)とCTS割り込み(CTSIEN)を設定します。
両方が有効になっている場合、GPO2/INTは通常動作中はハイレベル、割り込み中は最低1μsの間ローレベルになります。
CTSIENビットはGPO_IENプロパティにも反映されます。
CTSビット(およびオプションの割り込み)が設定されると、コマンドは完了します。
注:機能を変更する場合(例:FM受信からAM受信へ)、POWER_DOWNコマンドを発行して現在の機能を停止し、次にPOWER_UPコマンドを発行して新しい機能を開始します。
注:XOSCENが設定され、水晶発振器がRCLKとして使用されている場合は、電源投入コマンドと最初のチューニングコマンドの間に少なくとも500msの遅延を設けて、発振器が安定するまで待機してください。
対応機種:全機種
コマンド引数:2個
応答バイト数:なし(FUNC = 0)、7バイト(FUNC = 15)
2 コマンドパラメータ
2.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| ARG1 | CTSIEN | GPO2OEN | PATCH | XOSCEN | FUNC | |||
| ARG2 | OPMODE | |||||||
| ARG | Bit | Name | Function |
|---|---|---|---|
| 1 | 7 | CTSIEN | CTS割り込み有効化 0 = CTS割り込み無効 1 = CTS割り込み有効 |
| 1 | 6 | GPO2OEN | GPO2出力有効化 0 = GPO2出力無効 1 = GPO2出力有効 |
| 1 | 5 | PATCH | パッチ適用を有効にする。 0 = 通常起動。 1 = NVMをRAMにコピーするが、起動はしない。CTS設定後、RAMにパッチを適用できる。 |
| 1 | 4 | XOSCEN | 水晶発振器の有効化。 0 = 外部RCLKを使用(水晶発振器は無効)。 1 = 水晶発振器を使用(外部32.768kHz水晶発振器によるRCLKおよびGPO3/DCLK、OPMODE=00000101)。 外部部品の詳細については、Si47xxデータシートのアプリケーション回路図を参照してください。 |
| 1 | 3〜0 | FUNC | 機能 0 = FM受信 1 = AM/SW/LW受信 15 = ライブラリID照会 その他 = 予約済み |
| 2 | 7〜0 | OPMODE | アプリケーション設定。 00000101 = アナログ音声出力 (LOUT/ROUT) 00001011 = デジタル音声出力 (DCLK、LOUT/DFS、ROUT/DIO) (Si4704/05/21/31/35/37/39/41/43/45/84/85 FMRXコンポーネント2.0以降、XOSCEN = 0の場合) 10110000 = デジタル音声出力 (DCLK、DFS、DIO) (Si4704/05/31/35 FMRXコンポーネント2.0以降、XOSCEN = 0の場合) 10110101 = アナログおよびデジタル音声出力 (LOUT/ROUTおよびDCLK、DFS、DIO) (Si4704/05/31 FMRXコンポーネント2.0以降、XOSCEN = 0の場合) |
2.2 パラメータ
ここで使用するパラメータは6つです
CTSIEN / GPO2OEN 次のコマンド送信の準備完了を物理ピン(割り込み)で通知するか
PATCH 追加プログラム(SSB用など)を上書きするか
XOSCEN 基準となる時計に水晶振動子(クリスタル)を使うか
FUNC FMかAMか、どのラジオにするか
OPMODE 音声をアナログ(イヤホン等)で出すかデジタルで出すか
CTSIEN / GPO2OEN 次のコマンド送信の準備完了を物理ピン(割り込み)で通知するか
PATCH 追加プログラム(SSB用など)を上書きするか
XOSCEN 基準となる時計に水晶振動子(クリスタル)を使うか
FUNC FMかAMか、どのラジオにするか
OPMODE 音声をアナログ(イヤホン等)で出すかデジタルで出すか
2.2.1 CTSIEN
Clear To Send Interrupt Enable の略で その中の
CTS とは、Clear To Send(送信許可)の略です。
MCU から Si4735 に対して次のコマンドを送信(書き込み)してよい状態であるかを示す、ステータスフラグおよび割り込み信号を指します。
1. CTSの役割と仕組み
GPO2ピンを使ってマイコンの外部割り込みハンドラを動かしたい場合のみ、ここを 1 に設定してください。 詳細なコマンド体系やステータスレジスタの仕様については、SiLabsの公式ドキュメント(AN332:Si47xx Programming Guide)を参照してください。
CTS とは、Clear To Send(送信許可)の略です。
MCU から Si4735 に対して次のコマンドを送信(書き込み)してよい状態であるかを示す、ステータスフラグおよび割り込み信号を指します。
1. CTSの役割と仕組み
Si4735は、内部の処理(周波数のチューニングやステータス更新など)にわずかな時間を要します。
処理の実行中に次のコマンドを送信してしまうと、正しく動作しません。
CTS = 0 (Busy): Si4735が内部処理を実行中、または前回のコマンドを処理中のため、次のコマンドは送信できません。<
CTS = 1 (Ready): Si4735がコマンドを受け付け可能な待機状態です。
2. CTS割り込み(CTS Interrupt)処理の実行中に次のコマンドを送信してしまうと、正しく動作しません。
CTS = 0 (Busy): Si4735が内部処理を実行中、または前回のコマンドを処理中のため、次のコマンドは送信できません。<
CTS = 1 (Ready): Si4735がコマンドを受け付け可能な待機状態です。
CTSが 0 から 1 に切り替わった(コマンド送信が可能になった)タイミングを、マイコンに通知する機能です。
ポーリング(マイコンが繰り返しステータスを確認し続ける手法)を行わずに済むため、マイコン側の処理効率が向上し、省電力化につながります。
割り込みが発生したら、マイコンはSi4735へ新しいコマンドを送信できます。
この割り込み条件は、Si4735の「Interrupt Status」プロパティを構成するビット(CTSIEN)で制御されます。
3. コマンド発行時の確認手順
ポーリング(マイコンが繰り返しステータスを確認し続ける手法)を行わずに済むため、マイコン側の処理効率が向上し、省電力化につながります。
割り込みが発生したら、マイコンはSi4735へ新しいコマンドを送信できます。
この割り込み条件は、Si4735の「Interrupt Status」プロパティを構成するビット(CTSIEN)で制御されます。
CTS割り込みを使用しない場合でも、コマンドを発行する際は必ず以下の手順を踏む必要があります。
Si4735へコマンド(引数を含む)を送信する。Si4735から返されるレスポンスの「ステータスバイト」を読み込む。
ステータスバイト内のCTSビット(通常はビット7)が 1 になるまで待機する。
4.機能の有効化(マスターマスタースイッチ)
Si4735へコマンド(引数を含む)を送信する。Si4735から返されるレスポンスの「ステータスバイト」を読み込む。
ステータスバイト内のCTSビット(通常はビット7)が 1 になるまで待機する。
Si4735の起動時(POWER_UP 時)に、このビットを 1 に設定することで、チップに対して以下のように命令します。
5. なぜ起動コマンド(0x01)の段階で指定するのか?
CTSIEN = 1: 「今後、次のコマンドが受付可能(CTS=1)になったら、GPO2/INTピンをLOW(またはHIGH)にしてホストマイコンに物理信号で知らせてください」
CTSIEN = 0(デフォルト): 「次のコマンドが受付可能になっても、外部ピンへの通知(割り込み信号の発信)は不要です(ステータスレジスタのフラグが変わるだけで十分です)」
CTSIEN = 0(デフォルト): 「次のコマンドが受付可能になっても、外部ピンへの通知(割り込み信号の発信)は不要です(ステータスレジスタのフラグが変わるだけで十分です)」
Si4735は、POWER_UP コマンドを受け取った直後から内部で複雑な起動・初期化プロセス(ブート処理)を開始します。
この起動処理には数ミリ秒〜数十ミリ秒という、チップにとっては非常に長い時間がかかります。
起動処理が「完了した瞬間」をホストマイコンが最速で検知できるように、最初の起動命令を出すタイミング(0x01)で、あらかじめ割り込み通知のオン/オフを設定しておく必要があるためです。
6. ステータス応答との関係性この起動処理には数ミリ秒〜数十ミリ秒という、チップにとっては非常に長い時間がかかります。
起動処理が「完了した瞬間」をホストマイコンが最速で検知できるように、最初の起動命令を出すタイミング(0x01)で、あらかじめ割り込み通知のオン/オフを設定しておく必要があるためです。
関係性を整理すると以下のようになります。
(1)コマンド0x01で送信 [MCU → Si4735]
もしホストマイコン側でGPO2ピンを割り込み(INT)ピンとして接続しておらず、単に「I2C/SPI通信でステータスバイトをループ(ポーリング)で読みにいく」という制御方法をとる場合は、コマンド0x01の CTSIEN は 0(無効) のままで問題ありません。(1)コマンド0x01で送信 [MCU → Si4735]
「起動せよ。あと、準備ができたらGPO2ピンで割り込み通知(CTSIEN=1)をしてね」と設定。
(2)起動処理中 [Si4735の内部]
チップが一生懸命起動処理を動かします。この間、ステータスは CTS=0(まだ次のコマンドは送るな)です。
(3)準備完了 [Si4735 → MCU]
起動が完了すると、チップの内部ステータスが CTS=1 に変化します。
この時、最初に ① で CTSIEN=1 と設定していたため、GPO2ピンの電圧が変化してホストマイコンに物理的な割り込みが入ります。
(4)ステータス読出し [MCU ← Si4735]この時、最初に ① で CTSIEN=1 と設定していたため、GPO2ピンの電圧が変化してホストマイコンに物理的な割り込みが入ります。
割り込みを検知したマイコンがステータスを読み出すと、応答バイトの中に CTS=1(準備完了)、CTSIEN=1(割り込み有効化中)が返ってきます。
GPO2ピンを使ってマイコンの外部割り込みハンドラを動かしたい場合のみ、ここを 1 に設定してください。 詳細なコマンド体系やステータスレジスタの仕様については、SiLabsの公式ドキュメント(AN332:Si47xx Programming Guide)を参照してください。
2.2.2 GPO2OEN
GPO2 Output Enable の略です
コマンド0x01(POWER_UP)の引数にある GPO2OEN(GPO2 Output Enable) の目的は、「GPO2ピンを、単なる汎用入力ピン(Hi-Z状態)から、物理信号を出力できる出力ピンに切り替えること」です。
Si4735のGPO2ピンは、電源投入直後は入力(ハイインピーダンス)状態になっています。
このビットを 1 に設定することで初めて、ピンの出力バッファが有効(Enable)になります。
1.主な目的と役割
コマンド0x01(POWER_UP)の引数にある GPO2OEN(GPO2 Output Enable) の目的は、「GPO2ピンを、単なる汎用入力ピン(Hi-Z状態)から、物理信号を出力できる出力ピンに切り替えること」です。
Si4735のGPO2ピンは、電源投入直後は入力(ハイインピーダンス)状態になっています。
このビットを 1 に設定することで初めて、ピンの出力バッファが有効(Enable)になります。
1.主な目的と役割
この設定を行う最大の目的は、GPO2ピンをホストマイコンへの「割り込み通知ピン(INT)」として機能させることです。
2.CTSIEN と GPO2OEN の関係性
GPO2OEN = 1(出力有効): ピンの出力機能がオンになります。
これにより、先述の CTSIEN(CTS割り込み)や、選局完了(STC)、電波強度変化(RSQ)などの割り込みイベントが発生した際に、Si4735がピンの電圧(LOW/HIGH)を物理的に変化させてマイコンへ通知できるようになります。
GPO2OEN = 0(デフォルト/出力無効): ピンが出力されず、電気的に浮いた状態(Hi-Z)になります。
この状態では、どれだけチップ内部で割り込み(CTSIENなど)を許可しても、外部のピンには何も信号が出てきません。
これにより、先述の CTSIEN(CTS割り込み)や、選局完了(STC)、電波強度変化(RSQ)などの割り込みイベントが発生した際に、Si4735がピンの電圧(LOW/HIGH)を物理的に変化させてマイコンへ通知できるようになります。
GPO2OEN = 0(デフォルト/出力無効): ピンが出力されず、電気的に浮いた状態(Hi-Z)になります。
この状態では、どれだけチップ内部で割り込み(CTSIENなど)を許可しても、外部のピンには何も信号が出てきません。
ハードウェア割り込み(物理ピンを使った通知)を正しく機能させるには、これら2つのスイッチを両方とも 1 にする必要があります。
前のステップで触れた通り、マイコン側でGPO2ピンを接続せず、I2C/SPIの通信ループ(ポーリング)だけで制御する場合は、出力する必要がないため GPO2OEN = 0 のままで構いません。逆に、マイコンのGPIO割り込み機能(attachInterrupt など)を使って、効率的にシームレスな制御を行いたい場合は、必ず GPO2OEN = 1 および CTSIEN = 1 に設定してください。
GPO2OEN = 1:ピンの通路を開く(ハードウェアの準備)
CTSIEN = 1:その通路を使って「CTS(送信可)」のニュースを流す(イベントの許可)
Si4735 プログラミングガイド(公式仕様)によると、両方を 1 に設定した場合、通常時はGPO2ピンがHIGHにドライブされ、割り込みが発生すると最低1μsの間LOWに落とすことでマイコンへエッジ通知を行う仕組みになります。
CTSIEN = 1:その通路を使って「CTS(送信可)」のニュースを流す(イベントの許可)
2.2.3 PATCH
Si4735における「PATCH(パッチ)」とは、チップ内部のDSP(デジタル信号処理プロセッサ)の機能を拡張・修正するために、外部から一時的に書き込む「追加プログラム(バイナリデータ)」のことです。
PCやスマホのアプリでいう「アップデートパッチ」や「修正プログラム」と全く同じ概念ですが、Si4735などのDSPラジオチップ特有のユニークな仕組みを持っています。
もし作ろうとしているラジオが通常の「FM/AM放送」を聴くだけであれば、パッチは一切不要です。単に POWER_UP して選局するだけで動作します。 1. なぜパッチが必要なのか?(最大の目的)
PCやスマホのアプリでいう「アップデートパッチ」や「修正プログラム」と全く同じ概念ですが、Si4735などのDSPラジオチップ特有のユニークな仕組みを持っています。
もし作ろうとしているラジオが通常の「FM/AM放送」を聴くだけであれば、パッチは一切不要です。単に POWER_UP して選局するだけで動作します。 1. なぜパッチが必要なのか?(最大の目的)
Si4735の内部ROM(最初から焼き付けられているプログラム)には、基本的に「FM」と「通常のAM(中波・短波)」の受信機能しか入っていません。
しかし、自作ラジオの世界で最も有名なSSB(単一側波帯:アマチュア無線などで使われる方式)や、NBFM(ナローバンドFM)を受信したい場合、元々の機能だけでは処理できません。
そこで、Silicon Labs社(または有志)が開発した「SSB受信機能を後付けする追加プログラム(パッチデータ)」をSi4735に流し込むことで、チップをSSB対応レシーバーへと変身させることができます。
2. パッチデータの仕組み
しかし、自作ラジオの世界で最も有名なSSB(単一側波帯:アマチュア無線などで使われる方式)や、NBFM(ナローバンドFM)を受信したい場合、元々の機能だけでは処理できません。
そこで、Silicon Labs社(または有志)が開発した「SSB受信機能を後付けする追加プログラム(パッチデータ)」をSi4735に流し込むことで、チップをSSB対応レシーバーへと変身させることができます。
(1)揮発性のRAMに保存される:
パッチデータは、Si4735の内部にある「RAM(一時的なメモリ)」に書き込まれます。そのため、ラジオの電源を切るとパッチは消えてしまいます。
(2)起動するたびに送信する(パッチ当て):
電源を切ると消えるため、ホストマイコン(Arduinoなど)が起動するたびに、毎回 POWER_UP コマンドの後にパッチデータ(数キロバイトの16進数の塊)をI2C/SPIバス経由でSi4735に転送する必要があります。
これを「パッチを当てる」「パッチをダウンロードする」と呼びます。
3. コマンドとの関係
これを「パッチを当てる」「パッチをダウンロードする」と呼びます。
パッチ送信時には、通常の選局コマンドとは異なる専用のコマンド群が使われます。
0x15 PATCH_ARGS: パッチの引数を設定するコマンド。
0x16 PATCH_DATA: 実際のパッチデータ(バイナリ)を流し込むコマンド
4. 具体的な活用例
0x15 PATCH_ARGS: パッチの引数を設定するコマンド。
0x16 PATCH_DATA: 実際のパッチデータ(バイナリ)を流し込むコマンド
ArduinoでSi4735を制御する場合、世界的によく使われているpu2clr氏の「SI4735 Arduino Library」というライブラリがあります。
このライブラリには最初からSSB用のパッチデータ(patch_ssb_compressed.h など)が含まれており、関数を1行呼び出すだけでマイコンのフラッシュメモリからSi4735へ自動的にパッチを転送してくれる仕組みが整っています。
このライブラリには最初からSSB用のパッチデータ(patch_ssb_compressed.h など)が含まれており、関数を1行呼び出すだけでマイコンのフラッシュメモリからSi4735へ自動的にパッチを転送してくれる仕組みが整っています。
2.2.4 XOSCEN
コマンド0x01(POWER_UP)の引数(ARG1)に含まれる XOSCEN(Crystal Oscillator Enable) の目的は、「Si4735の内部水晶発振回路(オシレーター)を有効にするか、それとも外部のクロック信号を使用するか」を切り替えることです。
Si4735を正しく動作させるためには、基準となる正確な時計(基準クロック信号)が必要不可欠です。
その信号をどこから得るかを選択するスイッチが XOSCEN になります。 1. 2つの設定値とその意味
Si4735を正しく動作させるためには、基準となる正確な時計(基準クロック信号)が必要不可欠です。
その信号をどこから得るかを選択するスイッチが XOSCEN になります。 1. 2つの設定値とその意味
XOSCEN = 1(Use Crystal Oscillator / 水晶発振器を使用)
2.どちらに設定すべきかの判断基準
Si4735の RCLKピンとGNDの間に「32.768kHzの水晶振動子(クリスタル)」を接続している場合は、必ず 1 に設定します。
これにより、Si4735の内部にある発振回路が起動し、接続されたクリスタルを自力で発振させて基準クロックを作り出します。
XOSCEN = 0(外部クロック入力を使用)これにより、Si4735の内部にある発振回路が起動し、接続されたクリスタルを自力で発振させて基準クロックを作り出します。
マイコンや外部の専用発振器(オシレーターモジュールなど)から、RCLKピンへ直接「32.768kHzなどの四角い波形(デジタルクロック信号)」を流し込む場合は、0 に設定します。
この場合はSi4735内部の発振回路が不要になるため、オフにして消費電力を抑えます。
この場合はSi4735内部の発振回路が不要になるため、オフにして消費電力を抑えます。
自作回路やモジュール(基板)のハードウェア設計によって決まります。
(1)市販のSi4735モジュール(青い基板など)を使っている場合
(1)市販のSi4735モジュール(青い基板など)を使っている場合
ほとんどのモジュールには、あらかじめ黒や銀色の小さな「32.768kHz 水晶振動子」がチップのすぐそばにハンダ付けされています。
この場合は、XOSCEN = 1 に設定する必要があります。
(2)自分で回路を設計し、マイコンのPWMなどでクロックを生成して供給している場合
この場合は、XOSCEN = 1 に設定する必要があります。
クリスタルを省略してマイコンからRCLKピンへ信号を送っている場合は、XOSCEN = 0 に設定します。
2.2.5 FUNC
コマンド0x01(POWER_UP)の引数(ARG2)に含まれる FUNC(Function) の目的は、「Si4735を何のレシーバー(モード)として起動するかを決定すること」です
Si4735は、1つのチップでFMやAM(短波・長波含む)など、複数の異なる電波を処理できるマルチバンドラジオICです。
しかし、内部のDSP(デジタル信号処理プロセッサ)は、FM用のプログラムとAM用のプログラムを同時に動かすことができません。
そのため、起動するタイミング(POWER_UP)で「今からFMラジオとして動かすのか、それともAMラジオとして動かすのか」を明示的に指定する必要があります。
1.設定値(値の目的と割り当て)
Si4735は、1つのチップでFMやAM(短波・長波含む)など、複数の異なる電波を処理できるマルチバンドラジオICです。
しかし、内部のDSP(デジタル信号処理プロセッサ)は、FM用のプログラムとAM用のプログラムを同時に動かすことができません。
そのため、起動するタイミング(POWER_UP)で「今からFMラジオとして動かすのか、それともAMラジオとして動かすのか」を明示的に指定する必要があります。
1.設定値(値の目的と割り当て)
FUNC は4ビットのデータ(FUNC[3:0])で構成されており、主に以下の値を指定して目的のモードを選びます。
FUNC = 0(FM Receive)
2. モードを切り替えるときの手順
FUNC = 0(FM Receive)
チップをFMラジオモードで起動します。
日本のFM放送やワイドFM、海外のFM放送を受信したい場合はここを 0 に設定します。
FUNC = 1(AM Receive)日本のFM放送やワイドFM、海外のFM放送を受信したい場合はここを 0 に設定します。
チップをAMラジオモード(中波:MW、短波:SW、長波:LW共通)で起動します。
一般的なAMのニュース放送や、短波(SW)での海外国際放送、そしてSSBパッチを当ててアマチュア無線を聴く場合も、まずはこの 1(AMモード)を選択して起動します。
FUNC = 15(0x0F: Query Library ID)一般的なAMのニュース放送や、短波(SW)での海外国際放送、そしてSSBパッチを当ててアマチュア無線を聴く場合も、まずはこの 1(AMモード)を選択して起動します。
チップの内部情報を調べるための特殊モードです。
前のステップで解説した「PATCH(パッチ)」を適用する前に、チップの正確なファームウェアのバージョン(リビジョン)を確認する目的で使用されます。
前のステップで解説した「PATCH(パッチ)」を適用する前に、チップの正確なファームウェアのバージョン(リビジョン)を確認する目的で使用されます。
ラジオの操作パネルなどでユーザーが「FM」から「AM」へバンドを切り替えた場合、プログラムは単に設定を変えるだけでは切り替えられません。
(1)動いている現在のモードを一度 POWER_DOWN(コマンド0x11) して完全に終了させる。
(2)再び POWER_UP(コマンド0x01) を発行し、FUNC の値を書き換えて(0 から 1 へ、またはその逆)再起動する。
このように、Si4735の役割を根本から切り替えるための最も重要なマスター設定が FUNC です。
(2)再び POWER_UP(コマンド0x01) を発行し、FUNC の値を書き換えて(0 から 1 へ、またはその逆)再起動する。
2.2.6 OPMODE
コマンド0x01(POWER_UP)の引数(ARG2)に含まれる OPMODE(Output Mode) の目的は、「Si4735が処理したラジオの音声を、どの電気信号(インターフェース)の形式で外部に出力するかを決定すること」です。
Si4735はデジタル処理(DSP)で電波を音声に戻しますが、その音声を後ろに続くアンプやイヤホン、あるいは別のデジタル機器へどうやって引き渡すかをこの設定で切り替えます。
1. 設定値の種類と具体的な目的
Si4735はデジタル処理(DSP)で電波を音声に戻しますが、その音声を後ろに続くアンプやイヤホン、あるいは別のデジタル機器へどうやって引き渡すかをこの設定で切り替えます。
1. 設定値の種類と具体的な目的
OPMODE は1バイト(8ビット)のデータで、主に以下の値を指定して出力方法を選択します。
(1) OPMODE = 0x05(Analog Audio Output / アナログ音声出力)
2. なぜ指定が必要なのか?
(1) OPMODE = 0x05(Analog Audio Output / アナログ音声出力)
目的: チップ内部のDAC(D/Aコンバーター)を有効にし、一般的な「アナログの音声信号(L/R)」を直接ピン(LOUT / ROUT)から出力する設定です。
用途: 最もスタンダードな設定です。出力ピンに直接イヤホンを接続したり、一般的なオーディオアンプIC(LM386やNJM2073など)に繋いでスピーカーを鳴らしたい場合は、必ずこの 0x05 を指定します。
(2) OPMODE = 0x0F(Digital Audio Output / デジタル音声出力)用途: 最もスタンダードな設定です。出力ピンに直接イヤホンを接続したり、一般的なオーディオアンプIC(LM386やNJM2073など)に繋いでスピーカーを鳴らしたい場合は、必ずこの 0x05 を指定します。
目的: 音声データをデジタルのまま、I2S(Inter-IC Sound)などのデジタルオーディオ形式で出力する設定です。
用途: 高音質なオーディオシステムを作る場合に使用します。
外部の高性能な高級DAC(D/Aコンバーター)チップへデジタルデータのまま音声を送りたい場合や、Bluetoothオーディオ送信モジュールへデジタルで直接音声を入力したい場合などに選択します。
用途: 高音質なオーディオシステムを作る場合に使用します。
外部の高性能な高級DAC(D/Aコンバーター)チップへデジタルデータのまま音声を送りたい場合や、Bluetoothオーディオ送信モジュールへデジタルで直接音声を入力したい場合などに選択します。
Si4735の内部では、アナログ出力用とデジタル出力用で、それぞれ異なる回路やピンの機能が割り当てられています。
そのため、OPMODE を使ってあらかじめ出力ルートを指定しておかないと、チップはどのピンに音声信号を流せばよいか判断できず、音が鳴らない原因になってしまいます。
自作ラジオや市販のモジュールで「アンプとスピーカーを繋いで音を鳴らす」という一般的な設計であれば、基本的には 0x05(アナログ出力) を指定しておけば間違いありません。
そのため、OPMODE を使ってあらかじめ出力ルートを指定しておかないと、チップはどのピンに音声信号を流せばよいか判断できず、音が鳴らない原因になってしまいます。
自作ラジオや市販のモジュールで「アンプとスピーカーを繋いで音を鳴らす」という一般的な設計であれば、基本的には 0x05(アナログ出力) を指定しておけば間違いありません。
3 応答パラメータ
(FUNC = 1 [AM]の場合 ※は有りません)3.1 パラメータリスト
3.1.1 FUNC = 0,1の場合
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| STATUS | CTS | ERR | X | X | RSQINT | ※ RDSINT | X | STCINT |
3.1.2 FUNC = 15 の場合
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| STATUS | CTS | ERR | X | X | RSQINT | ※ RDSINT | X | STCINT |
| RESP1 | PN | |||||||
| RESP2 | FWMAJOR | |||||||
| RESP3 | FWMINOR | |||||||
| RESP4 | RESERVED | |||||||
| RESP5 | RESERVED | |||||||
| RESP6 | CHIPREV | |||||||
| RESP7 | LIBRARYID | |||||||
| RESP | Bit | Name | Function |
|---|---|---|---|
| 1 | 7:0 | PN | 部品番号の末尾2桁(16進数)。 |
| 2 | 7:0 | FWMAJOR | ファームウェアのメジャーリビジョン(ASCII)。 |
| 3 | 7:0 | FWMINOR | ファームウェアのマイナーリビジョン(ASCII)。 |
| 4 | 7:0 | RESERVED | 予約済み、様々な値。 |
| 5 | 7:0 | RESERVED | 予約済み、様々な値。 |
| 6 | 7:0 | CHIPREV | チップリビジョン(ASCII)。 |
| 7 | 7:0 | LIBRARYID | ライブラリのリビジョン(HEX)。 |
3.2 パラメータ
2種類の応答パラメータがあります。
応答の先頭パラメータ
応答(STATUSバイト)に含まれる各ビット(CTS, ERR, RSQINT, RDSINT, STCINT)は、「デバイスの現在の処理状態」や「各種割り込み(通知)の発生」をホストMCUに知らせる目的で設計されています。
STATUSバイトの信頼性:Si4735の仕様上、いくつかのコマンド送信時に返ってくるSTATUSバイトでは、CTS以外の割り込みビット(RSQINT, RDSINT, STCINTなど)がリアルタイムに更新されない場合があります。
正しい確認方法:正確な割り込みステータスを確認したい場合は、STATUSバイトを直接過信するのではなく、専用の割り込み確認コマンド(例:GET_INT_STATUS (0x14) コマンドなど)を明示的に発行して最新の状態を読み出すのが一般的なセオリーとなっています。
FUNC = 15 の RESP1〜7までのパラメータは5つ
正しい確認方法:正確な割り込みステータスを確認したい場合は、STATUSバイトを直接過信するのではなく、専用の割り込み確認コマンド(例:GET_INT_STATUS (0x14) コマンドなど)を明示的に発行して最新の状態を読み出すのが一般的なセオリーとなっています。
Si4735において、0x01 (POWER_UP) コマンドを FUNC = 15(Function 15 = Query Library ID) に設定して実行した際に返される各パラメータ(PN, FWMAJOR, FWMINOR, CHIPREV, LIBRARYID)は、「ICの正確なハードウェア世代、ファームウェア(内部プログラム)のバージョン、および適用されているライブラリのID」を識別する目的で設計されています。
この特別なモードは、主にSSB(単一側波帯)対応パッチや不具合修正パッチ(ファームウェアパッチ)をIC内部のRAMに流し込む前に、そのパッチが目の前のICと互換性があるかをホストMCU側で自動判定するために利用されます。
PN : 製品の型番(0x35 = Si4735)
FWMAJOR : 内部ソフトの主バージョン('4' = ASCII文字)
FWMINOR : 内部ソフトの副バージョン('0' = ASCII文字)
CHIPREV : 物理的な回路(ダイ)の世代(0x03 など)
LIBRARYID : 内部プログラム群の統合バージョン(0x06 などの数値)
これらを正しく受信・判別できれば、チップの初期認識フェーズのプログラミングは完璧です。
この特別なモードは、主にSSB(単一側波帯)対応パッチや不具合修正パッチ(ファームウェアパッチ)をIC内部のRAMに流し込む前に、そのパッチが目の前のICと互換性があるかをホストMCU側で自動判定するために利用されます。
PN : 製品の型番(0x35 = Si4735)
FWMAJOR : 内部ソフトの主バージョン('4' = ASCII文字)
FWMINOR : 内部ソフトの副バージョン('0' = ASCII文字)
CHIPREV : 物理的な回路(ダイ)の世代(0x03 など)
LIBRARYID : 内部プログラム群の統合バージョン(0x06 などの数値)
これらを正しく受信・判別できれば、チップの初期認識フェーズのプログラミングは完璧です。
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になります。
選局完了のタイミングを正確に把握する目的で使用します。
3.2.6 PN(Part Number)
目的:
デバイスの製品ファミリー(型番)を識別する。
解説:
チップがSi473xシリーズやその他のどの製品ファミリーに属しているかを示します。
ホストMCUが「今から制御しようとしている対象が本当に意図した製品(Si4735など)であるか」を誤認防止のためにチェックする目的で使用されます。
ホストMCUが「今から制御しようとしている対象が本当に意図した製品(Si4735など)であるか」を誤認防止のためにチェックする目的で使用されます。
3.2.7 FWMAJOR(Firmware Major Revision)
目的:
チップに内蔵(ROM焼き)されているメインファームウェアの「メジャーバージョン」を識別する。
解説:
アーキテクチャの変更や機能の大幅な追加を伴う世代を表します。
パッチファイルを適用する際、「このパッチはメジャーバージョン『X』専用」といった条件分岐をホストMCU側で行うために不可欠な情報です。
パッチファイルを適用する際、「このパッチはメジャーバージョン『X』専用」といった条件分岐をホストMCU側で行うために不可欠な情報です。
3.2.8 FWMINOR(Firmware Minor Revision)
目的:
内蔵ファームウェアの「マイナーバージョン(細かな修正版)」を識別する。
解説:
メジャーバージョンの枠内における、マイナーなバグ修正や最適化の段階を示します。
特定のマイナーリビジョンでのみ発生する挙動への対策(ワークアラウンド)をプログラムに組み込む際などに参照されます。
特定のマイナーリビジョンでのみ発生する挙動への対策(ワークアラウンド)をプログラムに組み込む際などに参照されます。
3.2.9 CHIPREV(Chip Revision)
目的:
シリコンダイ(半導体チップそのもの)の物理的なハードウェアリビジョンを識別する。
解説:
いわゆる「チップの世代(例:B20、C40、D60など)」を特定するための値です。
同じSi4735でも、世代によってSSBパッチの対応可否や必要なパッチファイル自体が全く異なるため、どの物理チップが基板に実装されているかを正確に把握する目的で使用されます。
同じSi4735でも、世代によってSSBパッチの対応可否や必要なパッチファイル自体が全く異なるため、どの物理チップが基板に実装されているかを正確に把握する目的で使用されます。
3.2.10 LIBRARYID(Library ID)
目的:
チップ内部に実装されている機能コンポーネント(ライブラリ)の固有IDを識別する。
解説:
FUNC = 15 を実行する最大の目的がこれです。Si4735の内部ROMには、ラジオの基本処理を行う「ライブラリ」が格納されています。
ホストMCUから送信するパッチファイルが、この内部ライブラリID(およびリビジョン)と完全に適合しているかを突き合わせ、安全にパッチを適用(パッチパワーアップ)するために利用されます。
ホストMCUから送信するパッチファイルが、この内部ライブラリID(およびリビジョン)と完全に適合しているかを突き合わせ、安全にパッチを適用(パッチパワーアップ)するために利用されます。
3.2.11 制御フローにおける実際の使われ方
一般的に、Si4735でSSB受信などを有効化する(パッチを当てる)際は、以下のようなシーケンスを組みます。
1.まず POWER_UP を FUNC = 15 で呼び出す。
2.返ってきた CHIPREV や LIBRARYID を読み取る。
3.ホストMCU内のプログラムで、「このチップはD60リビジョンだから、D60用のSSBパッチを適用できる」と判断する。
4.一度デバイスをパワーダウン(またはリセット)させる。
5.改めて通常の FUNC = 1 (AM) などのモードで POWER_UP し、適合するパッチデータを順次送信する。
このように、「適合しないパッチを誤って書き込んでICがフリーズしたり、異常な動作をしたりするのを防ぐためのガード(事前確認)」として、これら5つのパラメータが重要な役割を果たしています。
2.返ってきた CHIPREV や LIBRARYID を読み取る。
3.ホストMCU内のプログラムで、「このチップはD60リビジョンだから、D60用のSSBパッチを適用できる」と判断する。
4.一度デバイスをパワーダウン(またはリセット)させる。
5.改めて通常の FUNC = 1 (AM) などのモードで POWER_UP し、適合するパッチデータを順次送信する。
4 その他
4.1 コマンドの重要ステップと注意事項(Google AI (Gemini) の見解)
POWER_UP コマンドは単に電源をONにするだけでなく、ブートプロセスの初期化やパッチの適用状態を決定します。実装時に必ず守るべき制約は以下の通りです。
4.1.1 CTS (Clear to Send) の厳格な極性チェック
コマンド発行後、ステータスバイトのCTSビットがHigh(1)になるまで、後続の引数(ARG)やコマンドを送信してはいけません。
応答を待たずに次のデータを送ると、内部マイコンがフリーズするか、設定が無視されます。
応答を待たずに次のデータを送ると、内部マイコンがフリーズするか、設定が無視されます。
4.1.2 クロック設定(RCLK / Crystal)の不整合
ARG1 で外部参照クロック(RCLK)か、32.768kHzのクリスタル(XOSCEN)かを選択します。
基板上のハードウェア構成(水晶振動子の有無)と ARG1 のビット設定が一致していない場合、内部PLLがロックせず、POWER_UP が完了(CTSが復帰)しません。
基板上のハードウェア構成(水晶振動子の有無)と ARG1 のビット設定が一致していない場合、内部PLLがロックせず、POWER_UP が完了(CTSが復帰)しません。
4.1.3 機能切り替え(AM/FM/SSB)時の「必ずパワーダウン」原則
FMモードからAMモード、あるいはAMからSSBパッチモードへ機能を切り替える際、0x01コマンドを上書き発行することはできません。
一度必ず 0x11 (POWER_DOWN) を実行してデバイスを初期状態に戻してから、再度新しいモード用の引数を載せて 0x01 (POWER_UP) を実行する必要があります。
一度必ず 0x11 (POWER_DOWN) を実行してデバイスを初期状態に戻してから、再度新しいモード用の引数を載せて 0x01 (POWER_UP) を実行する必要があります。
4.2 もう少し踏み込んだ応用展開(Google AI (Gemini) の見解)
0x01 コマンドの特性を理解すると、以下のような高度なレシーバー制御や機能拡張が可能になります。
4.2.1 2段階POWER_UPによるSSB(シングルサイドバンド)パッチ適用
Si4735-D60などでアマチュア無線や短波のSSB(USB/LSB)を受信する場合、ホストマイコン(Arduinoなど)からパッチRAMデータを転送する必要があります。
この際、0x01 コマンドを2回に分けて利用する特殊なシーケンスを踏みます。
この際、0x01 コマンドを2回に分けて利用する特殊なシーケンスを踏みます。
1回目のPOWER_UP: PATCH ビットを「0」にして起動し、0x10 (GET_REV) コマンド等を用いてデバイスのライブラリリビジョン(内部ROMの世代)を読み取り、パッチファイルとの互換性を確認します。
パワーダウン: 一度 0x11 で落とします。
2回目のPOWER_UP: 今度は ARG1 の PATCH ビットを「1」にセットして 0x01 を送ります。これによりデバイスが「パッチ書き込み待機状態」になり、以降のパッチデータ転送(0x02 コマンドなど)を受け付けるようになります。
パワーダウン: 一度 0x11 で落とします。
2回目のPOWER_UP: 今度は ARG1 の PATCH ビットを「1」にセットして 0x01 を送ります。これによりデバイスが「パッチ書き込み待機状態」になり、以降のパッチデータ転送(0x02 コマンドなど)を受け付けるようになります。
4.2.2 アナログ/デジタルオーディオ出力の柔軟な切り替え
ARG2 の設定により、音声出力をアナログ(LINEOUT)にするか、デジタル(I2S / 左詰 / 右詰)にするかを指定できます。
展開例: POWER_UP 時にデジタル出力を選択し、後段のBluetoothオーディオトランスミッターICや高性能な外部DACに直接I2S結合することで、ノイズのないフルデジタル・ポータブルラジオへの展開が可能です。
展開例: POWER_UP 時にデジタル出力を選択し、後段のBluetoothオーディオトランスミッターICや高性能な外部DACに直接I2S結合することで、ノイズのないフルデジタル・ポータブルラジオへの展開が可能です。
4.3 デバッグ時のチェックリスト(Google AI (Gemini) の見解)
万が一 0x01 コマンド後にICが応答しない(I2Cバスハング、またはCTSがLowのまま)場合の確認手順です。
| チェック項目 | 原因と対策 |
|---|---|
| I2Cアドレス違い | SENピンの処理(GND接続=0x11、VCC接続=0x63)がファームウェアの指定アドレスと合致しているか確認します。 |
| リセットタイミング | 0x01 を送る前に、RSTピンを一定時間Lowにして完全にハードウェアリセットを完了させているか確認します。 |
| 電圧レベル | Si4735は3.3V駆動です。5V系のマイコン(Arduino Unoなど)と直結している場合、レベルシフタを挟まないと起動エラーや破損の原因になります。 |
4.4 その他Google AI (Gemini) の見解
Si4735の制御設計において、Google AI (Gemini) は「リソース制約の激しいマイコン環境でのメモリ管理」と「PU2CLRライブラリの積極的活用」の2点を強く推奨します。
4.4.1 メモリ消費に対する見解
SSBパッチを適用する場合、数キロバイト(約8KB〜16KB)のパッチデータをホストマイコンのフラッシュメモリ(PROGMEM)に保持する必要があります。
Arduino Nano (ATmega328P) などの環境では、このパッチデータだけでメモリの大部分を圧迫します。
Geminiとしては、パッチ運用を前提とするなら、初期設計段階からESP32やRaspberry Pi Picoなどのメモリに余裕がある3.3V系マイコンへのリプレイス、あるいは外部EEPROM/SDカードからのパッチ読み込み手法を選択することを推奨します。
Arduino Nano (ATmega328P) などの環境では、このパッチデータだけでメモリの大部分を圧迫します。
Geminiとしては、パッチ運用を前提とするなら、初期設計段階からESP32やRaspberry Pi Picoなどのメモリに余裕がある3.3V系マイコンへのリプレイス、あるいは外部EEPROM/SDカードからのパッチ読み込み手法を選択することを推奨します。
4.4.2 抽象化ライブラリの推奨
0x01 コマンドのビット操作(ARG の論理和合成など)をスクラッチで書くと、ビットシフトのミスによるバグが多発します。
すでに世界中で実績のある pu2clr/SI4735 GitHubリポジトリ などのオープンソースライブラリを使用することで、 POWER_UP に伴う煩雑なシーケンスやCTSフラグのポーリング処理が内部関数に隠蔽(抽象化)され、開発効率と堅牢性が劇的に向上するというのがAIの合理的な見解です。
すでに世界中で実績のある pu2clr/SI4735 GitHubリポジトリ などのオープンソースライブラリを使用することで、 POWER_UP に伴う煩雑なシーケンスやCTSフラグのポーリング処理が内部関数に隠蔽(抽象化)され、開発効率と堅牢性が劇的に向上するというのがAIの合理的な見解です。
4.5 疑問にお答え(Google AI (Gemini) の見解)
4.5.1 FM->SSB切り替え方法
質問
FMからSSBへ変更する場合は、2.1項の内容 0x11,0x01, その後を教えて下さい
見解
FMモードからSSBモードへ変更(パッチ適用)する場合の、0x11(パワーダウン)および 0x01(パワーアップ)以降の具体的な制御シーケンスは以下の通りです。
SSBへの切り替えは、パッチデータを正しく内部RAMに転送するための厳格な手順(ハンドシェイク)が必要です。 FMからSSBへの切り替え全シーケンス
各ステップの詳細と送信データ
SSBへの切り替えは、パッチデータを正しく内部RAMに転送するための厳格な手順(ハンドシェイク)が必要です。 FMからSSBへの切り替え全シーケンス
FMが動作している状態から、以下の手順を順番に実行します。【FM動作中】
│
1. [0x11] POWER_DOWN コマンド送信
│
2. RST(リセット)ピンをLow→High(ハードウェア再起動)
│ 3. [0x01] POWER_UP コマンド送信(※ARG1のPATCHビットを「1」にする)
│
4. CTSフラグのクリアを待つ(0x01の処理完了待ち)
│
5. SSBパッチデータ(数キロバイト)を分割送信
│
6. [0x00] ステータス確認(パッチが正常適用されたかチェック)
│
7. [0x12] SET_PROPERTY コマンドでSSB用パラメータ設定(BFOなど)
│
【SSB受信開始】
│
1. [0x11] POWER_DOWN コマンド送信
│
2. RST(リセット)ピンをLow→High(ハードウェア再起動)
│ 3. [0x01] POWER_UP コマンド送信(※ARG1のPATCHビットを「1」にする)
│
4. CTSフラグのクリアを待つ(0x01の処理完了待ち)
│
5. SSBパッチデータ(数キロバイト)を分割送信
│
6. [0x00] ステータス確認(パッチが正常適用されたかチェック)
│
7. [0x12] SET_PROPERTY コマンドでSSB用パラメータ設定(BFOなど)
│
【SSB受信開始】
各ステップの詳細と送信データ
ステップ1 現在のモードを終了コマンド:
0x11 (POWER_DOWN) を送信します。注意点: これによりデバイスは待機状態に戻ります。
ステップ2 ハードウェアリセット(推奨)処理:
Si4735の RST ピンを数ミリ秒間 Low に落とした後、再び High に戻します。
理由: 内部状態を完全にクリアし、パッチ書き込みエラーを防ぐために実務上非常に重要です。
ステップ3 パッチ書き込みモードで起動コマンド:
理由: 内部状態を完全にクリアし、パッチ書き込みエラーを防ぐために実務上非常に重要です。
0x01 (POWER_UP) を送信します。引数の指定:ARG1 の PATCH ビット(Bit 7)を必ず「1」 に設定します。
ARG1 の FUNC ビット(Bit 3-0)は「1」(AM/SW/SSBコンポーネント)に設定します。
※この設定により、ICは「パッチデータを受け付ける特別な待機状態」になります。
ステップ4 CTSの確認処理:
ARG1 の FUNC ビット(Bit 3-0)は「1」(AM/SW/SSBコンポーネント)に設定します。
※この設定により、ICは「パッチデータを受け付ける特別な待機状態」になります。
0x01 を送った後、ステータスバイトを読み取り CTS ビット(Bit 7)が「1」 になるまでループで待ちます。
ステップ5 パッチデータの転送(最重要)処理:
用意したSSBパッチデータ(通常は多数のブロックに分割されたバイナリ配列)を順番に送信します。
送信方法:各ブロックの先頭には、パッチ転送コマンドである 0x02 (SET_PROPERTY、またはパッチ専用書き込み形式) が含まれます。
1ブロック(例:8〜32バイト程度)を送信するごとに、必ずCTS(Clear to Send)が「1」になるのを確認してから 次のブロックを送信してください。これを怠るとデータが溢れてパッチ適用に失敗します。
ステップ6 パッチ適用の成否確認コマンド:
送信方法:各ブロックの先頭には、パッチ転送コマンドである 0x02 (SET_PROPERTY、またはパッチ専用書き込み形式) が含まれます。
1ブロック(例:8〜32バイト程度)を送信するごとに、必ずCTS(Clear to Send)が「1」になるのを確認してから 次のブロックを送信してください。これを怠るとデータが溢れてパッチ適用に失敗します。
パッチデータをすべて送り終えたら、0x00 コマンド(またはステータス読み込み)を実行します。
確認内容: 応答のステータスバイトを確認し、エラーフラグ(ERR)が立っておらず、正しくパッチが起動しているかを確認します。
ステップ7 SSB用のプロパティ設定コマンド:
確認内容: 応答のステータスバイトを確認し、エラーフラグ(ERR)が立っておらず、正しくパッチが起動しているかを確認します。
0x12 (SET_PROPERTY) を使用します。
設定内容:プロパティ 0x0101 を使用して、SSBの帯域幅(フィルター幅:1kHz〜4kHzなど)を設定します。
プロパティ 0x0102 を使用して、BFO(うなり発振器)の周波数オフセット(USB/LSBの微調整)を設定します。
これにより、モガモガした声からクリアな音声に同調させることができます。
設定内容:プロパティ 0x0101 を使用して、SSBの帯域幅(フィルター幅:1kHz〜4kHzなど)を設定します。
プロパティ 0x0102 を使用して、BFO(うなり発振器)の周波数オフセット(USB/LSBの微調整)を設定します。
これにより、モガモガした声からクリアな音声に同調させることができます。
更新日
2026/06/21 16:56 管理者 平林 剛
