はじめに
共立エレショップさんでは、数年前からほぼ毎週火曜日に、幾つかの特価蔵出し品を商品ラインナップに加えていて、すでに発売終了となったものもありますが、今はかなりの数の品揃えとなっているので見てみると面白いと思います。
但し購入にあたっては注意が必要で、特価蔵出し品は安価ではありますが、返品不可、ディスコン品のため今回限りの売り切りであったり、ノンサポートでほとんどの場合はマニュアルもありません(簡単な説明資料がある場合もあります)。完成品の使用についてはさほど問題無いと思いますが、部品単体の場合は情報収集して使いこなす必要があります。今回はこの蔵出し特価品として発売されていたFM/AMチューナモジュールを動かしてみたのでご紹介します。
購入したFM/AMチューナモジュール(以下モジュール)には、Skyworks Solutions製のSi4730が実装されているとのことで、このICについてSkyworksのサイトで調べてみるとディスコン品ではありますが、幸いにもデータシートやアプリケーションノートをダウンロードすることができます。
Si4730の制御方式について、データシートを眺めてみると、2-Wire(I2C)、3-Wire、SPIの3種類の方式に対応しているようです。ただし、今回購入したモジュールは、同梱されていた共立エレショップさんの説明資料によると3-Wire専用となっています。I2Cであれば、ArduinoのWireライブラリが使えそうですが、Si4730用の3-wireについてはライブラリが見当たらなかったので、先人の力を借りるべくSi4730の制御例をWebで調べてみたところ、I2Cでのコントロール方法が記載されているWebサイトは幾つかあるのですが、3-Wireでの制御について解説しているWebサイトを見つけることができませんでした。
このままでは罪部品(購入しただけの未昇華部品)となってしまいます。部品に罪はありません。データシートとアプリケーションノート(AN332)を何度も読み返しながらようやく理解できた内容を記事にまとめることで昇華して頂くことにしました。

そうそう、このシールドカンで覆われた武骨なモジュールは、真偽不明ではありますがネット上ではDENONのコンポ(?)に搭載されていたチューナモジュールとの記述がありましたよ。使いこなすことができれば、そこそこ良い音質でラジオを聴くことが出来るかもしれませんね!
以下の内容では、2026年2月時点でSkyworks社のWebサイトからダウンロードできるデータシートやアプリケーションノートのページ番号を記載している部分があります。Rev違いの資料ではページ番号が異なっているかもしれませんがご了承下さい。
Si4730を3-Wire serialモードで使う方法
モジュールを3-Wireで使用する為にはSi4730の3-wireモードを理解することが必要であり、ポイントは次の2点に集約されます。
- 通信方式を3-Wire modeに設定する。
- レジスタへの書き込みと読み込み手順の理解。
3-Wire serialモードに設定
まず始めに、GPO1とGPO2端子を使用して3-Wire modeに設定する必要があります。
データシートの26ページに記載の通り、Si4730は/RSTの立ち上がり時における2端子の状態によって、2-Wire mode または3-Wire mode のどちらのモードを使用するのかが決定されます。
| Bus Mode | GPO1 | GPO2 |
| 2-wire | 1 | 0 |
| 3-Wire | 0 (must drive) | 0 |
GPO2端子については、IC内部でPull-Downされているとデータシートに記載があることから、モジュールの1番端子GPO2/INT端子は未接続で良いことがわかります。
また、GPO1端子についてはどうかというと、IC内部でPull-UpされているためLowにする必要がありますが、モジュール端子として外部に出てきていないことから判断すると、モジュール内部でハードウェア的にGNDに接続されてると推測できます。
なお、データシートの6ページに記載されているBus Mode選択時の電源とリセットおよびGPOのタイミング特性を確認すると、リセット解除タイミング後、GIO1,2はホールド時間として30ns以上状態を保持する必要がありますが、今回のモジュールを使用するに当たっては、これらの2端子は上記の通りハードウェア的に決められているため、あまり気にする必要はないと言えます。

