Hobby Lab 趣味のモノ作り実験のサイトです。
部品 オペアンプ_関係 Si4735 マニュアル 0x12
1 0x12. SET_PROPERTY 概要
2 コマンドパラメータ
2.1 パラメータリスト
2.2 パラメータ
2.2.1 PROPH
2.2.2 PROPL
2.2.3 PROPDH
2.2.4 PROPDL
2.3 具体的な使用例
2.3.1 受信ボリュームを変更
2.3.2 0x13 との違い
4 その他(Gemini)の見解
4.1 コマンドのステップ注意事項
4.1.1 CTSの連続チェック
4.1.2 (FM/AM/SSB)切り替え
4.1.3 エンディアン(バイト順)
4.2 もう少し踏み込んだ応用展開
4.2.1 動的フィルタ帯域幅制御
4.2.2 超精密同調(BFO微調整)
4.3 代表的なプロパティID一覧
4.4 その他
4.4.1 I2C通信の最適化
4.4.2 ソフト・ミュートの推奨

PrO:Si4735関係  Si4735について
 Si4735ラジオを作って見よう1
 v コマンド & パラメータ辞書 v
 0x01. POWER_UP
 0x10. GET_REV
 0x11. POWER_DOWN
 0x12. SET_PROPERTY
 0x13. GET_PROPERTY
 0x14. GET_INT_STATUS
 0x20. FM_TUNE_FREQ
 0x21. FM_SEEK_START
 0x22. FM_TUNE_STATUS
 0x23. FM_RSQ_STATUS
 0x24. FM_RDS_STATUS
 0x27. FM_AGC_STATUS
 0x28. FM_AGC_OVERRIDE
 0x40. AM_TUNE_FREQ
 0x41. AM_SEEK_START
 0x42. AM_TUNE_STATUS
 0x43. AM_RSQ_STATUS
 0x47. AM_AGC_STATUS
 0x48. AM_AGC_OVERRIDE
 0x80. GPIO_CTL
 0x81. GPIO_SET

Pr:OPAMP オペアンプ関係
PrO:送受信機  Si4735
PrO:オペアンプ  LM324
 LM358
Pr:Prプロセッサ関係
PrP:プロセッサ
動作比較
 STM32F動作比較
 CH32V203&STM32F 動作比較
 arduino動作比較
raspberrypi関係
 RaspberryPiハード
CH32V関係
 -CH32V開始
 -203K8T6(32Pin)開始
 -203C8T6(48P)開始
 -003J4M6(8Pin)開始
 -003F4P6(20Pin)開始
 -Moun River StudioⅡ
 プログラミング!
  203_GPIO関係
  203_TIME関係
  203_TIME Encoder
  203_I2C関係
  203_1-Wire関係
  003_DS18B20テスター
  USART(UART)関係
  DS18B20をModBus制御
 -マニュアル
 203データシート
 203取説
  MBA メモリとバス方式
  PWR 電力制御
  RCC リセット・拡張・クロック
  BKP バックアップレジスタ
  CRC 巡回冗長検査
  RTC リアルタイムクロック
  GPIO GPIOと代替機能
  DMA ダイレクトメモリアクセス制御
  ADTM 高度な制御タイマー
  GPTM 汎用タイマー
  BCTM 基本タイマー
  USART 同期非同期通信
arduino関係
 ESP12関係
 (a)ESP-8266D1mini注意
PrP:その他  RS485ドライバー
 CP2102 BRIDGE
 WCH-LinkEエミュレーター
Pr:Wire 電線関係
Pr:Resistance 抵抗
Pr:Capacitor コンデンサ
Pr:Coil コイル
Pr:PassiveElmt 受動素子
Pr:Diode ダイオード関係
Pr:Tr トランジスタ関係
2SC1815
 リレードライバー設計
 アンプ設計
 発振器
TLP152
 TLP152テスト
TLP2361
 TLP2361テスト
TLP5754
 TLP5754テスト
Pr:Source 電源関係  ツェナーダイオード
 TL431
 LM317
PrS:Downモジュール
 EGS002_IR2110S
 SKU011012
 ACDC02
 XH_M299
 LM2596
 Mini360_MP23070N
 DROK
 WH140
PrS:UPモジュール
 MT3608
PrS:充電モジュール
 TP4056
