この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x10. GET_REV 概要
部品番号、チップリビジョン、ファームウェアリビジョン、パッチリビジョン、およびコンポーネントリビジョン番号を返します。
CTSビット(およびオプションの割り込み)がセットされると、コマンドは完了します。このコマンドは、
電源投入モードのときのみ送信できます。
使用可能環境:全バージョン
コマンド引数:なし
応答バイト数:15バイト(Si4705/06のみ)、8バイト(Si4704/3x)
CTSビット(およびオプションの割り込み)がセットされると、コマンドは完了します。このコマンドは、
電源投入モードのときのみ送信できます。
使用可能環境:全バージョン
コマンド引数:なし
応答バイト数:15バイト(Si4705/06のみ)、8バイト(Si4704/3x)
2 コマンドパラメータ
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
3 応答パラメータ
(FUNC = 1 [AM]の場合 ※は有りません)3.1 パラメータリスト
| 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 | PATCHH | |||||||
| RESP5 | PATCHL | |||||||
| RESP6 | CMPMAJOR | |||||||
| RESP7 | CMPMINOR | |||||||
| RESP8 | CHIPREV | |||||||
| ※RESP10 | Reserved | |||||||
| ※RESP11 | Reserved | |||||||
| ※RESP12 | Reserved | |||||||
| ※RESP13 | Reserved | |||||||
| ※RESP14 | Reserved | |||||||
| ※RESP15 | Reserved | |||||||
| RESP | Bit | Name | Function |
|---|---|---|---|
| 1 | 7:0 | PN | 部品番号の末尾2桁(16進数)。 |
| 2 | 7:0 | FWMAJOR | ファームウェアのメジャーリビジョン(ASCII)。 |
| 3 | 7:0 | FWMINOR | ファームウェアのマイナーリビジョン(ASCII)。 |
| 4 | 7:0 | PATCHH | パッチIDの上位バイト(16進数)。 |
| 5 | 7:0 | PATCHL | パッチIDの下位バイト(16進数)。 |
| 6 | 7:0 | CMPMAJOR | コンポーネントのメジャーリビジョン(ASCII)。 |
| 7 | 7:0 | CMPMINOR | コンポーネントのマイナーリビジョン(ASCII)。 |
| 8 | 7:0 | CHIPREV | チップリビジョン(ASCII)。 |
| ※10 | 7:0 | Reserved | |
| ※11 | 7:0 | Reserved | |
| ※12 | 7:0 | Reserved | |
| ※13 | 7:0 | Reserved | |
| ※14 | 7:0 | Reserved | |
| ※15 | 7:0 | Reserved |
3.2 パラメータ
Si4735の「0x10 (GET_REV)」コマンドは、デバイスの製品番号や内部ファームウェア、チップの世代(リビジョン)などの詳細な識別情報を取得するためのコマンドです。
ご質問の各ステータス(応答バイト)の目的は、現在チップがどのバージョンのハードウェアとファームウェア(修正パッチを含む)で動作しているかを正確に特定することにあります。
それぞれの具体的な役割は以下の通りです。
ご質問の各ステータス(応答バイト)の目的は、現在チップがどのバージョンのハードウェアとファームウェア(修正パッチを含む)で動作しているかを正確に特定することにあります。
それぞれの具体的な役割は以下の通りです。
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 PATCHH / PATCHL
パッチID・上位バイト / 下位バイト
目的:
適用されている修正パッチ(Patch)の識別番号(ID)を確認するための項目です。
解説:
Si4735は、起動後に外部のマイコンからパッチファイル(RAMへの修正データ)を書き込むことで、機能を拡張したり不具合を修正したりできます。
PATCHH と PATCHL の2バイト(16ビットHEXデータ)を合わせることで、現在どのパッチが正常に適用されているかを検証できます。
パッチを適用していない場合は 0x0000 になります。
PATCHH と PATCHL の2バイト(16ビットHEXデータ)を合わせることで、現在どのパッチが正常に適用されているかを検証できます。
パッチを適用していない場合は 0x0000 になります。
3.2.10 CMPMAJOR / CMPMINOR
コンポーネント・メジャーリビジョン / マイナーリビジョン
目的:
チップ内部の内部コンポーネント(ライブラリ)のバージョンを確認するための項目です。
解説:
ファームウェアを構成する主要な機能ブロック(コンポーネント)のバージョンをASCIIコードで返します。
シリコン内部に焼き付けられている機能のビルド世代を特定するために使用され、特定の機能がサポートされているかをソフトウェア側で判断する基準になります
シリコン内部に焼き付けられている機能のビルド世代を特定するために使用され、特定の機能がサポートされているかをソフトウェア側で判断する基準になります
3.2.11 CHIPREV
コンポーネント・メジャーリビジョン / マイナーリビジョン
目的:
IC(シリコンダイ)自体のハードウェアとしての製造世代(リビジョン)を確認するための項目です。
解説:
Si4735には「-B20」や「-C40」といった複数のダイ・リビジョン(世代)が存在します。
この項目を読み取ることで、ICがどのハードウェア世代であるかを識別できます(通常はASCIIコードで表されます)。
この項目を読み取ることで、ICがどのハードウェア世代であるかを識別できます(通常はASCIIコードで表されます)。
3.2.12 どのような場面で役立つか
主にホストマイコン側の制御プログラム(ドライバ)の自動判別に使用されます。
1.パッチの適用確認:パッチ送信後に、正しくパッチが反映されたかを PATCHH/L で検証する。
2.互換性の維持:CHIPREV や CMPMAJOR を見て、古いチップ用と新しいチップ用でコマンドの発行処理をマイコン側で自動的に切り替える。
2.互換性の維持:CHIPREV や CMPMAJOR を見て、古いチップ用と新しいチップ用でコマンドの発行処理をマイコン側で自動的に切り替える。
4 その他
4.1 コマンドの重要ステップと注意事項(Google AI (Gemini) の見解)
0x10 コマンドは引数(ARG)を持たず、コマンドバイトを送信した後に最大9バイト(ステータス1バイト + レスポンス8バイト)のデータを読み出します。実装時およびデバッグ時の注意点は以下の通りです。
4.1.1 CTS(Clear to Send)の待機タイミング
コマンド(0x10)を送信した後、レスポンスデータを読み出す前に、ステータスバイトのCTSビットが「1」になるのを必ず確認(ポーリング)してください。0x10 はデバイス内部のROM/RAM情報を参照するため、わずかな処理時間を要します。
CTSを無視して即座にデータを読み出すと、古いステータスや不正な(0xFF や 0x00 などの)リビジョン情報が返ってきます。
CTSを無視して即座にデータを読み出すと、古いステータスや不正な(0xFF や 0x00 などの)リビジョン情報が返ってきます。
4.1.2 パワーアップ状態の必須(最大の罠)
0x10 コマンドは、デバイスが 0x01 (POWER_UP) された状態でなければ実行できません。パワーダウン状態(0x11 実行後や、電源投入直後の初期状態)で 0x10 を送信しても、I2Cバスがハングアップするか、無効なステータスしか返りません。
「デバイスの素性を知るためにまず叩く」という使い方はできず、必ず一度何らかのモード(AMやFM)で起動した後に実行する必要があります。
「デバイスの素性を知るためにまず叩く」という使い方はできず、必ず一度何らかのモード(AMやFM)で起動した後に実行する必要があります。
4.1.3 チップの「偽物(クローン)」や「世代(D60など)」の判別
レンスポンスの第2バイト(PN: Part Number)や第5〜6バイト(FWREV: Firmware Revision)をチェックすることで、実装されているICが本当に Si4735 なのか、ピン互換の安価な別チップ(Si4730など)なのか、あるいは正常に動作しない模倣品なのかをソフトウェア的に識別できます。
4.2 もう少し踏み込んだ応用展開(Google AI (Gemini) の見解)
0x10 コマンドは単なる情報表示だけでなく、堅牢なシステム設計や動的なファームウェア制御に活用できます。
4.2.1 パッチ適用の自動互換性チェック(安全装置)
Si4735でSSB(シングルサイドバンド)を聴くためのパッチデータは、チップの「コンポーネントリビジョン(CMPREV)」や「チップリビジョン(CHIPREV)」の世代(一般的には D60 世代以降など)に厳格に依存します。
展開例: マイコンの起動時に 0x10 を実行し、取得した FWREV や CMPREV がパッチの対応バージョンと一致するかをプログラム内で自動判定します。
もし不一致(例:古いC40世代など)であれば、フリーズや破損を防ぐために「SSBパッチの転送プロセスを安全にスキップ(または警告表示)する」といったインターロック(安全回路)を実装できます。
展開例: マイコンの起動時に 0x10 を実行し、取得した FWREV や CMPREV がパッチの対応バージョンと一致するかをプログラム内で自動判定します。
もし不一致(例:古いC40世代など)であれば、フリーズや破損を防ぐために「SSBパッチの転送プロセスを安全にスキップ(または警告表示)する」といったインターロック(安全回路)を実装できます。
4.2.2 動的なGUI表示(インテリジェントな起動画面)
自作ラジオのLCDやOLEDディスプレイに、固定テキストではなく、ICから直接吸い上げた本物のファームウェアバージョンを表示させます。
これにより、基板製造時のチップ選別チェックが容易になるほか、自作ガジェットとしての所有欲を満たすインテリジェントなシステム情報画面(SysInfo)を構築できます。
これにより、基板製造時のチップ選別チェックが容易になるほか、自作ガジェットとしての所有欲を満たすインテリジェントなシステム情報画面(SysInfo)を構築できます。
4.3 レンスポンスデータの構造(参考)
0x10 コマンドを送信した後に返ってくる主要なデータ構造です。
| バイト位置 | 名称 | 意味・役割 |
|---|---|---|
| Byte 0 | STATUS | CTSフラグやエラーフラグ(ERR)が含まれる。 |
| Byte 1 | PN | パートナンバー。Si4735の場合は「35(0x23)」が返る。 |
| Byte 2 | FWREV (H) | ファームウェア・リビジョンの上位バイト。 |
| Byte 3 | FWREV (L) | ファームウェア・リビジョンの下位バイト。 |
| Byte 4 | PATCH (H) | 現在適用されているパッチIDの上位バイト(未適用時は0)。 |
| Byte 5 | PATCH (L) | 現在適用されているパッチIDの下位バイト(未適用時は0)。 |
| Byte 6 | CMPREV | コンポーネント・リビジョン(内部モジュールの世代)。 |
| Byte 7 | CHIPREV | チップのダイ(シリコン)リビジョン。 |
4.4 その他Google AI (Gemini) の見解
Si4735のファームウェア開発において、Google AI (Gemini) は「ハードウェアの不確実性を排除するためのファースト・バリデーション(最初の生存証明)」として 0x10 コマンドを位置付けています
4.4.1 市場のサプライチェーンリスクへの対策:
近年、ECサイト等で流通しているSi4735(特にSSB対応を謳うD60チップ)の中には、安価なSi4730の印字を書き換えた不正品や、古いリビジョンのリマーク品が混入しているケースが報告されています。
Geminiの見解としては、個人の電子工作であっても、「POWER_UP直後に必ず0x10を叩き、PN=35、かつ期待するリビジョンであるかをシリアルモニターに出力するデバッグコード」を初期段階で組み込むべきです。
これにより、受信できない原因が「プログラムのバグ」なのか「IC自体の仕様違い(偽物)」なのかを瞬時に切り分けることができ、無駄なデバッグ時間を劇的に削減できます。
Geminiの見解としては、個人の電子工作であっても、「POWER_UP直後に必ず0x10を叩き、PN=35、かつ期待するリビジョンであるかをシリアルモニターに出力するデバッグコード」を初期段階で組み込むべきです。
これにより、受信できない原因が「プログラムのバグ」なのか「IC自体の仕様違い(偽物)」なのかを瞬時に切り分けることができ、無駄なデバッグ時間を劇的に削減できます。
4.4.2 パッチ状態の動的監視(診断機能)
SSBパッチの送信(0x02 コマンド群)が完了した後に再度 0x10 を実行すると、PATCH バイト(Byte 4-5)の値が 0x0000 から「適用したパッチ固有のID」へと変化します。
Geminiは、パッチの成否を単に送信完了の成否だけで判断するのではなく、「0x10を再度叩いて、内部のPATCHレジスタが意図したIDに書き換わっているかまでを確認するシーケンス」にすることで、ノイズや通信エラーによるパッチの化け(化けたまま起動すると異音や無音になる)を確実に検知する高信頼性システムが実現できると評価します。
Geminiは、パッチの成否を単に送信完了の成否だけで判断するのではなく、「0x10を再度叩いて、内部のPATCHレジスタが意図したIDに書き換わっているかまでを確認するシーケンス」にすることで、ノイズや通信エラーによるパッチの化け(化けたまま起動すると異音や無音になる)を確実に検知する高信頼性システムが実現できると評価します。