3-Wireでのレジスタへの書き込みと読み込み手順
Si4730を3-Wire方式を使用した場合の制御手順は、アプリケーションノート(AN332)の126ページから記載があります。ここで3-Wireとは、クロック(SCLK)、データ(SDIO)、イネーブル(/SEN)の3線(3端子)のことで、以下の機能を有します。
- /SEN:LOWレベルを入力することで、マイコンはSi4730とデータ信号の入出力が可能となります。
- SDIO:マイコンとSi4730間のデータ信号を双方向で行う端子です。
- SCLK:データを読み書きするタイミングを決めるクロック信号を入力する端子です。マイコンはクロック立ち上り時にデータをSi4730へ書き込んだり(Write)、読み込んだり(Read)することができます。
Si4730へのデータ書き込み
Si4730へ受信周波数などの設定値をレジスタアドレスに書き込む場合、特定のレジスタアドレスに制御コマンドと引数を書き込む必要があります。
具体的には、アドレス”A0h”の上位8ビットに制御コマンド(CMD)を書き込み、”A0h”の下位8ビットおよび”A1h”から”A3h”に引数(ARG1~ARG7)を書き込むことでSi4730をコントールします。

ここで注意点としては、CMDが2つ以上の引数(ARG2、・・・、ARG7)を持つ場合で、“A1h”以降の引数を書き込んだ後に、CMDとARG1を最後に書き込む必要があります。
引数は2つ合わせて16bitとして扱いますので、ARG2とARG3を連続した16bit、ARG4とARG5を連続した16bit、ARG6とARG7を連続した16bitとして扱い各アドレスに書き込むことになります。
同様に、CMDもARG1と合わせた16bitとして”A0h”に書き込むことになります。
また、CMDがARG1とARG2の2つの引数を持つ場合は、ARG3は引数ではありませんが、ARG2と対をなすARG3も書き込む必要があり、ARG3を0x0000と設定してARG2と合わせた16bitを書き込むことが必要です。ARG4以降は書き込む必要はありません。
レジスタにデータを書き込む際の3-Wireの制御として次のようなシーケンスとなります。
- /SENをHigh->Lowにします。
- レジスタアドレス”A1h”と書き込みフラグビットで構成されるコントロールワードの9bitを送ります。続けて引数(ARG2、ARG3)の16bitを書き込みます。
- ARG4以降がある場合、同様に、”A2h”以降のコントロールワード9bitを送る。続けて引数(ARG3、ARG4)の16bitを書き込みます。なお、A1h~A3hの書き込む順番は任意です。
- “A0h”のコントロールワードの9bitを送ります。続けてCMD+引数ARG1の16bitを書き込みます。
データを送るシーケンスは以上となります。 - データはクロックの立ち上がり時にSi4730に書き込まれます。例えば”10″の2bitを書き込む場合は、SDIOをHighにした状態で、SCLKをHighに立ち上げし一定時間後Lowに立ち下げます。次に、SDIOをLowに立ち下げた状態で、SCLKをHighに立ち上げし一定時間後Lowに立ち下げるような動作となります。
- 9bit+16bitの合計25bitの送信が完了したら、/SENをLow->Highします。
- 最後に、処理終了させる動作として1クロック入力します。
Si4730へのデータ書き込み
Si4730の各種レジスタ設定値を読込む場合は、CMDを書き込みんだ後に、Si4730からの応答として”A8h”から”AFh”アドレスに格納されているRESPONSE1~RESPONSE15のレジスタ値を読み取ることになります。

レジスタからデータを読み込む際の3-Wireの制御として次のようなシーケンスとなります。
- /SENをHigh->Lowにする。
- 書き込み時と同様に、レジスタアドレス”A1h”と書き込みフラグビットで構成されるコントロールワードの9bitを送ります。続けて引数(ARG2、ARG3)の16bitを書き込みます。さらに複数の引数がある場合も同様に全て書き込みます。
- “A0h”のコントロールワードの9bitを送ります。続けてCMD+引数ARG1の16bitを書き込みます。
CMDの送信が終了するとレスポンスに返ってきた値を読み取るシーケンスに移ります。 - SDIO端子が入力から出力に切り替わる必要がある半クロック経過後からデータの読み取りが可能になります。
- “A8h”アドレスのSTATUSの9bitとRESPONSE1の8bitを合わせて16bitを読み取ります。データ読み取りの場合は、アドレスは読み取り開始アドレスのみの指定で良く、連続して”A9h”のRESPONSE2とRESPONSE3も読み込み可能です。以降”AAh”~”AFh”も同様に続けて読み取ることができます。
- 必要なデータの受信が完了したら、/SENをLow->Highします。
- 最後に、処理終了させる動作として1クロック入力します。
以上を踏まえて、モジュールに対して実際にFM周波数を受信する場合の具体的なコマンドについて見ていきたいと思います。FM受信動作時のコマンドの詳しい説明はアプリケーションノートの14ページ以降に記載されています。
FM周波数を設定してラジオ局を受信する
ICのデフォルトセッティングを使用する場合の必要最低限のコマンド操作は、アプリケーションノートの146ページ以降のフローチャートに従うと次の通りです。
Power_UP コマンド(command 0x01)を送信する
起動モードのパラメータ設定を以下の通りです。
- XOSCEN:Use crystal oscillator ※モジュールには水晶振動子が実装されています。
- FUNC[3:0]:FM Receive
- OPMODE[7:0]:Analog audio outputs (LOUT/ROUT)
- GPO2OEN:GPO2OEN bit enabled ※フローチャートにはEnabledと記載があります。
従いまして、コマンドと引数はこのようになります。
- CMD:”00000001b”
- ARG1:”01000000b”
- ARG2:”00000101b”
- ARG3:”00000000b” ※引数では無いがARG2と合わせて書き込みは必要。
Power_UP コマンド送信後は、次のコマンドの受信状態になるまで少し時間が必要ですので、STATUSレジスタを読み取りCTSビットがセットされていることを確認するか、一定時間経過した後に次のコマンドを送信する必要があります。