Pr:Sensor_AD_時計等
PrS:電圧、電流
ADS1115 16bit4CH I2C A/D
 Hardware
 RaspberryPi_コマンド接続
 RaspberryPi_Python
 Arduino
 CH23V203 MounRiverStudioⅡ
INA226 I2C 直流電圧電流
 Hardware
 Arduino
 RaspberryPi_Python
WCS 電流ホール素子
 Hardware
PrS:温度、気圧、湿度、照度
BNE280 I2C 気圧,湿度,気温
 Hardware
 Arduino
 RaspberryPi_Python
BH1750 I2C 照度
 Hardware
 Arduino
 RaspberryPi_Python
DS18B20 1-Wire 温度計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:時間、日時
DS3231 I2C 時計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:表示器
MAR3953 320X480 3.95"
 概要と線や点を描く
 フォントを描く
SSD1306 I2C 0.96"OLED
 Hardware
 Arduino
 RaspberryPi_Python
Pr:Old Processor他
Ot:Others その他
この辞書は、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個
応答バイト数:なし




2 コマンドパラメータ

2.1 パラメータリスト

BitD7D6D5D4D3D2D1D0
CMD00010010
ARG100000000
ARG2PROPH
ARG3PROPL
ARG4PROPDH
ARG5PROPDL

ARGBitNameFunction
17:0Reserved常に0に書き込む
27:0PROPHプロパティ上位バイト。
このバイトは、PROPLと組み合わせて、変更するプロパティを指定するために使用されます。
37:0PROPLプロパティ下位バイト。
このバイトは、PROPHと組み合わせて、変更するプロパティを指定するために使用されます。
47:0PROPDHプロパティ値上位バイト。
このバイトは、PROPDLと組み合わせて、プロパティ値を設定するために使用されます。
57:0PROPDLプロパティ値下位バイト。
このバイトは、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

2.3.2 0x13 (GET_PROPERTY) との違い

よく似たコマンドに 0x13 (GET_PROPERTY) があります。
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バイトを送信します。
実装時の注意点は以下の通りです。

4.1.1 CTS(Clear to Send)の厳格な連続チェック

プロパティを変更する際、コマンド送信前にCTSが「1」であることを確認し、さらに送信後もCTSが「1」に戻るのを待つ必要があります。
特に選局時やボリューム変更時など、短時間に連続して 0x12 を発行する処理(ループ処理)を行う場合、CTSの確認を怠ると、IC内部のコマンドキューがオーバーフローして設定が無視されたり、音声が途切れたりします。

4.1.2 現在の動作モード(FM/AM/SSB)に応じたプロパティIDの排他性

プロパティID(例:FM用の 0x1100 や AM用の 0x3100 など)は、現在 0x01 (POWER_UP) で起動しているモードと一致していなければエラー(ERRフラグ)になります。
FMモードで起動しているときにAM用のフィルタ帯域幅プロパティ(0x3102)を書き換えることはできません。
モードを切り替える際は、必ず前述の 0x11 シーケンスを経て、新しいモードで起動し直してから対応するプロパティを送る必要があります。

4.1.3 16ビット値(PROP / VAL)のエンディアン(バイト順)

0x12 コマンドで送るプロパティIDと設定値は、どちらもビッグエンディアン(上位バイト[High]が先、下位バイト[Low]が後)で送信しなければなりません。
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 へ狭帯域化させる「オート・ノイズ・リダクション」を展開できます。

4.2.2 SSBモードにおける「超精密同調(BFO微調整)」

SSB(USB/LSB)の受信時には、プロパティ 0x0102 (SSB_BFO) が極めて重要な役割を果たします。
このプロパティに「-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 を送る構造」にすべきです。
これにより、システム全体の対話性と安定性が劇的に向上します。

4.4.2 オーディオの快適性(ソフト・ミュート)の推奨

フィルタ帯域幅(0x3102)などを唐突に切り替えると、DSPの内部演算が瞬間的に切り替わるため、音声に小さなクリックノイズが入ることがあります。
Geminiの見解では、設定を変更する直前に 0x4000 プロパティで一度音量を下げるか、一時的にミュートをかけ、プロパティ変更完了後に元の音量に戻す(ソフトフェード)ロジックをファームウェア側に実装することを推奨します。
このひと手間を加えることで、市販の高級ラジオと遜色ない、耳に優しい洗練された操作感が実現可能であると評価します。





































更新日 2026/06/21 16:56  管理者 平林 剛Hirabayashi Takeshi