この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 コマンド 0x12. SET_PROPERTY 概要
全般 2.2 プロパティー概要 に示されているプロパティを設定します。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できるときに設定されます。
このコマンドは、電源投入モードのときのみ送信できます。
143ページの図25「CTSおよびSET_PROPERTYコマンドのtCOMPタイミングモデル」と144ページの表31「FM受信機のコマンドタイミングパラメータ」を参照してください。
使用可能環境:全機種
コマンド引数:5個
応答バイト数:なし
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できるときに設定されます。
このコマンドは、電源投入モードのときのみ送信できます。
143ページの図25「CTSおよびSET_PROPERTYコマンドのtCOMPタイミングモデル」と144ページの表31「FM受信機のコマンドタイミングパラメータ」を参照してください。
使用可能環境:全機種
コマンド引数:5個
応答バイト数:なし
2 コマンドパラメータ
2.1 パラメータリスト
| Bit | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| CMD | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
| ARG1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| ARG2 | PROPH | |||||||
| ARG3 | PROPL | |||||||
| ARG4 | PROPDH | |||||||
| ARG5 | PROPDL | |||||||
| ARG | Bit | Name | Function |
|---|---|---|---|
| 1 | 7:0 | Reserved | 常に0に書き込む |
| 2 | 7:0 | PROPH | プロパティ上位バイト。 このバイトは、PROPLと組み合わせて、変更するプロパティを指定するために使用されます。 |
| 3 | 7:0 | PROPL | プロパティ下位バイト。 このバイトは、PROPHと組み合わせて、変更するプロパティを指定するために使用されます。 |
| 4 | 7:0 | PROPDH | プロパティ値上位バイト。 このバイトは、PROPDLと組み合わせて、プロパティ値を設定するために使用されます。 |
| 5 | 7:0 | PROPDL | プロパティ値下位バイト。 このバイトは、PROPDHと組み合わせて、プロパティ値を設定するために使用されます。 |
2.2 パラメータ
2.2.1 PROPH
Property High Byte の略
目的
目的
設定対象とするプロパティ番号の 上位8ビット を指定します。
2.2.2 PROPL
Property Low Byteの略
目的
目的
設定対象とするプロパティ番号の 下位8ビット を指定します。
2.2.3 PROPDH
Property Data High Byteの略
目的
目的
そのプロパティに書き込みたい設定値(データ)の 上位8ビット を指定します。
2.2.4 PROPDL
Property Data Low Byteの略
目的
目的
そのプロパティに書き込みたい設定値(データ)の 下位8ビット を指定します。
2.3 具体的な使用例
2.3.1 受信ボリュームを変更
Si4735のオーディオ出力ボリュームを設定するプロパティを例に挙げます。
ターゲットプロパティ: RX_VOLUME (プロパティID: 0x4000)
設定したいボリューム値: 最大値の 63 (16進数で 0x003F)
この場合、0x12 コマンドに続くパラメータには以下のように値を割り振って送信します。
0x12,0x00,0x40,0x00,0x00,0x3F
ターゲットプロパティ: RX_VOLUME (プロパティID: 0x4000)
設定したいボリューム値: 最大値の 63 (16進数で 0x003F)
この場合、0x12 コマンドに続くパラメータには以下のように値を割り振って送信します。
0x12,0x00,0x40,0x00,0x00,0x3F
2.3.2 0x13 (GET_PROPERTY) との違い
よく似たコマンドに 0x13 (GET_PROPERTY) があります。
0x13 コマンドの際は、引数(引数側)として PROPH と PROPL のみを送信してプロパティを指定し、チップからのレスポンス(返却データ)として PROPDH と PROPDL を受け取るという動きになります。
これに対して、今回ご質問の 0x12 コマンドは「書き込み」であるため、4つすべてをこちらからコマンドパラメータとして送信します。
0x13 コマンドの際は、引数(引数側)として PROPH と PROPL のみを送信してプロパティを指定し、チップからのレスポンス(返却データ)として PROPDH と PROPDL を受け取るという動きになります。
これに対して、今回ご質問の 0x12 コマンドは「書き込み」であるため、4つすべてをこちらからコマンドパラメータとして送信します。
4 その他
4.1 コマンドの重要ステップと注意事項(Google AI (Gemini) の見解)
Silicon LabsのDSPラジオIC「Si4735」における0x12 (SET_PROPERTY) コマンドは、デバイスの動作パラメータ(音量、受信フィルタ帯域幅、AGC、SSBのBFOオフセットなど)を微調整するための、最も使用頻度が高い重要なコマンドです。
このコマンドに関する実務上の注意点、応用展開、およびGoogle AI (Gemini) の見解をまとめます。
0x12 コマンドは、コマンドバイトに続いて2バイトのプロパティID(PROP)と、2バイトの設定値(VAL)の計5バイトを送信します。
実装時の注意点は以下の通りです。
このコマンドに関する実務上の注意点、応用展開、およびGoogle AI (Gemini) の見解をまとめます。
0x12 コマンドは、コマンドバイトに続いて2バイトのプロパティID(PROP)と、2バイトの設定値(VAL)の計5バイトを送信します。
実装時の注意点は以下の通りです。
4.1.1 CTS(Clear to Send)の厳格な連続チェック
プロパティを変更する際、コマンド送信前にCTSが「1」であることを確認し、さらに送信後もCTSが「1」に戻るのを待つ必要があります。
特に選局時やボリューム変更時など、短時間に連続して 0x12 を発行する処理(ループ処理)を行う場合、CTSの確認を怠ると、IC内部のコマンドキューがオーバーフローして設定が無視されたり、音声が途切れたりします。
特に選局時やボリューム変更時など、短時間に連続して 0x12 を発行する処理(ループ処理)を行う場合、CTSの確認を怠ると、IC内部のコマンドキューがオーバーフローして設定が無視されたり、音声が途切れたりします。
4.1.2 現在の動作モード(FM/AM/SSB)に応じたプロパティIDの排他性
プロパティID(例:FM用の 0x1100 や AM用の 0x3100 など)は、現在 0x01 (POWER_UP) で起動しているモードと一致していなければエラー(ERRフラグ)になります。
FMモードで起動しているときにAM用のフィルタ帯域幅プロパティ(0x3102)を書き換えることはできません。
モードを切り替える際は、必ず前述の 0x11 シーケンスを経て、新しいモードで起動し直してから対応するプロパティを送る必要があります。
FMモードで起動しているときにAM用のフィルタ帯域幅プロパティ(0x3102)を書き換えることはできません。
モードを切り替える際は、必ず前述の 0x11 シーケンスを経て、新しいモードで起動し直してから対応するプロパティを送る必要があります。
4.1.3 16ビット値(PROP / VAL)のエンディアン(バイト順)
0x12 コマンドで送るプロパティIDと設定値は、どちらもビッグエンディアン(上位バイト[High]が先、下位バイト[Low]が後)で送信しなければなりません。
Arduinoなどの多くのマイコンは内部的にリトルエンディアンでデータを保持しているため、変数からそのまま流し込むと上位と下位が逆転し、意図しないバグを引き起こします。
Arduinoなどの多くのマイコンは内部的にリトルエンディアンでデータを保持しているため、変数からそのまま流し込むと上位と下位が逆転し、意図しないバグを引き起こします。
4.2 もう少し踏み込んだ応用展開(Google AI (Gemini) の見解)
0x12 コマンドを活用することで、標準のラジオにはない高度な機能や、受信環境に最適化されたインテリジェントなレシーバーを構築できます。
4.2.1 隣接局ノイズをカットする「動的フィルタ帯域幅(Dyanmic Bandwidth)制御」
AM/短波(SW)/SSBモードでは、プロパティ 0x3102 (AM_CHANNEL_FILTER) を使用して、内部DSPのデジタルフィルタ帯域幅(1.0kHz、1.8kHz、2.0kHz、2.5kHz、3.0kHz、4.0kHz、6.0kHz)をリアルタイムに変更できます。
展開例: 通常時は音質の良い 6.0kHz や 4.0kHz で受信し、混信やノイズが多い(0x23 (GET_INT_STATUS) などで取得したRSSIやSNRが低い)と判断した場合は、 プログラムで動的に 2.0kHz や 1.0kHz へ狭帯域化させる「オート・ノイズ・リダクション」を展開できます。
展開例: 通常時は音質の良い 6.0kHz や 4.0kHz で受信し、混信やノイズが多い(0x23 (GET_INT_STATUS) などで取得したRSSIやSNRが低い)と判断した場合は、 プログラムで動的に 2.0kHz や 1.0kHz へ狭帯域化させる「オート・ノイズ・リダクション」を展開できます。
4.2.2 SSBモードにおける「超精密同調(BFO微調整)」
SSB(USB/LSB)の受信時には、プロパティ 0x0102 (SSB_BFO) が極めて重要な役割を果たします。
このプロパティに「-16384 〜 +16384」の値を書き込むことで、1Hzステップでの周波数微調整(BFOオフセット)が可能になります。
展開例: ロータリーエンコーダの回転速度やボタン操作をマイコンで検知し、通常の選局(1kHzステップ)と、BFO微調整(10Hz/1Hzステップ)をスムーズに切り替えることで、 アマチュア無線のSSB音声を完璧に復調できる高級通信型受信機クラスの操作性を実現できます。
このプロパティに「-16384 〜 +16384」の値を書き込むことで、1Hzステップでの周波数微調整(BFOオフセット)が可能になります。
展開例: ロータリーエンコーダの回転速度やボタン操作をマイコンで検知し、通常の選局(1kHzステップ)と、BFO微調整(10Hz/1Hzステップ)をスムーズに切り替えることで、 アマチュア無線のSSB音声を完璧に復調できる高級通信型受信機クラスの操作性を実現できます。
4.3 代表的なプロパティID一覧
実務で頻繁に使用される主要なプロパティの一例です。
| モード | プロパティID (PROP) | 設定値の意味 (VAL) | 用途 |
| 共通 | 0x4000 | 0x0000 〜 0x003F (0〜63) | 全体のデジタルボリューム(音量) |
| FM | 0x1100 | 0x0001 (有効) / 0x0000 (無効) | FMのステレオ/モノラル強制切り替え |
| AM/SW | 0x3102 | 0x0000 (6kHz) 〜 0x0006 (1kHz) | デジタル・チャンネルフィルタの帯域幅 |
| SSB | 0x0101 | 0x0000 (1.2kHz) 〜 0x0005 (4kHz) | SSB専用のシャープなフィルタ帯域幅 |
| SSB | 0x0102 | 16ビット符号付き整数 | BFOのオフセット周波数(Hz単位) |
4.4 その他Google AI (Gemini) の見解
Si4735の制御設計において、Google AI (Gemini) は「0x12コマンドの多用によるI2Cバスの帯域圧迫の回避」と「ユーザー体験(UX)に直結するスムーズなフェード制御」の2点を重視します。
4.4.1 I2C通信の最適化に対する見解
音量の変更やBFOの微調整(ロータリーエンコーダを素早く回す操作など)を行う際、エンコーダのパルスが発生するたびに生データで 0x12 コマンドを発行すると、I2Cバスがコマンドで溢れ返り、マイコン側の処理もIC側のCTS待ちでストップします。
Geminiとしての見解は、「タイマー割り込みやミリ秒単位のデバウンス(間引き)処理を挟み、前回の送信から数ミリ秒〜数十ミリ秒の猶予を持たせて、値が確定または変化した時だけ 0x12 を送る構造」にすべきです。
これにより、システム全体の対話性と安定性が劇的に向上します。
Geminiとしての見解は、「タイマー割り込みやミリ秒単位のデバウンス(間引き)処理を挟み、前回の送信から数ミリ秒〜数十ミリ秒の猶予を持たせて、値が確定または変化した時だけ 0x12 を送る構造」にすべきです。
これにより、システム全体の対話性と安定性が劇的に向上します。
4.4.2 オーディオの快適性(ソフト・ミュート)の推奨
フィルタ帯域幅(0x3102)などを唐突に切り替えると、DSPの内部演算が瞬間的に切り替わるため、音声に小さなクリックノイズが入ることがあります。
Geminiの見解では、設定を変更する直前に 0x4000 プロパティで一度音量を下げるか、一時的にミュートをかけ、プロパティ変更完了後に元の音量に戻す(ソフトフェード)ロジックをファームウェア側に実装することを推奨します。
このひと手間を加えることで、市販の高級ラジオと遜色ない、耳に優しい洗練された操作感が実現可能であると評価します。
Geminiの見解では、設定を変更する直前に 0x4000 プロパティで一度音量を下げるか、一時的にミュートをかけ、プロパティ変更完了後に元の音量に戻す(ソフトフェード)ロジックをファームウェア側に実装することを推奨します。
このひと手間を加えることで、市販の高級ラジオと遜色ない、耳に優しい洗練された操作感が実現可能であると評価します。