GET_REVコマンド (command 0x10) を送信する
ChipのFW rev、Comp revが正しいかを確認する。確認のみですので、「実行する、しない」は任意で大丈夫です。
従いまして、コマンドと引数はこのようになります。
- CMD:”00010000b”
- ARG1:”00000000b” ※引数では無いがCMDと合わせて書き込みは必要。
モジュールにはSi4730-D60が搭載されているのでレスポンスとして返ってくる値はこのようになります。
- RESP2:”0x01″
- RESP3:”0x0E” ※ASCIIコードで”0x1E”=”30″
- RESP6:”0x03″
- RESP7:”0x0C” ※ASCIIコードで”0x3C”=”60″
Set FM Tune Frequency (command 0x20) を送信する
ARG1は下位2ビットを使用しているようですが、”0x00″でよさそうです。ARG2のFrequency High ByteとARG3のFrequency Low Byteで周波数を設定、ARG4のAntenna Tuning Capacitorは自動チューニング設定の”0x00″で良さそうです。
従いまして、コマンドと引数はこのようになります。
- CMD:”00100000b”
- ARG1:”00000000b”
- ARG2:”00011111b” ※80.2MHzの場合、8020(0x1F54)×10KHz
- ARG3:”01010100b” ※80.2MHzの場合、8020(0x1F54)×10KHz
ここまでのコマンドを入力するれば、FM周波数を受信することができますが、受信状態をチェックするには引き続き下記のコマンド操作を行います。
Use GET_INT_STATUS (command 0x14) を送信する
周波数設定には少し時間がかかるようで、設定が完了したかどうかを確認するためにSTATUSを読み込んで、STCビットがセットされているかを確認する。
- CMD:”00010100b”
- ARG1:”00000000b” ※引数では無いがCMDと合わせて書き込みは必要。
レスポンスとして最下位ビットのSTCINTが”1″となるまでCMD送信して確認を繰り返します。

Call FM_TUNE_STATUS With INTACK bit set (command 0x22)を送信する
このコマンドは、現在の周波数、RSSI、SNR、そしてアンテナ同調用のキャパシタンス値(0〜191)を返します。
- CMD:”00100010b”
- ARG1:”00000000b”
ARG1 の INTACK ビットがセットされている場合、このコマンドは STCINT 割り込みビットをクリアします。
CTS ビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になるとセットされます。
レスポンスとしては、RESP4にRSSIの値が、RESP5にSNRの値が返ってきます。
おわりに
3-Wireでの使用方法の具体例がWebサイト上に記事が無かったため、データシートとアプリケーションノートの注意深く読み解き、Arduinoスケッチで実装してFM放送を聴くところまでできました。AM放送の受信も同様と思います。今回はここまでとして、AMが受信できるArduinoスケッチができましたら、またご紹介できればと思います。
最後にシールドカンを空けてみたので中身の写真をご紹介して終わりにします。
見たところ、表面と裏面を接続するホールが無いことから片面基板のようです。表面で配線できないため、数か所、2125サイズや3216サイズといった大きめのチップジャンパで配線接続し、ジャンパの下部も配線を数本通せるように工夫していますね。今となっては古典テクニックになるのでしょうが、こういうやり方もあるんだなと覚えておいても損はしないでしょう。


コメント